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

【博客694】k8s kubelet 状态更新机制

k8s kubelet 状态更新机制

场景:

当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度的时间

kubelet 状态更新的基本流程:

  • 1、kubelet 自身会定期更新状态到 apiserver,通过参数–node-status-update-frequency指定上报频率,默认是 10s 上报一次。
  • 2、kube-controller-manager 会每隔–node-monitor-period时间去检查 kubelet 的状态,默认是 5s。
  • 3、当 node 失联一段时间后,kubernetes 判定 node 为 notready 状态,这段时长通过–node-monitor-grace-period参数配置,默认 40s。
  • 4、当 node 失联一段时间后,kubernetes 判定 node 为 unhealthy 状态,这段时长通过–node-startup-grace-period参数配置,默认 1m0s。
  • 5、当 node 失联一段时间后,kubernetes 开始删除原 node 上的 pod,这段时长是通过–pod-eviction-timeout参数配置,默认 5m0s。

kube-controller-manager 和 kubelet 是异步工作的,这意味着延迟可能包括任何的网络延迟、apiserver 的延迟、etcd 延迟,一个节点上的负载引起的延迟等等。因此,如果–node-status-update-frequency设置为 5s,那么实际上 etcd 中的数据变化会需要 6-7s,甚至更长时间。

注意:

  • kubelet 在更新状态失败时,会进行nodeStatusUpdateRetry次重试,默认为 5 次。

  • kubelet 会在函数tryUpdateNodeStatus中尝试进行状态更新。Kubelet 使用了 Golang 中的http.Client()方法,但是没有指定超时时间,因此,如果 API Server 过载时,当建立 TCP 连接时可能会出现一些故障。

  • 因此,在nodeStatusUpdateRetry * --node-status-update-frequency时间后才会更新一次节点状态。

  • 同时,Kubernetes 的 controller manager 将尝试每–node-monitor-period时间周期内检查nodeStatusUpdateRetry次。在–node-monitor-grace-period之后,会认为节点 unhealthy,然后会在–pod-eviction-timeout后删除 Pod。

  • kube proxy 有一个 watcher API,一旦 Pod 被驱逐了,kube proxy 将会通知更新节点的 iptables 规则,将 Pod 从 Service 的 Endpoints 中移除,这样就不会访问到来自故障节点的 Pod 了。

如何配置:

对于这些参数的配置,需要根据不通的集群规模场景来进行配置。

社区默认的配置:

  • –node-status-update-frequency 10s
  • –node-monitor-period 5s
  • –node-monitor-grace-period 40s
  • –pod-eviction-timeout 5m

快速更新和快速响应:

  • –node-status-update-frequency 4s
  • –node-monitor-period 2s
  • –node-monitor-grace-period 20s
  • –pod-eviction-timeout 30s

在这种情况下,Pod 将在 50s 被驱逐,因为该节点在 20s 后被视为 Down 掉了,–pod-eviction-timeout在 30s 之后发生,但是,这种情况会给 etcd 产生很大的开销,因为每个节点都会尝试每 2s 更新一次状态。

如果环境有 1000 个节点,那么每分钟将有 15000 次节点更新操作,这可能需要大型 etcd 容器甚至是 etcd 的专用节点。

如果我们计算尝试次数,则除法将给出 5,但实际上每次尝试的 nodeStatusUpdateRetry 尝试将从 3 到 5。 由于所有组件的延迟,尝试总次数将在 15 到 25 之间变化。

中等更新和平均响应:

  • –node-status-update-frequency 20s
  • –node-monitor-period 5s
  • –node-monitor-grace-period 2m
  • –pod-eviction-timeout 1m

这种场景下会 20s 更新一次 node 状态,controller manager 认为 node 状态不正常之前,会有 2m60/205=30 次的 node 状态更新,Node 状态为 down 之后 1m,就会触发驱逐操作。

如果有 1000 个节点,1 分钟之内就会有 60s/20s*1000=3000 次的节点状态更新操作。

低更新和慢响应:

  • –node-status-update-frequency 1m
  • –node-monitor-period 5s
  • –node-monitor-grace-period 5m
  • –pod-eviction-timeout 1m

Kubelet 将会 1m 更新一次节点的状态,在认为不健康之后会有 5m/1m*5=25 次重试更新的机会。Node 为不健康的时候,1m 之后 pod 开始被驱逐。

更多细节参考官方文档:

https://github.com/kubernetes-sigs/kubespray/blob/master/docs/kubernetes-reliability.md

相关文章:

【博客694】k8s kubelet 状态更新机制

k8s kubelet 状态更新机制 场景: 当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 K…...

【博客692】grafana如何解决step动态变化时可能出现range duration小于step

grafana如何解决step动态变化时可能出现range duration小于step 1、grafana中的step和resolution grafana中的 “step” grafana本身是没有提供step参数的,因为仪表盘根据查询数据区间以及仪表盘线条宽度等,对于不同查询,相同的step并不能…...

eNSP:ibgp的破水平切割练习

实验要求&#xff1a; 拓扑展示&#xff1a; 命令操作&#xff1a; R1&#xff1a; <Huawei>sys [Huawei]sys r1 [r1]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24 [r1-LoopBack0]osp…...

maven是什么?安装+配置

目录 1.什么是maven&#xff1f; 1.2.maven的核心功能是什么&#xff1f; 2.Maven安装配置 2.1Maven的安装 2.2Maven环境配置 1.配置 MAVEN_HOME &#xff0c;变量值就是你的 maven 安装的路径&#xff08;bin 目录之前一级目录&#xff09; 2.将MAVEN_HOME 添加到Path系…...

基于长短期神经网络LSTM的多分类代码

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现,附有代码:基于长短期神经网络LSTM的多分类代码,基于LSTM的多分类预测-深度学习文档类资源-CSDN文库 https://download.csdn.net/download/abc991835105/88184779 效果图 结果…...

利用爬虫爬取图片并保存

1 问题 在工作中&#xff0c;有时会遇到需要相当多的图片资源&#xff0c;可是如何才能在短时间内获得大量的图片资源呢&#xff1f; 2 方法 我们知道&#xff0c;网页中每一张图片都是一个连接&#xff0c;所以我们提出利用爬虫爬取网页图片并下载保存下来。 首先通过网络搜索…...

设计模式之Bridge模式的C++实现

目录 1、Bridge模式的提出 2、Bridge模式的定义 3、Bridge模式总结 4、需求描述 5、多继承方式实现 6、使用Bridge设计模式实现 1、Bridge模式的提出 在软件功能模块设计中&#xff0c;如果类的实现功能划分不清晰&#xff0c;使得继承得到的子类往往是随着需求的变化&am…...

springboot异步任务

在Service类声明一个注解Async作为异步方法的标识 package com.qf.sping09test.service;import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service;Service public class AsyncService {//告诉spring这是一个异步的方法Asyncp…...

Flutter父宽度自适应子控件的宽度

需求&#xff1a; 控件随着金币进行自适应宽度 image.png 步骤&#xff1a; 1、Container不设置宽度&#xff0c;需要设置约束padding&#xff1b; 2、文本使用Flexible形式&#xff1b; Container(height: 24.dp,padding: EdgeInsetsDirectional.only(start: 8.dp, end: 5.d…...

什么是 API 安全?学习如何防止攻击和保护数据

随着 API 技术的普及&#xff0c;API 安全成为了一个越来越重要的问题。本文将介绍什么是 API 安全&#xff0c;以及目前 API 面临的安全问题和相应的解决方案。 什么是 API 安全 API 安全是指保护 API 免受恶意攻击和滥用的安全措施。API 安全通常包括以下几个方面&#xff1…...

简述 TCP 和 UDP 的区别以及优缺点和使用场景?

一、TCP与UDP区别总结&#xff1a; 1、TCP面向连接&#xff08;如打电话要先拨号建立连接&#xff09;;UDP是无连接的&#xff0c;即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说&#xff0c;通过TCP连接传送的数据&#xff0c;无差错&#xff0c;不丢失&…...

react进阶

react-virtualized的高阶组件&#xff0c;Autosize可以使屏幕适配。使用render-props模式来获取到AutoSizer组件暴露的width和height属性。JSON.parse(JSON.stringify())不适用于有undefined的数据。 深拷贝的使用&#xff0c;不能使用在有undefined的数据中。有直接过滤undefi…...

使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功 1. Linux(centos8…...

科技感响应式管理系统后台登录页ui设计html模板

做了一个科技感的后台管理系统登录页设计&#xff0c;并且尝试用响应式布局把前端html写了出来&#xff0c;发现并没有现象中的那么容易&#xff0c;chrome等标准浏览器都显示的挺好&#xff0c;但IE11下面却出现了很多错位&#xff0c;兼容起来还是挺费劲的&#xff0c;真心不…...

Lombok的使用及注解含义

文章目录 一、简介二、如何使用2.1、在IDEA中安装Lombok插件2.2、添加maven依赖 三、常用注解3.1、Getter / Setter3.2、ToString3.3、NoArgsConstructor / AllArgsConstructor3.4、EqualsAndHashCode3.5、Data3.6、Value3.7、Accessors3.7.1、Accessors(chain true)3.7.2、Ac…...

实时通信应用的开发:Vue.js、Spring Boot 和 WebSocket 整合实践

目录 1. 什么是webSocket 2. webSocket可以用来做什么? 3. webSocket协议 4. 服务器端 5. 客户端 6. 测试通讯 1. 什么是webSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务…...

【C++】C++异常

文章目录 1. C语言传统处理错误的方式2. C异常的概念3. 异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 4. C标准库的异常体系5. 自定义的异常体系6. 异常的优缺点 1. C语言传统处理错误的方式 C语言传统的错误处理机制有两个&#xff1a; 终止程…...

学生成绩管理系统V2.0

某班有最多不超过30人&#xff08;具体人数由键盘输入&#xff09;参加某门课程的考试&#xff0c;参考前面章节的“学生成绩管理系统V1.0”&#xff0c;用一维数组和函数指针作函数参数编程实现如下菜单驱动的学生成绩管理系统&#xff0c;其中每位同学的学号和成绩等数据可以…...

【C++】开源:tinyxml2解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍tinyxml2解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…...

如何使用webpack打包一个库library,使用webpack打包sdk.

如何使用webpack打包一个库library 如果你需要自己封装一些包给别人使用,那么可以参考以下方法 初始化库 mkdir library cd library npm init -y经过以上步骤后会生成一个library文件夹&#xff0c;里面包含一个package.json文件。然后简单修改为如下所示&#xff1a; {&qu…...

imFile下载管理器:从零开始构建你的高效下载工作流

imFile下载管理器&#xff1a;从零开始构建你的高效下载工作流 【免费下载链接】imfile-desktop A full-featured download manager. 项目地址: https://gitcode.com/gh_mirrors/im/imfile-desktop 还记得那些焦急等待大文件下载的夜晚吗&#xff1f;当浏览器下载器卡在…...

【2025企业级部署红线预警】:C# 14 原生 AOT 下 Dify 插件动态加载失效的4种静默崩溃场景及热修复补丁

第一章&#xff1a;C# 14 原生 AOT 部署 Dify 客户端插件下载与安装概览C# 14 引入了对原生 AOT&#xff08;Ahead-of-Time&#xff09;编译的深度集成支持&#xff0c;使 .NET 应用可直接编译为无运行时依赖的独立二进制文件。在部署 Dify 官方客户端插件&#xff08;如用于本…...

DAMO-YOLO入门指南:理解COCO 80类标准与达摩院扩展类别的映射关系

DAMO-YOLO入门指南&#xff1a;理解COCO 80类标准与达摩院扩展类别的映射关系 你是不是刚接触DAMO-YOLO&#xff0c;看着它强大的目标检测能力很兴奋&#xff0c;但一看到“COCO 80类”和“达摩院扩展类别”这些术语就有点懵&#xff1f;别担心&#xff0c;这种感觉我刚开始也…...

从Xilinx Zynq迁移到复旦微FMQL:调试PS网口时,我踩过的那些设备树配置的坑

从Xilinx Zynq迁移到复旦微FMQL&#xff1a;PS网口设备树配置避坑指南 当第一次在复旦微FMQL开发板上看到熟悉的GMAC网口时&#xff0c;我下意识地复制了Zynq项目的设备树配置——毕竟都是ARM Cortex-A系列处理器搭配可编程逻辑的架构&#xff0c;能有多大区别&#xff1f;直到…...

2026实用论文降AI工具盘点:含免费版高效去AI痕迹方案

写论文的苦谁懂?熬了几个通宵赶出来的稿子,要么查重飘红一片,要么AI检测直接标红高危,改到凌晨三点还是过不了关。 为了搞定论文降AIGC,我前前后后踩了不下二十个坑,试了市面上几十款降AI率工具,有的改完逻辑混乱像小学生写的,有的AI率没降反而升了,还有的直接把我论…...

微信小程序地图开发避坑指南:从获取用户位置到添加自定义标记点(附完整代码)

微信小程序地图开发实战&#xff1a;避开那些让你熬夜的坑 第一次在小程序里集成地图功能时&#xff0c;我天真地以为只要拖个组件就能搞定。直到凌晨三点还在调试那个死活不显示的标记点&#xff0c;才明白地图开发远没有想象中简单。如果你也正在经历这种痛苦&#xff0c;这篇…...

iFakeLocation:跨平台iOS虚拟定位终极指南,无需越狱轻松修改设备位置

iFakeLocation&#xff1a;跨平台iOS虚拟定位终极指南&#xff0c;无需越狱轻松修改设备位置 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 在数字时代&a…...

如何快速掌握Ultimate Plumber:Linux管道即时预览工具完全指南

如何快速掌握Ultimate Plumber&#xff1a;Linux管道即时预览工具完全指南 【免费下载链接】up Ultimate Plumber is a tool for writing Linux pipes with instant live preview 项目地址: https://gitcode.com/gh_mirrors/up1/up Ultimate Plumber&#xff08;简称up&…...

保姆级教程:用Wireshark抓包分析mediasoup的ICE/DTLS/SRTP握手全过程

深度解析&#xff1a;使用Wireshark抓包分析mediasoup的ICE/DTLS/SRTP全流程 在实时音视频通信领域&#xff0c;mediasoup作为一个高性能的WebRTC SFU&#xff08;Selective Forwarding Unit&#xff09;服务器&#xff0c;其底层通信机制的理解对于开发者解决实际部署中的网络…...

文档即代码的幻象:GPT-4自动生成API文档对软件测试的挑战与警示

效率诱惑下的质量黑洞在追求敏捷与DevOps的浪潮中&#xff0c;“文档即代码”&#xff08;Documentation as Code&#xff09;的理念被广泛推崇&#xff0c;旨在通过工程化手段提升文档的可维护性与协作效率。与此同时&#xff0c;以GPT-4为代表的大型语言模型&#xff08;LLM&…...