Kubelet 运行机制分析 Pod 管理
分析 管理 Pod 运行机制 kubelet
2023-09-14 09:15:17 时间
kubelet
通过以下
几种方式获取自身 Node 上所要运行的 Pod 清单
。
(1)文件:
kubelet
启动
参数
“一
config
”指定的配置文件目录下的文件(默认目录为“
etc/
kubernetes
manifests/)
。通过
file-check-frequency
设置检查该文件目录的时
间间,
默认为
20s。
staticPodPath: /etc/kubernetes/manifests
(2)
HTTP
端点
CURL
):通过“一
manifest-url
”参数设置
。通
过一
http-check-frequency
设置
检查该
HTTP
端点数据的时间间隔,默认为
20S。
(3)
API
Server:
kubelet
通过
API
Server
监听
etcd
目录,同步
Pod
表。
以非 API Server方式创建的 Pod
所有以非 API Server方式创建的 Pod 都叫作 Static Pod
,
kubelet将Static Pod 的状态汇报给
API Server
,
API Server 为该 Static Pod 建一个 Mirror Pod 其相匹配。 Mirror Pod 的状态将真
实反映 Static Pod 的状态。
当
Static
Pod
被删除时与之相对应的
Mirror
Pod
会被删除。
API Server方式创建的 Pod
我们只讨论通过 API
Server
获得
Pod
清单的方式。
kubelet
通过
API
S
erver
Client
使用
Watch
List 的方式监听“
registry/
nodes/$
当前节点
的名称” 和 “/
registry/p
ods
”目录,将获取的信息
同步到本地缓存中。
kubelet
监听 e
tcd ,
所有针对
Pod
操作将会被
kubelet
监听到
。如果发现有新的绑定到本节点的
Pod
,则
按照
Pod
清单的要求创建该
Pod。
如果发现本地的
Pod
被修改
,则
kubelet
会做出相应的修改
,比如删除
Pod
中的
某个容器时
则通过 Docker
Client
删除该容器。
如果发现删除本节点的 Pod
,则删除相应的
Pod
,并通过
Docker
Client
Pod
中的
容器。
kubelet
读取监听到的信息,如果是创建和修改
Pod
,则做如
下处理。
(1
)为该
Pod
创建
个数据目录
(2
)从
API
Server
读取该
Pod
清单。
(3
)为该
Pod
挂载外部卷
Extemal
Volume
(4
)下载
Pod
用到的
Secret
(5
)检查己经运行在节点中的
Pod
,如果该
Pod
没有容器或
Pause
容器(“
kubernetes/pause
镜像创建的容器)没有启动,则先停止
Pod
里所有容器的进程。如果在
Pod
中有需要删除的容
器,则删除这些容器。
(6
)用“
kubemetes/pause
”镜像为每个
Pod
创建一个容器。该
Pause
容器用于接管
Pod所有其他容器的网络。每创建
个新的
Pod,
kubelet
都会先创建
Pause
容器,然后创建其他容器。kubernetes/pause
”镜像大概为
200KB
,是
个非常小的容器镜像。
(7
)为
Pod
中的每个容器做如下处理。
- 为容器计算一个 hash 值,然后用容器的名字去查询对应 Docker 容器的 hash 值。若查找到容器,且两者的 hash 值不同,则停止 Docker 中容器的进程,井停止与之关联的Pause 容器的进程;若两者相同,则不做任何处理
- 如果容器被终止了,且容器没有指定的 restartPolicy (重启策略〉,则不做任何处理。
- 调用 Docker Client 下载容器镜像,调用 Docker Client 运行容器
相关文章
- 文本分析:初识Gensim
- SSM框架报错分析(一)——There is no getter for property named 'XXX' in 'class java.lang.String'
- 中小企业上云首选,华为云全新云服务器S6性能评测分析
- YII框架分析笔记2:组件和事件行为管理
- 为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)
- apollo源码分析过程:构造apollo签名请求
- JVM源码分析之JDK8下的僵尸(无法回收)类加载器
- android系统电源管理分析
- 数仓集群管理:单节点故障RTO机制分析
- 【Linux 内核 内存管理】物理分配页 ⑦ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 判断页阶数 | 读取 mems_allowed | 分配标志位转换 )
- 【Linux 内核 内存管理】物理分配页 ③ ( 物理页分配标志位分析 | ALLOC_WMARK_MIN | ALLOC_WMARK_MASK | ALLOC_HARDER )
- 【Linux 内核 内存管理】memblock 分配器 ② ( memblock_type 内存块类型 | memblock_type 结构体成员分析 )
- 【Linux 内核 内存管理】memblock 分配器 ① ( memblock 分配器简介 | memblock 结构体成员分析 | 物理内存类型 与 内存类型 )
- 【Linux 内核 内存管理】物理内存组织结构 ⑤ ( 内存区域 zone 类型简介 | 内存区域类型zone_type 枚举源码分析 | zone_type 枚举源码 )
- 【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ③ ( vm_mmap_pgoff 函数执行流程 | vm_mmap_pgoff 函数源码 )
- 【Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )
- Android4.4 Framework分析——Zygote进程的启动过程
- 分析 k8s docker 查看 内存 CPU使用率 k8s docker 性能 分析
- jQuery分析(2) - $工厂函数分析