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

k8s中sidecar死循环

序言

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

    伤不到我,不代表不疼!

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所在的两个机器同时宕机了,也不能使用了,而且这个时候,如果业务容器重启了,那还启不起来,如果告警做的不好,那估计等整个集群挂了,你才能发现这个问题,告警做的是否充足,也是个考验。

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

相关文章:

k8s中sidecar死循环

序言 怎么发现我的同事们很上进呢,估计做了下贱的事儿吧。 伤不到我,不代表不疼! sidecar产生的问题 1 背景 在k8s的环境中,pod的使用越来越多了,也就产生了sidecar容器,在现在的环境中,一个pod…...

Linux `init 4` 相关命令的完整使用指南

Linux init 4 相关命令的完整使用指南—目录 一、init 系统简介二、init 4 的含义与作用三、不同 Init 系统下的 init 4 行为1. SysVinit(如 CentOS 6、Debian 7)2. systemd(如 CentOS 7、Ubuntu 16.04)3. Upstart(如 …...

Java Web 之 简介 100问

DAO 层的作用是什么? DAO 层作用: 与数据库直接交互,封装所有数据访问的细节(即CRUD操作),不包含业务逻辑,只关注数据的持久化。 DAO的全拼是什么 Data Access Object,数据连接实…...

06-libVLC的视频播放器:推流RTMP

创建媒体对象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 创建失败返回错误 libvlc_media_new_path:根据文件路径创建媒体对象。注意:toStdString().c_str() 在Qt中可能存在临时字符串析构问题,建议…...

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

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

少儿编程路线规划

少儿编程路线规划—一文写明白 现在有很多的编程机构,五花八门的。我有幸也见识到了大家的营销策略。这些策略有黑有白吧,从业几年,沉淀下来一些客户角度的干货,分享给大家。 如果是想以很远很远的就业为目的,毕业就…...

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

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

Docker Overlay 网络的核心工作(以跨节点容器通信为例)

Docker 的 overlay 网络是一种基于 VXLAN(Virtual Extensible LAN)的多主机网络模式,专为 Docker Swarm 集群设计,用于实现跨节点的容器通信。它通过虚拟二层网络,允许容器在不同主机上像在同一局域网内一样通信。Dock…...

用 R 语言打造交互式叙事地图:讲述黄河源区生态变化的故事

目录 🌟 项目背景:黄河源头的生态变迁 🧰 技术栈介绍 🗺️ 最终效果预览 💻 项目构建步骤 1️⃣ 数据准备 2️⃣ 构建 Leaflet 地图 3️⃣ 使用 scrollama 实现滚动触发事件 4️⃣ 使用 R Markdown / Quarto 打包发布 🎬 效果展示截图 📦 完整代码仓库 …...

Java Stream常见误区解析:五大错误与规避方法

Java Stream API以函数式编程风格提供了一种强大的数据处理方式,使代码更简洁和可读。然而,误用Stream可能导致性能低下、错误频发或代码难以维护。本文将探讨开发者在使用Java Stream时最常见的五种错误,并提供规避方法。 1. 在Stream处理中…...

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

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

构建灵活可扩展的接口抽象层:支持多种后端数据存取的最佳实践

构建灵活可扩展的接口抽象层:支持多种后端数据存取的最佳实践 在现代应用开发中,后端数据存取的需求可能非常多样化:本地数据库、云存储服务、REST API,甚至是文件系统。因此,设计一套支持多种后端数据存取的接口抽象层是提高系统灵活性和可维护性的关键。本文将详细探讨…...

Scade 语言词法介绍

Scade 6 是一种具备形式化语法与形式化语义的领域特定语言(注1)。自2008年发布(注5)起,在 Scade Suite 产品系列中语言定义方面到目前未产生重要的改变(注2)。在下面的内容中将介绍Scade 语言的词法(注3)。 注1&#x…...

如何配置环境变量HADOOP_HOMEM、AVEN_HOME?不配置会怎么样

以下是在不同操作系统中配置 HADOOP_HOME 和 JAVA_HOME 环境变量的方法,以及不配置可能产生的后果: 配置 HADOOP_HOME - Windows系统:下载并解压Hadoop安装包,然后右键“此电脑”,选择“属性”,点击“高级…...

YOLO学习笔记 | 基于YOLOv8的植物病害检测系统

以下是基于YOLOv8的植物病害检测系统完整技术文档,包含原理分析、数学公式推导及代码实现框架。 基于YOLOv8的智能植物病害检测系统研究 摘要 针对传统植物病害检测方法存在的效率低、泛化性差等问题,本研究提出一种基于改进YOLOv8算法的智能检测系统。通过设计轻量化特征提…...

在已有的vue项目中使用vuex

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

基于uniapp的鸿蒙APP大数据量性能优化

文章目录 一、问题诊断与性能瓶颈分析1.1 大数据场景下的典型性能问题1.2 性能监测工具使用1.2.1 HBuilderX内置分析器1.2.2 鸿蒙DevEco工具链1.2.3 自制性能埋点 二、数据加载优化方案2.1 分页加载实现(带错误重试机制)2.2 数据流优化策略2.2.1 数据压缩…...

C++ 面向对象关键语法详解:override、虚函数、转发调用和数组引用传参-策略模式

int A(参数...) override { return 某个对象.A(参数...);} 一.目标 本文将用一个简单的“数学运算器”例子,从零解释以下 C 语法特性: virtual 虚函数 override 重写关键字 函数体内部的“转发调用” 数组引用作为函数参数 适合初学者和希望加深…...

山东科技大学深度学习考试回忆

目录 一、填空(五个空,十分) 二、选择题(五个,十分) 三、判断题(五个,五分) 四、论述题(四个,四十分) 五、计算题(二个&#xff…...

sql server 学习计划

目标定位(适用于开发人员、架构师、DBA) 精通 SQL Server 的数据建模、T-SQL 编程、并发控制、性能优化、索引策略 掌握事务、锁机制、统计信息、执行计划 能独立完成复杂系统的数据库设计、调优与可用性设计 具备解决大数据量、高并发、长事务、数据…...

宇树机器狗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文件系统理解有很大的误区,认为目录结构是固定的…...

使用docker该怎么做:从公有仓库拉取镜像并上传到私有仓库

在容器化部署中,将公有镜像仓库(如Docker Hub)的镜像迁移到私有仓库(如Harbor、Nexus)是常见需求。 一、为什么需要将镜像从公有仓库传到私有仓库? 网络连通性:公有仓库依赖公网访问&#xff…...

软件开发指南——GUI 开发方案推荐

1. LVGL (Light and Versatile Graphics Library) 适用场景:嵌入式设备、资源受限环境 优势: 专为嵌入式设计的开源 GUI 库,内存占用极小(最低仅需 64KB RAM)支持触摸屏、硬件加速(如 STM32 的 LTDC&…...

使用 Azure AKS 保护 Kubernetes 部署的综合指南

企业不断寻求增强其软件开发和部署流程的方法。DevOps 一直是这一转型的基石,弥合了开发与运营之间的差距。然而,随着安全威胁日益复杂,将安全性集成到 DevOps 流水线(通常称为 DevSecOps)已变得势在必行。本指南深入探讨了如何使用 Azure Kubernetes 服务 (AKS) 来利用 D…...

C#: 用Libreoffice实现Word文件转PDF

现实场景中要实现Word格式转PDF格式还是比较常见的。 如果要用开源的组件,只有用Libreoffice了。 一、下载安装Libreoffice 先进入如下链接,找到最新版本和匹配的操作系统来安装。 官网试过,下载是能下载,但安装了用不了&…...

Node.js 创建 HTTP 服务端

Node.js 创建 HTTP 服务端的用法总结,内容涵盖了 核心模块、基本用法、Express 简化用法、常见场景、错误处理、以及实用小贴士。 ✅ 一、Node.js 创建 HTTP 服务的方式 Node.js 使用内置的 http 模块即可快速创建一个 Web 服务,无需额外安装依赖。 ✅ …...

Uniapp:列表选择提示框

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