k8s中sidecar死循环

news2025/4/21 4:53:00

序言

    怎么发现我的同事们很上进呢,估计做了下贱的事儿吧。

    伤不到我,不代表不疼!

sidecar产生的问题

    1 背景

    在k8s的环境中,pod的使用越来越多了,也就产生了sidecar容器,在现在的环境中,一个pod可以带差不多快10个sidecar容器了,各种各样的场景,例如监控的sidecar容器,例如日志的sidecar容器。

    sidecar容器最好用的地方在于只要在pod中加了一个annotations就可以无缝启动一个容器了,而且当pod删除之后,如果sidecar容器的配置发生了变化,那么就会自动生效了。

    日志sidecar容器,主要用来将pod的日志进行收集,发送到kafka中,从而保存日志,在pod中写了一个annotions进行保存,而sidecar的配置的相关的容器,用一个helm进行安装,一个k8s中一个集群就好了。

    2 sidecar容器引发的问题

    在某一个月黑风高夜,要进行kafka的topic变更,从而就理所当然的修改了sidecar容器的配置,将topic修改,然后进行升级,升级完成之后,重启了一个测试pod,发现配置未发生变化。

    查看sidecar的cm配置,发现没有变化,手动进行修改cm,然后再重启容器,发现生效了,但是再次更新helm,依旧变成了老的值。

    没有想出特别好的办法,从而将sidecar 配置的2的pod同时进行了删除,然后发现pod居然不能重新启动了,emmm,有点慌。

    赶紧将业务的测试pod删除一个,看是否能启动,发现pod能正常删除,但是启动不了,生产环境有点压力,这个时候只要有pod挂掉或者是宿主机挂机,那么所有的业务pod将不能启动,必然会造成故障。

    掐指一算,没办法了,先喊人一起帮忙查,pod都没启动,看不到任何错误信息,只能直接查看namespace的事件了。

kubectl get events -n fuck

    发现有事件,事件显示pod无法启动,是因为sidecar的svc端点无法找到,这不是很正常吗,因为服务的pod都被删除了,那么svc肯定用不了,从而形成了一个死循环。

    pod启动需要经过验证,也就是要调用svc,而svc的两个pod被删除了,那么就卡死在这里,都不能启动。

webhooks.failurePolicyfailurePolicy 定义了如何处理来自准入端点的无法识别的错误 - 允许的值是 Ignore 或 Fail。默认为 Fail

   默默地修改了webhook的失败策略,从默认值修改为Ignore,然后发现控制的pod启动了,发现业务的pod也启动了,危机解决,默默地送了一口气,说了一句fuck,居然还会有循环依赖的情况发生。

    我知道你很急,但是请先别急,找找思路,实在不行,就只能摇人了。

    故障都是天注定的,所以急也没用,没用也急。

validatingwebhookconfiguration 全局资源,用来进行验证使用。

    3 日志sidecar存在的问题

    在使用日志sidecar的时候,碰到几个问题,注意避雷。

    使用sidecar的时候,如果修改配置,必须要重启原来的pod,如果重启pod影响很大,可能要使用其他的方案,因为在使用sidecar的时候,如果单独启动sidecar容器,配置是不能生效的;如果对于发布部署类的,这种比较好用,如果是中间件那种万年不启动的,有点难度,所以选择sidecar的时候,最好的是pod能自动对修改的配置生效。

    在使用sidecar的时候,注意分配好对应的request和limit,如果一个宿主机上的机器过多,不要把request和limit设置成一样,设置的很大,因为sidecar占用的资源也很大,最好是request很少,limit稍微大一点,而且这个配置都是固定的,不能说有的pod是一个值,其他的pod又是一个值。

    在使用日志配置的时候,有一个是多行的配置,默认值是开启的,这个容易产生一个bug,在有的云上面,如果日志为空,那么会直接将这个宿主机的磁盘直接吃满,不过没仔细查,当时也就草草的把这个配置设置为false就解决了。

    sidecar的配置是全局的时候,你会发送最新的配置更新了,但是在其他的namespace里面的配置没更新,直到你重启了一个pod,才会发现配置更新,这点也需要注意,经常会在重启pod之前去检查配置,然后发现没更新,在那折腾半天。

    在使用helm的时候,如果发现upgrade的时候,set的值未生效,检查一下template,没准就会发现有些傻叉把对应的配置要么就是不能配置,要么就是配置的位置不对,从而导致不能生效。

风言风语

    sidecar用起来的确很爽,因为使用起来很简单,只要加一个annotation,但是要注意使用的时候,可能会阻塞pod的启动,如果你使用了istio,也可能存在这种问题。

    两个pod同时删除,就导致了webhook不能使用,这个也是个风险点,如果2个pod同时在一个机器上,而这台机器宕机了;如果这两个pod所在的两个机器同时宕机了,也不能使用了,而且这个时候,如果业务容器重启了,那还启不起来,如果告警做的不好,那估计等整个集群挂了,你才能发现这个问题,告警做的是否充足,也是个考验。

     上进和下贱有区别吗?当然没分别了,凡是有上进心的人一定会做出下贱的事儿,这下贱的人也一定会有上进心的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【物联网】基于LORA组网的远程环境监测系统设计

基于LORA组网的远程环境监测系统设计 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数…

第3章 垃圾收集器与内存分配策略《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》

第3章 垃圾收集器与内存分配策略 3.2 对象已死 Java世界中的所有对象实例,垃圾收集器进行回收前就是确定对象哪些是活着的,哪些已经死去。 3.2.1 引用计数算法 常见的回答是:给对象中添加一个引用计数器,有地方引用&#xff0…

【树莓派Pico FreeRTOS】-中断服务与二值信号量

中断服务与二值信号量 RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 FreeRTOS 由 Real Time Engineers Ltd. 独家拥有、开发和维护。FreeRTO…

在已有的vue项目中使用vuex

介绍 Vuex 是一个用于 Vue.js 应用程序的状态管理模式 库。它充当应用程序中所有组件的集中存储,其规则确保状态只能以可预测的方式进行更改。 专门在vue中实现集中式状态(数据)管理的一个插件对vue应用中多个组件的共享状态进行集中式的管…

宇树机器狗go2—slam建图(1)点云格式

0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…

致远OA——自定义开发rest接口

文章目录 :apple: 业务流程 🍎 业务流程 代码案例: https://pan.quark.cn/s/57fa808c823f 官方文档: https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登录系统 —— 后台管理 —— 切换系…

No package docker-ce available问题的解决

安装docker时提示 rootk8s-node3 ~]# yum install -y docker-ce docker-ce-cli containerd.io Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com No packag…

群晖威联通飞牛等nas如何把宿主机硬盘挂接到可道云docker容器中

可道云系统是用户常用的一款面向个人用户的轻量级私有云存储工具,以高效管理和安全存储为核心,打造便捷的数字化办公体验。但是用户希望把原有其他磁盘中文件挂接到这个新系统中有很大的难度,主要是对linux文件系统理解有很大的误区,认为目录结构是固定的…

Uniapp:列表选择提示框

目录 一、出现场景二、效果展示三、具体使用 一、出现场景 在项目的开发过程中,有这样一种场景,就是点击按钮走后续的逻辑之前还需要选择前提条件,就一个条件的情况下如果使用弹出框就显示比较多余,列表选择提示框刚好能够满足我…

【python】django sqlite版本过低怎么办

方法一:下载最新版本 复制上面的内容的链接 在服务器上进行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…

山东大学软件学院创新项目实训开发日志(18)之对话自动生成标题设为用户第一次对话发的文字

本次功能的实现主要集中在后端,前端代码不用改变: 前端界面效果展示:

【机器学习】PCA-奇异值分解-上采样与下采样-傅里叶变换

1. PCA 主成分分析 主成分分析(PCA)是一种常用的数据降维方法。 它通过找到数据中方差最大的方向(主成分),将原始高维数据映射到较低维空间,同时尽可能保留原始信息。 数学实现上,通常通过协方…

【day8】调用AI接口,生成自动化测试用例

1、项目结构建议 project/ ├── api_docs/ # 存放接口文档 │ └── XX系统.swagger.json ├── ai_generator/ # AI测试用例生成模块 │ └── test_case_generator.py ├── tests/ # 生成的测试用例 │ └── test_user_api.py ├── conftest.py # pytest配置 ├─…

【Tauri2】026——Tauri+Webassembly

前言 不多废话 直言的说,笔者看到这篇文章大佬的文章 【04】Tauri 入门篇 - 集成 WebAssembly - 知乎https://zhuanlan.zhihu.com/p/533025312尝试集成一下WebAssembly,直接开始 正文 准备工作 新建一个项目 安装 vite的rsw插件和rsw pnpm instal…

Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)

在Windows中用记事本写了一个.sh的Linux运行脚本,是无法直接在Linux中执行,需要首先把文本编码格式转换为Unix的,特别是换行符这些,转换步骤如下: 1、打开文档 在Notepad中打开需要转换的文件。 2、进入文档格式转换…

Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别

目录 一、工具的本质 二、一些常用的工具 1.yum 2.vim 1)vim的三种基本模式: 2)vim的基本操作 ①命令模式下的基本操作: ②插入模式: ③底行模式: 3)vim的配置:让他变得更好用 3.gcc…

RBAC的使用

1、简述RBAC的作用及工作流程 Rbac基于角色访问控制,用于管理用户对集群资源的访问权限,通过定义角色和绑定规则,将用户与权限进行关联,作用:权限精细化管理,操作便捷与统一管理,动态调整权限。…

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418

MySQLRedis实战教程:从Docker安装部署到自动化备份与数据恢复 一、前言 在企业应用中,对MySQL和Redis运维的要求越来越高: 不能仅是启动就算部署运行稳定、隔离、访问控制、备份恢复、安全可靠,才是 企业级的基本功能 本文将手…

AI驱动商业变革:零售行业的智能化跃迁

引言:AI技术迈入黄金时代 2024年成为生成式AI(Gen AI)全面落地的关键年。据麦肯锡《技术趋势展望》报告,生成式AI相关投资同比增长​7倍​​,其经济价值预计达​​2.6-4.4万亿美元​​[1]。在零售领域,该技…

AI调试工具有哪些?

一、深度学习框架专用调试工具 TensorBoard • 功能:实时监控训练指标(损失值、准确率)、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架:TensorFlow、PyTorch(通过插件) • 特点:支持…