K8S集群1.24使用docker作为容器运行时出现就绪探针间歇性异常
文章目录
- 1. 环境介绍
- 2. 异常信息
- 3. 分析问题
- 3.1 kubernetes 健康检查
- 3.1.1 存活探针
- 3.1.2 就绪探针
- 3.1.3 启动探针
- 3.2 检测方法
- 4. 解决办法
1. 环境介绍
| 组件 | 版本 |
|---|---|
| kubernetes | 1.24.2 |
| docker | 18.03.1-ce |
| cri-docker | 0.2.6 |
2. 异常信息
最近监测到 kubernetes 集群上 calico-node Pod 运行 2 天后就挂了,重启 calico-node 所在的云主机节点后,服务恢复正常,但是过 2 天后又挂了。查看 calico-node 的事件信息,错误提示如下所示:
(combined from similar events): Readiness probe errored: rpc error: code = Unknown
desc = failed to exec in container: failed to create exec "d926d9226559a6673c1dbb904262c...398387ad3b04420":
cannot exec in a stopped state: unknown
kubernetes 提示 calico-node 就绪检测失败。
3. 分析问题
3.1 kubernetes 健康检查
Kubernetes 有三种常见的健康检查探针,分别是:
- Liveness:存活探针
- Readiness:就绪探针
- Startup:启动探针,1.18版本后引入新功能
3.1.1 存活探针
kubelet 使用存活探针来确定什么时候要重启容器。 例如,存活探针可以探测到应用死锁(应用程序在运行,但是无法继续执行后面的步骤)情况。 重启这种状态下的容器有助于提高应用的可用性,即使其中存在缺陷。
3.1.2 就绪探针
kubelet 使用就绪探针可以知道容器何时准备好接受请求流量,当一个 Pod 内的所有容器都就绪时,才能认为该 Pod 就绪。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 若 Pod 尚未就绪,会被从 Service 的负载均衡器中剔除。
3.1.3 启动探针
kubelet 使用启动探针来了解应用容器何时启动。 如果配置了这类探针,你就可以控制容器在启动成功后再进行存活性和就绪态检查, 确保这些存活、就绪探针不会影响应用的启动。 启动探针可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。
3.2 检测方法
- httpGet:向容器内服务发送HTTP请求进行健康检测
exec:到容器执行命令,进行健康检测- tcpSocket:向容器内服务发送Socket(TCP协议)请求进行健康检测
- grpc:向容器内服务发送GRPC请求进行健康检测
本次kubernetes 集群的异常出现在就绪检测探针,使用 exec 检测 calico-node Pod 异常,calico-node 容器所在 Pod 上报还未就绪的信息,并且不接受通过 Kubernetes Service 的流量,导致 calico-node 一直处于 Running 状态,但是 Ready 实例为 0,造成服务不可用。
通过查阅相关文档资料,猜测问题可能出现在容器运行时,由于 kubernetes 推行 CRI (Container Runtime Interface)标准的容器运行时接口,但是 docker 并不支持 CRI 标准接口,但是 kubernetes 早期为了兼容 docker,于是开发了 docker shim 来适配 docker 容器。 kubernetes 1.22 以后的版本中移除了 docker shim 相关代码,导致了 kubernetes 1.22 以后的版本如果想要继续使用 docker 作为容器运行时,需要额外的安装 cri-docker 服务。当前的 cri-docker 服务可能并不太稳定,所以,当服务运行几天后就会出现异常情况,导致 kubelet 使用就绪探针对 Pod 进行健康检查时异常。
4. 解决办法
想要在 kubernetes 1.22 以后的集群中继续使用 docker,可能需要继续等待开源社区做更多的优化,所以,建议切换容器运行时,将 docker 容器运行时切换到 containerd。containerd 实际上也是 docker 共享给开源社区的一款非常优秀的容器运行时,并且 docker 本身也是基于 containerd 构建的更高层次应用的容器服务。
docker 切换到 containerd 的操作步骤可参考:kubernetes 将容器运行时从docker升级到containerd。经过持续多天的观测,发现之前每隔2天就会异常的就绪探针报错问题没有复现,初步判断之前的猜测是对的,所以,在生产环境中尝试最新版本的 kubernetes 有一定的风险,升级需要谨慎,升级之前在测试环境中做持续性的观察。
相关文章:
K8S集群1.24使用docker作为容器运行时出现就绪探针间歇性异常
文章目录1. 环境介绍2. 异常信息3. 分析问题3.1 kubernetes 健康检查3.1.1 存活探针3.1.2 就绪探针3.1.3 启动探针3.2 检测方法4. 解决办法1. 环境介绍 组件版本kubernetes1.24.2docker18.03.1-cecri-docker0.2.6 2. 异常信息 最近监测到 kubernetes 集群上 calico-node Pod 运…...
士大夫身份第三方水电费第三方
package com.snmocha.snbpm.job;import org.springframework.stereotype.Component;import com.xxl.job.core.handler.annotation.XxlJob;import lombok.extern.slf4j.Slf4j;/*** Demo定时任务.* Author:zhoudd* Date:2023-01-15*/ Component Slf4j publ…...
RDO一体化部署OpenStack
RDO一体化部署OpenStack 环境准备 安装centos7 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J785hZvT-1677578418769)(C:\Users\HONOR\AppData\Roaming\Typora\typora-user-images\image-20230228171254675.png)] 使用vmware安装安装centos7&a…...
CC2530+ESP8266使用MQTT协议上传阿里云的问题
ATMQTTPUB<LinkID>,<"topic">,<"data">,<qos>,<retain>LinkID: 当前只支持 0 topic: 发布主题, 最长 64 字节 data: 发布消息, data 不能包含 \0, 请确保整条 ATMQTTPUB 不超过 AT 指令的最大长度限制 qos: 发布服务质量, 参…...
Java基础:爬虫
1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.获取Matc…...
纯手动搭建大数据集群架构_记录008_搭建Hbase集群_配置集群高可用---大数据之Hadoop3.x工作笔记0169
首先准备安装包 然后将安装包分发到集群的其他机器上去 然后因为运行hbase需要zookeeper支持,所以这里首先要去,启动zk 走到/opt/module/hadoop-3.1.3/bin/zk.sh 然后 zk.sh start 启动一下,可以看到启动了已经 然后zk.sh status 可以看zookeeper的状态 然后我们再去启动一下…...
Linux系统认知——驱动认知
文章目录一、驱动相关概念1.什么是驱动2.被驱动设备分类3.设备文件的主设备号和次设备号4.设备驱动整体调用过程二、基于框架编写驱动代码1.驱动代码框架2.驱动代码的编译和测试三、树莓派I/O口驱动的编写1.微机的总线地址、物理地址、虚拟地址介绍2.通过树莓派芯片手册确定需要…...
Spring boot装载模板代码并自动运行
Spring boot装载模板代码涉及的子模块及准备省心Clickhouse批量写JSON多层级数据自动映射值模板代码生成及移交控制权给Spring IOC涉及的子模块及准备 最近比较有空,之前一直好奇,提交到线上考试的代码是如何执行测试的,在实现了基础的demo后…...
全国领先——液力悬浮仿生型人工心脏上市后在同济医院成功植入
2023年2月22日,华中科技大学同济医学院附属同济医院(同济医院)心脏大血管外科团队举办了一场气氛热烈的小规模庆祝活动,魏翔主任、程才副主任、王星宇副主任医师和李师亮医师到场,为终末期心衰患者黄先生“庆生”&…...
基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
云原生周刊:开源漏洞仍然是开发人员面临的挑战 | 2023.2.27
Synopsys 发布了最新一期的开源安全年度报告,开源安全和风险分析 (OSSRA)。这份报告由Synopsys 网络安全研究中心 (CyRC)创建,着眼于 Black Duck 审计服务团队进行的 1,700 多次商业代码库审计的结果。 自 2019 年以来,OSSRA 所有 17 家企业…...
Docker学习总结
1、镜像操作 1.1 拉取、查看镜像 步骤一: 首先去镜像仓库搜索nginx镜像,比如[DockerHub]( Docker Hub Container Image Library | App Containerization ) : 步骤二: 根据查看到的镜像名称,拉取自己需要的镜像 通过命令&…...
Android 9.0系统源码_通知服务(三)应用发送状态栏通知的流程
前言 应用发送一个显示在状态栏上的通知,对于移动设备来说是很常见的一种功能需求,本篇文章我们将会结合Android9.0系统源码具体来分析一下,应用调用notificationManager触发通知栏通知功能的源码流程。 一、应用触发状态栏通知 应用可以通…...
python中的序列——笔记
一、介绍 ABC语言时一个致力于为初学者设计编程环境的长达十年的研究项目。 Python也从ABC那里继承了用统一的风格去处理序列数据这一特点。不管是哪种数据结构,字符串、列表、字节序列、数组、XML元素,抑或是数据库查询结果,它们都共用一套…...
taobao.user.seller.get( 查询卖家用户信息 )
¥开放平台基础API必须用户授权 查询卖家用户信息(只能查询有店铺的用户) 只能卖家类应用调用。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 点击获取key和secret请求示例…...
WebRTC Qos策略
1.WebRTC 用于提升 QoS 的方法:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)https://blog.csdn.net/CrystalShaw/article/details/80432267丢包重传NACK:一种通知技术,…...
Mysql数据查询
文章目录1 group by子句2 回溯统计3 having子句1 group by子句 group by子句**:分组统计,根据某个字段将所有的结果分类,并进行数据统计分析 分组的目的不是为了显示数据,一定是为了统计数据group by子句一定是出现在where子句之…...
Kafka入门(五)
下面聊聊Kafka常用命令 1、Topic管理命令 以topic:test_1为例 1.1、创建topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic test_1参数说明: –bootstrap-server:…...
如何快速在windows系统中切换node.js版本
前言 最近在同时维护公司的两个项目,一个是新项目,另一个是老项目,二者所依赖的node版本是不一致的。 这就导致我在切换项目的时候必须重新安装对应版本的 node.js,否则就会报各种神马错误。 但这一卸一装可着实烦死个银…...
设计模式-单例模式(java)
单例是一种常用的设计模式,它的目的是确保一个类只有一个实例,并提供一个全局访问点。在Java编程语言中,实现单例有多种方法,本篇文章将介绍其中的两种实现方式。 方式一:饿汉式单例模式 饿汉式单例模式是最简单的实…...
奇偶判断算法的极端实现与优化
1. 奇偶判断算法的极端实现:从40亿条if语句到机器码优化1.1 项目背景与设计动机在计算机科学领域,判断数字奇偶性通常采用取模运算这一经典方法。然而,一个看似荒谬的想法引发了技术人员的深入思考:是否可以通过穷举所有可能的数字…...
【2026年阿里巴巴春招- 3月28日-算法岗-第二题- 隐式素数计算】(题目+思路+JavaC++Python解析+在线测试)
题目内容 我们称一个正整数为隐式素数,如果它不同的正因子的个数是一个素数。给定一个闭区间$ [l,r]$,请计算该区间内隐式素数的个数 输入描述 每个测试文件均包含多组测试数据。第一行输入一个整数$ T (1 ≤ T ≤ 10^4)$,代表数据组数,每组测试数据描述如下: 在一行上…...
FatFileSystem:面向资源受限MCU的轻量级FAT文件系统
1. FatFileSystem 嵌入式 FAT 文件系统库深度解析FatFileSystem 是一个轻量级、可移植的嵌入式 FAT 文件系统实现,专为资源受限的微控制器环境设计。它并非完整重写的 FAT32 标准栈(如 FatFs),而是对经典开源 FAT 实现的精简裁剪与…...
绿盾加密环境下Keil安装避坑指南:从ST-LINK报错到安全模式切换
绿盾加密环境下Keil安装全流程解析:从驱动修复到开发环境优化 在嵌入式开发领域,Keil MDK作为ARM架构微控制器的主流开发工具,其稳定性直接关系到项目进度和开发体验。但当企业级文档加密系统"绿盾"介入后,原本顺畅的开…...
轻量NAS整合:OpenClaw+nanobot自动同步群晖文件的配置方法
轻量NAS整合:OpenClawnanobot自动同步群晖文件的配置方法 1. 为什么需要自动化文件管理 作为一个长期使用群晖NAS的用户,我经常遇到这样的困扰:下载文件夹里堆满了各种文件,手动分类整理耗时耗力;重要文档的版本管理…...
**发散创新:用Rust构建Web3.0去中心化身份(DID)验证服务**在Web3.0时代,用户不再依赖中心化的身份提供商(
发散创新:用Rust构建Web3.0去中心化身份(DID)验证服务 在Web3.0时代,用户不再依赖中心化的身份提供商(如Google、微信登录),而是通过去中心化身份(Decentralized Identity, DID&…...
Depth Pro:重新定义单目深度估计的速度与精度边界
Depth Pro:重新定义单目深度估计的速度与精度边界 【免费下载链接】ml-depth-pro Depth Pro: Sharp Monocular Metric Depth in Less Than a Second. 项目地址: https://gitcode.com/gh_mirrors/ml/ml-depth-pro 技术原理:如何让机器真正"看…...
从论文到代码:手把手复现OpenPose手部检测(CMU开源模型),并教你用MediaPipe做个对比测试
从论文到实践:OpenPose与MediaPipe手部关键点检测深度评测 在计算机视觉领域,手部关键点检测技术正逐渐成为人机交互、增强现实和虚拟现实应用的核心组件。不同于面部或全身姿态估计,手部检测需要处理更精细的动作和更复杂的遮挡情况。本文将…...
从libdatachannel到AioRTC:构建轻量级WebRTC原型实践指南
1. 为什么选择libdatachannel和AioRTC 最近在研究浏览器音视频流推送技术时,我发现WebRTC虽然强大但入门门槛较高。经过多轮技术选型对比,最终锁定了两个轻量级开源库:C的libdatachannel和Python的AioRTC。这两个项目特别适合快速原型开发&am…...
解密SWAT模型中的土壤水分特性:如何用SPAW快速计算AWC与饱和导水率?
土壤水分特性在SWAT模型中的关键作用与SPAW实战指南 土壤水分参数对水文模拟的影响机制 在分布式水文建模领域,土壤水分特性参数犹如隐藏在水循环方程式中的密码钥匙。这些看似简单的数值背后,实则决定着水分在土壤剖面中的运移轨迹、植物根系的吸水效率…...
