1、创建pod
- 当创建一个pod时,它是通过多个组件来完成的
- 假设通过kubelet run nginx --image=ningx命令创建一个pod,其工作流程如下:
1、kubectl向API server发起创建pod的请求,请求中包含pod的配置信息
2、API server接收到请求后,校验字段合法性,例如格式、镜像地址不能为空等,校验通过后,将pod配置数据写入到etcd中
3、schedule通过与API server进行交互感知到新的pod创建。它获取到pod的配置信息,根据调度算法选择一个合适的节点,将选择的节点添加到配置中,并响应给API server,然后API server将配置数据写入到etcd中
4、kubelet通过与API server进行交互感知到已分配到自身节点的pod。因此将pod配置传递给底层容器运行时(如docker)创建相应的容器,并将容器的状态上报给API server,然后API server将状态数据写入到etcd中
在上述创建pod的过程中,并没有涉及到kube-Controller-manager和kube-proxy组件,这是因为kube-Controller-manager和kube-proxy组件分别负责控制器管理和Service网络代理管理。上述创建pod的命令并没有涉及相关工作负载资源(如deployment)和Service资源,因此这两个组件未参与工作
2、启动pod
- kubelet 在创建pod过程中会执行一系列任务,以确保pod达到预期的配置和状态。
- kubelet创建pod的过程如下:
1、kubelet调用容器运行时创建pause容器,以建立一个容器环境
2、创建初始化容器。如果有多个初始化容器,则按顺序创建它们,并确保每个初始化容器都是在上一个初始化容器成功运行后创建的
3、最后一个初始化执行完成后,并行创建主容器。在主容器启动前执行postStart回调,在该回调执行完成前,pod处于pending状态
4、postStart回调执行完成后,主容器启动,开始执行应用程序的监控检查
最终,一个pod启动
标签:容器,D17,kubernetes,创建,server,kubelet,API,Pod,pod
From: https://www.cnblogs.com/suyj/p/18399146