当前位置: 首页 > news >正文

运维大规模K8S集群注意事项

序言

    闲来无事,一片混沌,想不清思不断,改变好像来自于各个方面,有的时候是内部的冲突,有的时候是外部的竞争,然而,大部分情况下,一旦错过,就已经没得选了。

    尴尬的处境,需要有强大的抗压能力,可能是环境带来的,可能是别人带来的,而大部分情况下,都是自己带来的。

运维大规模K8S集群的注意事项

     1 pod无法启动

    有几个组件的pod,有的是deployment,有的是cronjob,运行了380多天了,突然有一天,这个pod就启动不起来了,一直在crash中,无法启动,第一反应是干啥,对,你想对了,删除这个pod重启一下,发现依旧无法启动。

    重启在关键时刻居然失效了,那么就只能看一下日志了。

kubectl logs -n sre podname
#日志显示内容
argument list too long

    好熟悉的报错信息,似曾相识,好像在进行删除大量文件的时候,也见过这个报错。最后一通搜索发现了是pod里面默认注入了的环境变量太多,从而导致pod无法启动。

#在pod的spec里面配置
enableServiceLinks: false

    在k8s的默认配置中,会将svc的相关信息注入到pod中,而在pod进行启动init进程的时候,环境变量会作为参数传递进入,从而导致pod无法启动。

    在容器启动的时候,第一个进程就是init进程,可能是我们自己的业务进程,那么当进程进行fork后,就是exec啥的装载用户进程,而这个参数的长度是2M,一旦超过,那么这个容器就永远启动不起来了。

    检查了一下同命名空间的pod数量,大概3000个样子,而每个都有3个svc,从而导致进入一个pod之后,就有好几万个关于svc的环境变量。。。有的时候,默认配置并不一定是好的,而且社区好像也不愿意进行修改默认值,因为违反了他们原则。

    这个就让我想起来当初我做helm chart的时候,进入pod,在无意中看了一眼环境变量,然后发现有很多的环境变量,感觉很烦,然后就加入了这个配置,想来还是好的,要不然大规模的生产环境pod都要全部升级一遍,那工作量,想想就够了。。。别说去真的升级了。

#env参数就是环境变量的大小,在内核中编译的,无法修改
int execve(const char *pathname, char *const argv[],char *const envp[]);

    当你的容器有好几个sidecar容器的时候,你需要去查看对应容器的日志,默认的容器可能还没启动。。。例如你还有个init容器。

    无论是deployment,statfullset还是cronjob,在默认情况下,都会注入这个环境变量。所以,如果你不想莫名其妙的出问题,禁止这个吧,因为大部分情况下,这个环境变量毫无用处。

    2 pod label不要随便打

    当你使用helm chart来进行资源管理的时候,千万要记住,pod的label不要随便打,当你需要对一个pod打label的时候,最好好是永远不变的一个label,这样的是可以设置的。

    但是如果你打了一个在pod的生命周期中会不断变化的label,那么就在label的值发生变化的时候,就需要修改,然后你就会发现一个非常悲催的事,这个pod label是无法修改的。

#helm upgrade的时候报错信息
Field is immutable

    在进行设计产品的时候,每一个操作,都要考虑生命周期管理,其中修改是最常见一种操作,而helm说,pod label不支持修改,你只能重建,对于那种很轻松重建的还好,但是如果是那种比较重要的,只能一直upgrade的应用来说,这日子没法过了,再也不能好好的滚动更新了。。。服务中断了解一下。

    你猜我为什么知道这个大坑呢,因为我就是设计那个BUG的人。。。急匆匆上线,急匆匆扩大规模,到了一定的时间段,卧槽。。。前任挖坑,后人乘凉

    其实有的时候,也是一个权衡,没事干的时候,打什么label呢,还要各种修改chart的template,纠结的不行,其实打label的原因有没有可能是为了适配监控,然后你会发现如果一开始不做艰难的抉择,到后面也会很痛苦,因为面临着重建而带来的服务中断的风险,但是。。。如果你架构上面做了双k8s的架构那还有挽救的可能,否则,你将毫无办法。

风言风语

    有的时候,你不踩一些坑,你根本记不住那些需要避开的地方,可能看过,也可能没注意过,反正是踩中了,经历过才懂,否则都是懵懂。

    坑多了,其实压力也蛮大的,因为毕竟自己设计的自己运维,而且是大规模的集群,升级起来何其痛苦,要通知各种人,各种防御手段,一想到这,我就准备把同事嘎了,怎么他们就没阻止我。

    那么问题来了,如果你知道一个风险,但是你什么都做不了,那么你还会一如既往的去努力付出吗?如果不知道这个风险,依旧懵懵懂懂的,那么一旦风险来临,你又将如何面对,你喜欢哪种?是知道还是不知道。。。知道的人可能更加痛苦一点吧,因为做不了任何改变。。。首先是失望,当你发现不能改变的时候,慢慢就演变成了绝望?还是能及时的调整心态,然后。。。享受当下?

    你以为知道,只是你以为知道,其实你不知道还有很多很多,你知道的只是别人让你知道的,就像你以为是你选择了玩游戏,其实可能是游戏的设计者让你按时的去玩游戏,就像是你以为你刷视频是休息一下,其实可能是视频的设计者引诱你去刷,只是一个时间黑洞而已,所有的广告都在强化你的认识,你以为是你选的,可能并不是。。。

    树立一个所谓的价值观和愿景,其实有没有可能是他们自己也不知道怎么玩了,树立一个虚拟的目标,来让无欲无求的自己能涌起一股激情。。。本质上其实也是毫无意义。

    信息围城。。。想清楚自己想做啥,想清楚那就去追求自己想做的,毕竟时光不等人。世界尽头的咖啡,苦而涩,味甘甜。

相关文章:

运维大规模K8S集群注意事项

序言 闲来无事,一片混沌,想不清思不断,改变好像来自于各个方面,有的时候是内部的冲突,有的时候是外部的竞争,然而,大部分情况下,一旦错过,就已经没得选了。 尴尬的处境&a…...

供应链系统源码的关键技术是什么?

供应链管理是企业运营中的重要环节,而高效的供应链系统能够大幅提升企业的竞争力。在数字化转型的过程中,越来越多的企业选择使用开源供应链系统源码来定制开发适合自身需求的解决方案。那么,供应链系统源码的关键技术有哪些?本文…...

git 修改远程仓库的 URL

git remote set-url origin 修改远程仓库的 URL。 old:ssh://wangzhijun192.168.10.48:29418/kapok new:http://wangzhijun172.31.178.243:90/kapok git remote set-url origin ssh://wangzhijun172.31.178.243:29418/kapok old:https://120.79.152.225/wuzeyuan/flymap_app n…...

使用图数据库 Neo4j 处理对象之间的关系

使用 Neo4j 图数据库来处理明星之间的关系涉及以下主要步骤:数据建模、数据导入、查询和关系修改。下面是详细的操作步骤: 1. 安装 Neo4j 下载和安装: 从 Neo4j 官方网站 下载 Neo4j Community Edition 或者 Enterprise Edition,安装并启动…...

使用C#的异步和依赖注入实现网络数据存储

详细解释 依赖注入(Dependency Injection): ConfigureServices 方法配置了服务的依赖注入。IDataProcessor 接口与 DataProcessor 类绑定,IDbConnectionFactory 接口与 DbConnectionFactory 类绑定。这样在程序运行时,依赖注入容器…...

tomcat日志文件切割

文章目录 引言I 使用用crontab工具,定时执行任务II 通过Linux系统自带的切割工具logrotate来进行切割logrotate 简介用法结合crontab进行自定义的定时轮转操作III 基于其他日志框架进行分隔引言 tomcat 的 catalina.out 文件不会进行日志切割,当这个文件大于2G 时,会影响to…...

Python将Word文档转为PDF

使用python将word转pdf_py work转pdf-CSDN博客 掌握Python技巧:PDF文件的加密和水印处理-CSDN博客...

深入浅出链表

目录 1.链表的基本概念及结构 1.1基本概念 1.2结构 2.链表的分类 3.链表的实现(循环链表增删查改实现) 1.动态申请节点(结点)​编辑 2.单链表打印 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 …...

Linux核心命令入门

Linux常用命令 文件管理文件目录管理文件查看编辑 系统管理网络管理hostnamehost/nslookuptraceroutenetstat列出所有端口 (包括监听和未监听的)列出所有处于监听状态的 Sockets显示每个协议的统计信息 硬件管理df(Disk Free)du(Disk Usage&a…...

腾讯无界微前端框架介绍

一、无界微前端框架概述 无界微前端框架是由腾讯团队推出的,旨在解决现有微前端方案中存在的问题,如适配成本高、样式隔离困难、运行性能不佳、页面白屏、子应用通信复杂、子应用保活机制缺乏等。 技术实现 无界微前端的核心技术是基于Web Component…...

Linux——网络(2)

一、通信 --- 不同主机上进程间的通信 1、IP和端口号 IP:标识网络中的一台主机 本质上 32位的整型数据 端口号: 标识某个进程 本质上 16位的整型数据 2、udp和tcp udp的特点: 1.无连接 2.不可靠 tcp的特点: 1.面…...

结合量子技术解决数据传输安全

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 接前篇:数采网关面…...

【Rust光年纪】提高开发效率:深入了解Rust语言中的数据库客户端和文件处理库

深入探索:Rust语言中多款数据库客户端与文件处理库详解 前言 在现代软件开发中,使用各种数据库和文件处理操作是非常常见的。Rust语言作为一种快速、安全、并发的系统编程语言,也拥有丰富的生态系统和库。本文将介绍几个用于Rust语言的数据…...

【自动驾驶】控制算法(一)绪论与前期准备

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…...

CSDN创作一周年总结

一周年总结 文章目录 一周年总结我的第一篇文章这一年我收获到了什么?1.培养了逻辑能力2.形成了自己的知识库,知识网络3.功利性的收获 我的第一篇文章 不知不觉之间,也已经过去一年了。还记得第一次决定在csdn上写博客,是因为进入…...

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] 永恒之眼(蓝龙) 第一阶段 第二阶段 第三阶段 载具1-6技能介绍 World of Warcraft [CLASSIC] the Eye of Eternity [EOE]_永恒之眼 eoe-CSDN博客 永恒之眼怎么出副本呢,战斗结束&am…...

一键翻译全球:多语言支持下的英文翻译工具

随着科技的飞速发展,一系列英文翻译工具应运而生,它们以人工智能为驱动,极大地简化了跨语言交流的过程。本文将带您一窥英文翻译工具探索那些能够帮助我们跨越语言鸿沟的神奇工具。 1.福昕在线翻译 链接直达>>https://fanyi.pdf365.c…...

水战再起波澜,“怡宝”要下好怎样一盘棋?

不少投资者常把那些刚需性强、永远也不可能淘汰的产业称为“日不落产业”,从细分板块来看,水无疑具有一定代表性。农夫山泉掌门人钟晱晱曾直言:“我选择了一个日不落的产业,你永远要喝水,不可能不喝水。” 多年下来&a…...

使用maven快速生成打包文件3

这里再介绍一种打包方式&#xff0c;依赖包分开打包&#xff0c;直接将需要部署的文件打包成一个要锁文件&#xff0c;比如kafka-roma-bin.tar.gz&#xff0c;这里需要两个文件&#xff0c;一个pom2.xml&#xff0c;一个package.xml。 pom2.xml <?xml version"1.0&q…...

Excel技巧(一)

快捷键技巧 原文链接 选取某一行的数据直到最后一行&#xff1a;【CTRL SHIFT ↓ 】或者选取一行后按住SHIFT键&#xff0c;双击下边线就可以快速选取区域。 如果表格中有多行空行&#xff0c;可以先按CTRL SHIFT END&#xff0c;再按CTRL SHIFT 上下键调整&#xff0c;…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...