D17 kubernetes Pod生命周期

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启动

3、销毁pod

  • 当删除一个pod时,kubernetes会执行一系列任务销毁pod,具体流程如下:
1、kubelet向pod中的容器发送一个优雅终止信号SIGTERM,通知容器它即将被终止,并给与容器一些时间来完成清理工作、保存状态、释放资源等操作
2、执行容器PreStop回调
3、从Endpoints对象中移除该pod,停止Service为其转发流量
4、如果容器在一定时间内无法正常终止(最多可以容忍的时间为terminationGracePeriodSeconds控制,默认为30s),kubelet向pod中容器发送一个强制终止信号(SIGKILL),用于强制关闭容器进程
5、pod被终止,pod处于Terminating状态
6、kubernetes删除pod相关资源,如网络配置、数据卷等
最终,一个pod被销毁

posted @ 2024-09-05 19:56  Hello_worlds  阅读(4)  评论(0编辑  收藏  举报