删除一个Pod会发生什么事情?

1 个回答

  • 华仔
    谎言不会伤人,真相才是快刀。
    当一个 Pod 被删除时,Kubernetes 会按照一系列步骤来确保 Pod 的资源被正确回收,并在可能的情况下优雅地终止 Pod 中的进程。以下是删除 Pod 时发生的详细过程: ### 1. **API Server 接收到删除指令** - **描述**:当用户通过 `kubectl delete pod <pod-name>` 或其他方式请求删除一个 Pod 时,`kube-apiserver` 接收到该删除请求并开始处理。 - **默认行为**:Kubernetes 会为 Pod 提供一个默认的 30 秒(`terminationGracePeriodSeconds`)的时间,用于优雅退出。 ### 2. **Pod 被标记为 Terminating** - **描述**:在删除请求被接受后,Pod 的状态会被标记为 `Terminating`。这表示 Pod 正在进行关闭操作。 - **通知机制**:`kubelet` 组件会监视到 Pod 的状态变化,并开始执行关闭操作。 ### 3. **Pod 从 Service 的 Endpoints 列表中移除** - **描述**:如果 Pod 属于某个 Service 的一部分,Kubernetes 会将该 Pod 从对应的 Endpoints 列表中移除。这意味着再也不会有新的请求被路由到该 Pod 上,避免正在关闭的 Pod 接收到新的工作负载。 - **效果**:Pod 从负载均衡的目标列表中剔除,避免对外提供不稳定的服务。 ### 4. **执行 PreStop Hook(如果定义了的话)** - **描述**:如果 Pod 中定义了 `preStop` 钩子(Hook),Kubernetes 会在发送终止信号之前先执行这个钩子。`preStop` 钩子通常用于处理一些清理工作,例如保存状态或发送通知等。 - **作用**:提供了一个机会,让应用程序在容器停止前执行一些自定义的逻辑来优雅地终止。 ### 5. **发送 SIGTERM 信号** - **描述**:`kubelet` 向 Pod 中的所有容器发送 `SIGTERM` 信号(相当于 `kill -15`),通知容器内的应用程序开始终止。这是一个优雅的终止信号,允许应用程序完成当前的任务并清理资源。 - **效果**:应用程序有机会捕获 `SIGTERM` 信号,并在合理的时间内完成退出。 ### 6. **等待优雅退出时间(Termination Grace Period)** - **描述**:Kubernetes 默认等待 30 秒,称为优雅退出时间。这个时间窗口允许应用程序在不强制终止的情况下正常退出。 - **自定义**:如果在 Pod 的定义中指定了 `terminationGracePeriodSeconds`,Kubernetes 会使用指定的时间,而不是默认的 30 秒。 ### 7. **发送 SIGKILL 信号** - **描述**:如果在 `terminationGracePeriodSeconds` 规定的时间内,容器仍未退出,`kubelet` 会向容器发送 `SIGKILL` 信号(相当于 `kill -9`),强制终止容器的进程。 - **效果**:所有未完成的任务都会被立即中止,Pod 强制停止。 ### 8. **Pod 被标记为删除** - **描述**:一旦所有容器都停止运行,Pod 会从集群中移除,其状态信息从 `etcd` 中删除。 - **结果**:Pod 的资源被释放,系统回收与该 Pod 相关的所有资源(如内存、CPU)。 ### 9. **Controller 进行相应处理** - **描述**:如果 Pod 由 Deployment、ReplicaSet 或 StatefulSet 管理,这些控制器会检测到 Pod 的消失,并决定是否创建一个新的 Pod 以维持所需的副本数量。 - **效果**:集群保持预定的状态,例如,确保特定数量的 Pod 运行。 ### 总结 - **删除指令处理**:API Server 接受删除请求,Pod 被标记为 Terminating。 - **优雅关闭过程**: - Pod 从 Service 的 Endpoints 中移除。 - 执行 PreStop 钩子(如果有)。 - 发送 `SIGTERM` 信号通知应用程序关闭。 - 等待优雅退出时间。 - **强制终止**:如果超过优雅退出时间,发送 `SIGKILL` 信号,强制终止进程。 - **资源回收**:Pod 从集群中删除,相关资源被回收。 - **控制器响应**:如果 Pod 由控制器管理,可能会创建新的 Pod 以维持期望状态。 通过这一过程,Kubernetes 确保了 Pod 的优雅关闭,并为服务的高可用性和稳定性提供保障。
    发布于 2024-08-23 09:35 •IP属地 浙江
    举报
    评论
    收藏