K8S篇之谈谈kubelet的上报机制
浅析一下Kubelet的上报机制
1 kubelet上报节点状态
在K8S集群中,由运行在每个节点的Kubelet定期上报心跳到ApiServer,由此来判断Node是否存在,若Node超过一定时间没有上报心跳,则该节点的状态就会被设置为NotReady,同时运行在该节点的容器状态也会被设置为Unknown状态。
1.1 Kubelet上报哪些状态
在K8S中,一个Node的状态包含一下信息:
Addresses
Condition
Capacity
Info
Address主要包含以下几个字段:
HostName:即主机名,可以通过kubelet的–hostname-override参数进行覆盖。
ExternalIP:通常是可以外部路由的Node IP(从集群外可访问)。
InternalIP:通常是仅可以在集群内部路由的Node IP地址。
2 Kubelet运行机制
Kubelet是Kubernetes中的一个重要组件,在每个Node节点上都会启动 kubelet服务。 该服务要用于处理 Master节点下发到本节点的任务,管理Pod及Pod中的容器。每个kubelet 进程会在Server上注册节点自身信息,定期向 Master 节点汇报节点资源的使用情况,并通过cAdivisor监视容器和节点资源。
3 Kubelet的 工作流程
每个节点上的kubelet启动后,它的工作流程可以分为以下几个步骤:
1、获取Pod列表:Kubelet(watch机制监视)会从Master节点获取节点上的Pod列表。Master节点会将Pod列表发送给Kubelet,并告诉Kubelet哪些Pod需要在该节点上运行。
2、创建Pod:如果Kubelet发现节点上没有Pod的容器在运行,它会根据Pod的定义创建容器。Kubelet会根据Pod的定义创建一个Pod Sandbox,然后在Pod Sandbox中创建容器。
3、监控容器状态:Kubelet会定期检查容器的状态,并将状态报告给Master节点。如果容器出现故障,Kubelet会尝试重启容器。如果重启失败,Kubelet会将容器标记为失败,并将状态报告给Master节点。
4、清理容器:如果Kubelet发现某个容器已经被删除,它会将该容器从节点上清理掉。
4 Kubelet的相关配置
Kubelet的配置文件可以放在多个配置文件中,具体看部署方式。可能是/etc/kubernetes/kubelet.conf、/usr/lib/systemd/system/kubelet.service、/var/lib/kubelet/config.yaml。
很多默认配置都可以不用修改,主要的配置包括以下几个方面:
1、节点名称:Kubelet需要知道节点的名称,以便向Master节点注册自己。
2、Pod网络:Kubelet需要知道Pod网络的配置,以便能够正确地创建Pod Sandbox和容器。
3、容器运行时:Kubelet需要知道容器运行时的一些参数,以便能够满足业务需求。
4、资源限制:Kubelet需要知道节点的资源限制,以便能够正确地调度Pod,与优化相关。
5 Kubelet状态异常时的影响
当一个Node处于非Ready状态超过Pod-eviction-timeout的值(默认为5分钟,在kube-controller-manager中定义),kube-controller-manager不会force delete pod,运行在该节点的Pod会一直处于Terminating或者Unknow状态,直到Node从集群中删除,或者kubelet状态变为Ready。
在Node NotReady期间,不同的控制器处理方式不同,依次如下:
Daemonset:Pod的状态变为Nodelost
Deployment:先变为Nodelost,然后变成Unknown,最后会在其他正常的节点重新创建。
StaticPod:先变为Nodelost,然后一直处于Unknown(staticPod即为/etc/kubernetes/manifest下的yaml文件)
Statefulset:先变为Nodelost,然后一直处于Unknown
当Kubelet再次变为Ready状态时,以上控制器的处理方式如下:
Daemonset:Pod不会重新创建,旧Pod的状态直接变为Running。
Deployment:则会将运行在该节点的旧Pod删除。
Statefulset:会将Pod重新进行创建。
Static Pod:则会被删除。
6 Kubelet 状态更新机制
当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度到node时间,下面我们来分析下 Kubelet 状态更新的基本流程。
默认情况下,正常的行为如下:
kubelet 自身会定期更新状态到 apiserver,更新周期由–node-status-update-frequency参数指定,默认值是10s
Kubernetes Controller Manager定期的检查kubelet状态,该参数由–-node-monitor-period参数指定,默认值5s
Kubernetes Controller Manager对kubelet状态更新有一个容忍值,如果kubelet在这个容忍值内更新状态,那么Kubernetes Controller Manager认为kubelet状态有效。具体为:
当 node 失联一段时间后,kubernetes 判定 node 为notready 状态,这段时长通过 –node-monitor-grace-period 参数配置,默认为40s
当 node 失联一段时间后,kubernetes 判定 node 为unhealthy 状态,这段时长通过 –node-startup-grace-period 参数配置,默认为1m
当 node 失联一段时间后,kubernetes 开始删除原 node 上的 pod,这段时长是通过–pod-eviction-timeout 参数配置,默认为5m
Kubernetes Controller Manager和kubelet异步工作,这意味着延迟可能包含网络延迟,API Server延迟,etcd延迟,节点负载等引起的延迟,所以如果设置–node-status-update-frequency参数为5秒时,那么当etcd无法将数据提交到仲裁节点时,它可能会在etcd中等待6-7秒甚至更长才能被呈现
实际应用
默认的配置(参数所属组件)
参数 | 值 | 组件 |
---|---|---|
–node-status-update-frequency | 10s | kubelet |
–node-monitor-period | 5s | controller manager |
–node-monitor-grace-period | 40s | controller manager |
快速更新和快速响应
参数 | 值 | 组件 |
---|---|---|
–node-status-update-frequency | 4s | kubelet |
–node-monitor-period | 2s | controller manager |
–node-monitor-grace-period | 20s | controller manager |
7 Kubelet状态上报的实现
Kubelet上报状态有两种方式,分别是NodeStatus和NodeLease。具体实现方式如下:
NodeStatus:由Kubelet定期向Apiserver上报心跳,超时没有上报则会将Node标记为UnReady,Node上的Pod也会标记为NodeLost或者Unknow。默认更新时间5分钟。
NodeLease上报:在命名空间kube-node-lease会为每个节点都关联一个Lease对象,由节点定期更新Lease对象。默认每隔更新周期为10S。
状态的信息依靠NodeLease来实现上报,减少apiserver的压力,并且其上传的信息相对于Node的信息少很多,比较轻量。
8 总结
Kubelet 是Kubernetes中的一个重要组件,它负责管理节点上的容器和Pod,并与Master节点进行通信。Kubelet的工作流程包括获取Pod列表、创建Pod、监控容器状态和清理容器。Kubelet的配置包括节点名称、Pod网络、容器运行时和资源限制
相关文章:
K8S篇之谈谈kubelet的上报机制
浅析一下Kubelet的上报机制 1 kubelet上报节点状态 在K8S集群中,由运行在每个节点的Kubelet定期上报心跳到ApiServer,由此来判断Node是否存在,若Node超过一定时间没有上报心跳,则该节点的状态就会被设置为NotReady,同…...

混沌系统在图像加密中的应用(小波混沌神经网络)
混沌系统在图像加密中的应用(小波混沌神经网络) 前言一、小波混沌神经网络模型二、拓展三、python代码 前言 小波混沌神经网络是一种神经网络模型,结合了小波变换和混沌理论,用于信号处理、分类和预测。该模型基于多层前向神经网…...

Node.js中的文件系统(file system)模块
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

react组件间通信之context
一般用于【祖组件】与【后代组件】间通信 案例: A,B,C,D四个组件的关系分别为:爷爷,爸爸,儿子,孙子 从A向C传递参数:C组件为类式组件 从A向D传递参数:D组件为函数组件 import React, { Componen…...

京东数据分析:2023年10月京东洗衣机行业品牌销售排行榜
鲸参谋监测的京东平台10月份洗衣机市场销售数据已出炉! 10月份,洗衣机市场整体销售呈上升走势。鲸参谋数据显示,今年10月,京东平台洗衣机市场的销量为143万,环比增长约23%,同比增长约1%;销售额约…...

QQ恢复聊天记录,就用这3个方法!
无论是因为误操作、手机丢失、系统崩溃,还是因为更换了新手机,恢复重要的QQ聊天记录都是一件必做的事情。通过聊天记录,用户可以随时查看之前的信息,以便了解事情的经过。 那么,如何恢复丢失的QQ聊天记录呢࿱…...

高能数造电池3D打印智能制造小试线,开启全固态电池数字化新时代
在科技创新的浪潮中,电池制造领域又迎来了一次突破性的进展。近日,高能数造(西安)技术有限公司重磅推出了其最新电池数字制造装备——全固态电池3D打印智能制造小试线 ,这一创新性的技术开启了全固态电池的数字化智造新时代,为全固…...

stable diffusion为什么能用于文本到图像的生成
推荐基于稳定扩散(stable diffusion) AI 模型开发的自动纹理工具: DreamTexture.js自动纹理化开发包 - NSDT 稳定扩散获得如此多关注的原因 如果你还没有看过它:稳定扩散是一个文本到图像的生成模型,你可以输入一个文本提示,比如…...

c语言刷题第10周(16~20)
规律: 若多个次数最多按ASCII码顺序输出。 用for循环i取(0~26) 则输出满足条件的字符串中位置最靠前的那个。 用while循环遍历(while(a[i]!\0)) 从键盘输入任意只含有大小写字母的串s&…...
Vue.js 响应式系统深度剖析
Vue.js 是当前最流行的 JavaScript 前端框架之一,其核心特性之一就是响应式系统。Vue.js 响应式系统的设计允许开发者以声明式的方式更新 DOM,随着数据变化自动更新相关组件。本文将详细介绍 Vue.js 响应式系统的工作原理,并通过示例来展示其…...

LabVIEW如何才能得到共享变量的引用
LabVIEW如何才能得到共享变量的引用 有一个LabVIEW 库文件 (.lvlib) ,其中有一些定义好的共享变量。但需要得到每个共享变量的引用以便在程序运行时访问其属性。 共享变量的属性定义在“变量”类属性节点中。为了访问变量类,共享变量的引用必须连接到变…...

界面控件DevExtreme图表和仪表(v23.1) - 新功能(Angular,React,Vue,jQuery)
本文将为大家总结下DevExtreme在v23.1版本中发布的一些与图表和仪表盘相关的功能。 DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery&#…...

Rust和isahc库编写代码示例
Rust和isahc库编写的图像爬虫程序的代码: rust use isahc::{Client, Response}; fn main() { let client Client::new() .with_proxy("") .finish(); let url ""; let response client.get(url) .send() …...

Win10笔记本开热点后电脑断网的解决方法
在Win10笔记本电脑中用户可以随时打开热点,但是发现热点开启后电脑就会断网,网络不稳定就会影响到用户的正常使用。下面小编给大家介绍两种简单的解决方法,解决后用户在Win10笔记本电脑开热点就不会有断网的问题出现了。 具体解决方法如下&am…...

跨链知识指南
跨链知识指南 什么是跨链 跨链就是能够让两个不同的链产生某种关联的技术,或者说能把链A的东西搬到链B,跨链是一个复杂的过程,需要链对链外的信息的获取与验证,需要节点有单独的验证能力等等 什么是跨链桥? 跨链桥…...

字符编码转换时发生内存越界引发的摄像头切换失败问题的排查
目录 1、问题说明 2、初步分析 3、字符串字符编码说明 4、进一步分析 5、为啥在日常测试时没有遇到切换摄像头失败的问题呢? 6、华为MateBook笔记本使用高通的CPU 7、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更…...
git修改之前的commit提交的作者信息和邮箱信息
更改之前提交的作者信息和邮箱信息需要进行两步操作。首先,使用 git filter-branch 命令进行历史重写,然后使用 git push --force 将更改推送到远程仓库。 步骤 1: 使用 git filter-branch 进行历史重写 在终端或命令行中执行以下命令: gi…...

《视觉SLAM十四讲》-- 相机与图像
04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后,在针孔背面投影成像的关系(类似小孔成像原理)。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…...

欧科云链:成本与规模之辨——合规科技如何赋能香港Web3生态?
作为国际金融中心,香港近两年来在虚拟资产及Web3领域频频发力。秉持着“稳步创新”的基本逻辑,香港在虚拟资产与Web3领域已建立一定优势,但近期各类风险事件的发生则让业界的关注焦点再次转向“安全”与“合规”。 在香港FinTech Week前夕&a…...

【文献分享】NASA JPL团队CoSTAR一大力作:直接激光雷达里程计:利用密集点云快速定位
论文题目:Direct LiDAR Odometry: Fast Localization With Dense Point Clouds 中文题目:直接激光雷达里程计:利用密集点云快速定位 作者:Kenny Chen, Brett T.Lopez, Ali-akbar Agha-mohammadi 论文链接:https://arxiv.org/pd…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...