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

在K8S中,Pod突然挂掉,K8S有什么机制或功能自动清除Pod?

在Kubernetes (K8S) 中,有几种机制和功能可以自动处理和清除异常或不再需要的Pod。这些机制通常是由Kubernetes的控制器(Controller)实现的,它们负责维护集群中对象的状态与期望状态的一致性。以下是几种自动清除Pod的情况:

1. Replication Controller (RC), Deployment, StatefulSet

RC、Deployment和StatefulSet是Kubernetes中用于管理Pod副本的控制器。当Pod由于任何原因(如异常、资源耗尽、应用崩溃)而挂掉时,这些控制器会检测到Pod的状态变化,并自动创建一个新的Pod来替代它,以维持期望的副本数。

2. DaemonSet

DaemonSet保证所有(或某些)节点上运行一个指定的Pod的副本。如果由于某种原因Pod挂掉,DaemonSet控制器会立即创建一个新的Pod,以确保每个预期的节点上都有一个运行的Pod。

3. Job 和 CronJob

Job和CronJob用于运行批处理任务。当一个Job的Pod完成其工作或异常终止时,Job控制器会根据Job的完成策略决定是否重新调度该Pod。对于CronJob,它会在预定的时间触发Job的实例化,即使前一个实例异常终止也会重新创建。

4. TTL After Finished

自从Kubernetes 1.16版本起,引入了TTLAfterFinished特性,允许在Job完成一定时间后自动删除Job及其相关的Pod。这样可以自动清理不再需要的资源。

5. Pod Disruption Budget (PDB)

PDB确保在升级或维护期间,至少有一组Pod保持运行,防止由于主动删除Pod而导致的服务中断。然而,PDB并不直接参与Pod的自动清除,但它可以影响Pod的主动删除行为。

6. Pod Lifecycle Events

Kubernetes通过Liveness Probes和Readiness Probes来监测容器的健康状态。如果探测失败,Kubernetes将根据配置重试几次,如果仍失败,Kubernetes将重启容器,这可能导致Pod的重建。

7. Garbage Collection

当一个Pod的控制者(如Deployment、StatefulSet、Job等)被删除时,Kubernetes会自动进行垃圾回收,删除所有由该控制者管理的Pod。这是通过控制器和Pod之间的引用关系实现的。

8. Eviction Policy

当节点资源紧张时(如内存不足),Kubernetes的eviction policy可以触发Pod的驱逐,从而释放资源给更重要的Pod。

9. Node Failure Handling

如果一个节点失败,Kubernetes会感知到节点状态的变化,并将该节点上的Pod迁移到其他健康的节点上,这个过程称为“节点恢复”(Node Recovery)。

10. Taints and Tolerations

如果Pod不能容忍节点上的污点(Taint),Kubernetes会将Pod从该节点上移除,寻找一个符合要求的节点。

综上所述,Kubernetes能够自动处理和清除异常或不需要的Pod,确保集群的稳定性和高可用性。

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