【原创】k8s源码分析-----kubelet(8)pod管理

kubernetes 源码分析之节点异常时 pod 驱逐过程 概述 详细分析 源码分析 总结 参考 阅读详情

本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460540474

本文csdn博客链接:http://blog.youkuaiyun.com/screscent/article/details/51145382

源码为k8s v1.1.1稳定版本 

3、Pod管理

前面的7篇文章都是为这篇文章做准备的。终于要进入到正题中,pod的管理

 

3.1 pod清单

1、参数

代码在k8s.io\kubernetes\cmd\kubelet\app中

 

结构体变量

type KubeletServer struct {

...

Config                         string

FileCheckFrequency             time.Duration

ManifestURL                    string

ManifestURLHeader              string

HTTPCheckFrequency             time.Duration

...

}

 

默认参数

func NewKubeletServer() *KubeletServer {

    return &KubeletServer{

...

FileCheckFrequency:          20 * time.Second,

HTTPCheckFrequency:          20 * time.Second,

...

}

}

flag参数

func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) {

...

    fs.StringVar(&s.Config, "config", s.Config, "Path to the config file or directory of files")

    fs.DurationVar(&s.FileCheckFrequency, "file-check-frequency", s.FileCheckFrequency, "Duration between checking config files for new data")

    fs.StringVar(&s.ManifestURL, "manifest-url", s.ManifestURL, "URL for accessing the container manifest")

    fs.StringVar(&s.ManifestURLHeader, "manifest-url-header", s.ManifestURLHeader, "HTTP header to use when accessing the manifest URL, with the key separated from the value with a ':', as in 'key:value'")

        fs.DurationVar(&s.HTTPCheckFrequency, "http-check-frequency", s.HTTPCheckFrequency, "Duration between checking http for new data")

    

    

        ...

}

 

Config:配置的文件路径或目录

FileCheckFrequency:文件定期检查文变化间隔

ManifestURL:获取pod定义的url地址

ManifestURLHeader:头部定义

HTTPCheckFrequency:url定期获取时间间隔

 

 

2、构建

 

我们看看生产者的构建

入口是在createAndInitKubelet中

继续makePodSourceConfig

这里构建了一个chan,并作为返回值返回给了上一级调用者。

 

然后生产方式一共有三种

1、文件方式

代码在k8s.io\kubernetes\pkg\kubelet\config\file.go

初始化了文件路径,nodename,还有一个updates的chan

然后开起了一个定期执行的run

从上图我们看到,检测文件目录,然后将pod信息通过chan发送出去

 

2、url方式

代码在k8s.io\kubernetes\pkg\kubelet\config\http.go

 

初始化了url路径,header,还有定期时间间隔,最后也有一个chan

上图中构建了一个http Client,然后进行了http get请求

上图中,将获取到的信息解码,然后将解析出来的pod信息发送给chan

3、Api server方式

代码在k8s.io\kubernetes\pkg\kubelet\config\apiserver.go

 

这个比较简单,构建了一个listwatcher,然后将获取到的pod信息发送到chan

 

4、小结

通过三种方式进行pod信息的获取,也就是生产者,通过chan的方式法送给消费者。

 

3.2 pod管理

上一节中,我们已经知道了生产者,通过chan的方式发送给消费者

 

1、传递管道

在makePodSourceConfig中初始化了一个cfg

我们来看看cfg是什么

代码在k8s.io\kubernetes\pkg\kubelet\config\config.go

然后三种方式分别注册了不同的chan

传送给消费者的接口

 

注:这里的代码其实需要深入的话,需要去分析config.Mux,这个代码比较简单,这里篇幅关系就不做分析了。

2、构建与工作流程

构建

代码在k8s.io\kubernetes\cmd\kubelet\app中

podcfg就是上面构建的传送管道,最后启动了kubelet的Run函数

 

工作流程

代码在k8s.io\kubernetes\pkg\kubelet\kubelet.go

run中的manager我们在之前的文章中基本都有介绍。最后进行syncLoop,其参数updates就是传送的管道

 

我们继续跟踪

其中的update被传递下来了,handler其实就是kubelet自身

再继续跟踪

终于到了处理地方。

从传送管道中,获取到pod信息,然后根据pod的类型,分别调用了不同的处理接口。

我们也说了handler其实就是kubelet自身

 

1、add

调用了func (kl *Kubelet) HandlePodAdditions(pods []*api.Pod) {

2、update

调用了func (kl *Kubelet) HandlePodUpdates(pods []*api.Pod) {

 

3、remove

调用了func (kl *Kubelet) HandlePodDeletions(pods []*api.Pod) {

调用了deletepod

通过chan把pod传送给了podkillingch

从上面可以看到,接收到需要kill的pod然后最终调用了killpod。而从下图,我们看到其实最终调用了containerrumtime的killpod,这个我们在上一篇文章中已经讲解过了。

4、set

暂时不支持

 

5、定时sync

调用了func (kl *Kubelet) HandlePodSyncs(pods []*api.Pod) {

 

 

 

我们看到add update sync都最后调用了dispatchWork。下一篇我们就来分析podwork

 

 

龚浩华

QQ 月牙寂 道长 29185807

2016年4月13日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

 

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

 

kubernetes源码分析 -- kubelet组件 Kubelet需要在每个minion结点上运行。他负责维护在特定主机上的容器。 Kubelet的代码架构与kube-proxy类似,cmd部分组织代码调用(cmd/kubelet/kubelet.go),kubelet的功能实现在pkg/kubelet包中。 apiServer负责接收server发过来的Pod管理信息,通过channel推送到PodConfig。PodConfig的mux使用 阅读详情

相关推荐

kubelet源码解析-启动流程与POD处理(上)

kubelet介绍 在k8s集群中的每个节点上都运行着一个kubelet服务进程,其主要负责向apiserver注册节点、管理pod及pod中的容器,并通过 cAdvisor 监控节点和容器的资源。 节点管理:节点注册、节点状态更新(定期心跳) pod管理:接受来自apiserver、file、http等PodSpec,并确保这些 PodSpec 中描述的容器处于运行状态且运行状况良好 容器健康检查:通过ReadinessProbe、LivenessProbe两种探针检查容器健康状态 资源监控:通过 cA

ThinkMo的专栏 1154

kubelet源码分析 添加 /删除pod (SyncPod、SyncTerminatingPod、SyncTerminatedPod)篇

这篇文章是当pod_workers.go流程结束后,重新触发kubelet.go文件的SyncPod、SyncTerminatingPod、SyncTerminatedPod函数进行处理。 这三个函数主要是对kubelet这一层最后的校验,然后将要调用CRI部分进行创建容器了。

qq_35679620的博客 1750

openEuler在虚拟机的网络配置

ethernet0.virtualDev 可以配置成其他类型的虚拟网络适配器。常见的选项包括:vlance - 用于模拟 AMD PCnet32 LANCE 网络适配器,支持10Mbps。e1000 - 用于模拟 Intel E1000 千兆网络适配器,支持1Gbps。e1000e - 用于模拟更现代的 Intel E1000e 千兆网络适配器。vmxnet - 用于 VMware 的自定义网络适配器,性能更好但需要安装 VMware Tools。

FHY1221的博客 2933

Kubernetes Pod 管理及优化

本文详细介绍了 Kubernetes 中 Pod 的管理与优化方法。通过合理使用控制器、配置资源限制、优化镜像管理以及合理配置探针,可以提高 Pod 的性能和可靠性。同时,遵循最佳实践可以确保集群的高效运行和安全性。

2301_78537542的博客 1071

双向晶闸管交流调压基础知识及Multisim电路仿真

本文介绍了双向晶闸管交流调压电路的工作原理及应用。该电路由双向晶闸管、RC移相电路和双向触发二极管组成,通过调节电位器改变触发角实现电压调节。当电位器阻值减小时,触发角减小,输出电压升高;阻值增大时,触发角增大,输出电压降低。Multisim仿真展示了不同电位器档位下的波形特征:0%档位时全导通,50%档位时半导通,100%档位时基本关断。该电路结构简单、调节平滑,广泛应用于调光、调速等场合,但会产生谐波干扰。

XU157303764的博客 838

如何实现电路级别的CDM ESD防护

采用先进制程的CMOS工艺,可能具有比以前更薄的栅极氧化物和更大的芯片尺寸,大的衬底可能积累大量的电荷,导致CDM事件期间的高ESD放电峰值电流。传统CDM保护器件使用栅极接地NMOS被添加到输入级的栅极。然而,这种方法通常会在信号路径上引入显著的寄生电容,这不适合RF应用。

weixin_42693135的博客 2503

Kubelet 运行机制分析 Pod 管理

kubelet 通过以下几种方式获取自身 Node 上所要运行的 Pod 清单。 (1)文件: kubelet 启动参数 “一config ”指定的配置文件目录下的文件(默认目录为“ etc/ kubernetes manifests/)。通过 file-check-frequency 设置检查该文件目录的时间间,默认为 20s。 staticPodPath: /etc/kubernetes/manifests (2)HTTP 端点 CURL ):通过“一manifest-url ”.

小楼一夜听春雨,深巷明朝卖杏花 866

Nexus7二代刷机教程(新手向)

该教程将使用lineageos(Android 11),同时借鉴了lineage官方的教程和songelf的教程。

2403_84391487的博客 5217

Kubernetes Pod 深度解析

Pod 是一组紧密关联的容器的集合,这些容器共享网络命名空间、存储卷及其他运行时资源,共同构成一个独立的执行单元。在 Kubernetes 中,Pod 被设计为 "原子化" 的最小调度单位,这意味着 Pod 内的容器必须作为整体被调度到同一节点,无法拆分到不同节点运行。从实现层面看,每个 Pod 都包含一个特殊的 "Pause 容器",它作为 Pod 的基础容器,负责为整个 Pod 创建并维护命名空间环境(网络、PID、IPC 等)。

2401_84100398的博客 833

硬件学习笔记(器件篇)—— 磁珠与磁环

因为有这些差别,所有经常会让人们觉得他们并不是一类器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。

y_u_yu_yu_的博客 1万+

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 398

k8s参数优化实战

1.kubelet #/var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 authentication: anonymous: enabled: false webhook: cacheTTL: 2m0s enabled: true x509: clientCAFile: /etc/kubernetes/pki/ca.crt authorization: mode:

会哭的雨@的博客 788

YOLO26涨点改进 | 细节涨点篇 | 源自SCI一区 | YOLO26引入HWD小波下采样模块,而不会显著增加计算开销,(适合小目标分割任务、小目标检测任务)

本文提出了一种基于Haar小波变换的下采样模块HWD,用于改进YOLO26目标检测性能。HWD模块通过小波变换降低特征图分辨率,同时将空间信息编码到通道维度,有效保留了关键信息。相比传统下采样方法,HWD能显著减少信息不确定性,提升小目标检测精度。实验表明,该模块可无缝集成到CNN架构中,不增加计算开销。文章详细介绍了HWD的实现原理、代码结构以及在YOLO26中的集成方法,并提供了两种改进版yaml配置文件。该创新模块已在多种数据集上验证有效,特别适合语义分割和目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 404

【原创】k8s源码分析-----kubelet(9)podWorkers

  本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460604857 本文csdn博客链接:http://blog.youkuaiyun.com/screscent/article/details/51150263 源码为k8s v1.1.1稳定版本  3.3 podworkers        在3.2(也就是在k8s源码分析-----kubel...

月牙寂 6413

手把手教你学Simulink--基于微电网的建模与仿真场景实例:独立运行模式下微电网的能量管理系统设计

本文详细介绍了使用Simulink对独立运行微电网能量管理系统进行建模与仿真的完整流程。主要包括:系统结构设计(分布式能源、储能系统、负荷等模块)、建模步骤(从创建项目到实现能量管理策略)、仿真设置与结果分析。通过建立基于规则的控制逻辑和优化调度算法,实现微电网的自主运行和能量优化管理。文章还提供了参数优化和多目标改进建议,为新能源和智能电网领域的研究与应用提供了实用指导。

MHD0815的博客 8585

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

kubernetes源码分析 kubelet

从官方的架构图中很容易就能找到kubelet执行kubelet -h看到 kubelet 的功能介绍:kubelet 是每个 Node 节点上都运行的主要“节点代理”。使用如下的一个向 apiserver 注册 Node 节点:主机的hostname;覆盖host的参数;或者云提供商指定的逻辑。kubelet 基于PodSpec工作。PodSpec是用YAML或者JSON对象来描述 Pod。Kubelet 接受通过各种机制(主要是 apiserver)提供的一组PodSpec。

xiyanxiyan10的专栏 1415

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【kubernetes/k8s源码分析】kubelet pod 挂载volume源码分析

1. NewVolumeManager 初始化volumeManager volumePluginMgr 使用volume 插件 实例化 volumeManager,实例化desiredStateOfWorldPopulator 这个reconciler是主要调整,attach detach mount unmount操作的,这个主要讲解 ...

zhonglinzhang 4519

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

kubelet组件的启动流程源码分析

摘要: 本文总结了kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。

鲜少伟的博客 2224

【原创】k8s源码分析-----kubelet(6)statusManager

  本文csdn博客链接:http://blog.youkuaiyun.com/screscent/article/details/51135307 本文qq空间链接:http://user.qzone.qq.com/29185807/blog/1460452530   2.5、statusManager 1、构建与启动   代码在k8s.io\kubernetes\pkg\kubelet\ku...

月牙寂 5052

kubernetes端口号怎么查_Kubernetes 源码分析之 kubelet(二)

Versionk8s 版本 v1.18.3(后续系列都以这个版本)Pod Config Update本文顺着前文的思路分析一下以及相关的代码。故名思义,PodUpdate 定义了 pod 的相关更新,具体结构如下type PodUpdate struct { Pods []*v1.Pod Op PodOperationSourcestring}其中PodOp...

weixin_33840959的博客 791

kubelet源码分析 添加 pod

kubelet源码分析,添加新的pod,syncpod,addPod

qq_35679620的博客 1045

Kubernetes 源码分析之 Kubelet

1. 概述kubelet运行机制分析 在Kubernetes集群中,每个Node节点(又称Minion)上都会启动一个Kubelet服务进行。该进程用于处理Master节点下发到本节点的任务,管理Pod及Pod中的容器。每个Kubelet进程会在API Server上注册节点自身信息,定期向Master节点汇报节点资源的使用情况,并通过cAdvise监控容器和节点资源。 1.1. 节点管理 节点通过设置Kubelet的启动参数“–register-node”,来决定是否想API Server注册自己。如果该

小太阳啊凯的博客 571

K8S源码分析Kubelet - 2、Pod同步流程

1.核心流程 kubelet最核心的功能就是根据master的指示,在节点上创建并管理pod。目前对于kubelet而言,有三种途径来获取所管理的pod清单: 文件 - 通过启动参数–config指定配置目录,定期检查变更。 HTTP Endpoint - 通过--manife...

chunlie7017的博客 545

K8S源码分析Kubelet - 3、Pod同步细节

在上文中提到,Pod同步流程是kubelet进程的核心主流程,本文将分析该主流程中最关键的部分--Pod的创建和管理。这部分逻辑封装在kubeGenericRuntimeManager.SyncPod(kuberuntime_manager.go)方法中,主要执行以下步骤: 根据从AP...

chunlie7017的博客 482

kubernetes源码分析-pod删除流程

在Node节点上,k8s是通过kubelet删除具体的pod。 而用户删除pod一般通过kubectl delete pod 命令,或者利用http直接调用api-server暴露的接口去删除pod。因此在分析kubelet删除具体pod之前,先分析用户删除pod的命令是如何一步步传达给具体node上的(以kubectl delete pod 命令为例)。 用户删除Pod流程 k8s中采用cobra框架作为命令行的实现。kubectl delete操作通过NewCmdDelete中的RunDelete

hahachenchen789的博客 4034

kubelet源码分析(一)——kubelet启动流程及pod状态变化感知和消费流程

目录 1、kubelet启动流程 1.1cmd/kubelet/app/server.go Run方法 1.2cmd/kubelet/app/server.go run方法 1.3cmd/kubelet/app/server.go RunKubelet方法 1.4cmd/kubelet/app/server.go CreateAndInitKubelet方法 1.5c...

weixin_43599368的博客 1127
上一篇: 【原创】k8s源码分析-----kubelet(7)containerRuntime
下一篇: 【原创】k8s源码分析-----kubelet(9)podWorkers
月牙寂
博客等级 码龄18年 171粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值