作者信息:https://home.cnblogs.com/u/huangjiabobk

在K8S中,Pod删除过程会发生什么?

在Kubernetes(简称K8s)中,删除一个Pod时会发生以下一系列事件:

  1. 发出删除命令
    用户通过kubectl命令行工具或者API接口发出删除Pod的请求,例如执行kubectl delete pod <pod-name>

  2. API Server响应
    Kubernetes API Server接收到删除请求后,验证权限并更新其内部状态,标记指定Pod为待删除状态。

  3. 清理资源

    • 如果Pod是Deployment、StatefulSet等控制器管理的Pod,则控制器会注意到Pod被删除,并按照控制器策略创建新的Pod以保持期望的副本数。
    • kubelet监控到Pod的状态变化后,开始执行相应的生命周期钩子函数,如预停止(pre-stop hook),以便容器能优雅地结束服务或进行必要的清理工作。
    • 当kubelet确认可以安全删除Pod时,它将终止Pod内的所有容器,并释放该Pod所占用的本地节点资源,包括但不限于内存、CPU、磁盘空间和网络端口。
  4. 垃圾回收

    • 随着Pod的容器被终止,kubelet与容器运行时(如Docker、containerd)协作,彻底清除已终止容器的相关数据。
    • 对于由PersistentVolume(PV)提供持久化存储的Pod,即使Pod被删除,其数据通常不会丢失,因为PV与Pod解耦,除非明确设置了卷的回收策略为删除。
  5. 从etcd中删除记录
    在Pod的容器和资源完全清理完毕后,Kubernetes API Server最终会在etcd中删除Pod的相关记录。

  6. 更新集群状态

    • 控制器(如ReplicaSet/Deployment等)根据需要调整自身状态,确保达到预期的副本数量。
    • 负载均衡器(如Service)如果关联了这个Pod,也会自动重新配置,确保流量分配给其余可用的Pod实例。

综上所述,在Kubernetes中删除一个Pod是一个涉及多个组件协同工作的过程,旨在确保资源的有效回收和应用程序服务的连续性。

posted @ 2024-01-27 14:15  黄嘉波  阅读(209)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波