如何在 Kubernetes 中删除 Pod [Quick K8s Tips]

在 Kubernetes 集群环境中工作时,有时您会遇到需要从其中一个工作节点中删除 pod 的情况。

您可能需要调试节点本身的问题、升级节点或简单地缩减集群。

删除一个动作 Kubernetes 吊舱 很简单 kubectl delete pod 命令:

kubectl delete pod pod-name

但是,您应该采取一些具体步骤来最大程度地减少对应用程序的干扰。 我将在本文中详细解释它。

优雅地删除 Kubernetes pod

首先,列出所有 pod:

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-d2pmd   1/1     Running   0          2d23h   172.16.213.194   kworker-rj2   <none>           <none>
my-dep-557548758d-gprnr   1/1     Running   0          2d23h   172.16.213.49    kworker-rj1   <none>           <none>
pod-delete-demo           1/1     Running   0          4s      172.16.213.196   kworker-rj2   <none>           <none>

现在假设您要删除名为“pod-delete-demo”的 Pod,运行以下命令:

[email protected]:~# kubectl delete pod pod-delete-demo
pod "pod-delete-demo" deleted

通过列出所有 Pod 来确认相关 Pod 已被删除:

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-d2pmd   1/1     Running   0          2d23h   172.16.213.194   kworker-rj2   <none>           <none>
my-dep-557548758d-gprnr   1/1     Running   0          2d23h   172.16.213.49    kworker-rj1   <none>           <none>

您可以看到没有正在运行的 pod-delete-demo pod。

强制删除 Kubernetes pod

为什么需要强制删除 pod?

有时 Pod 会卡在 终止/未知 超时后无法访问的节点上的状态。

当用户尝试优雅地删除无法访问的节点上的 Pod 时,Pod 也可能进入这些状态。

在这些情况下,您可以强制删除 Pod。

如果要使用 kubectl version >= 1.5 强制删除 Pod,请执行以下操作:

kubectl delete pods pod_name --grace-period=0 --force

如果你使用任何版本的 kubectl <= 1.4,你应该省略 –force 选项和使用:

kubectl delete pods pod_name --grace-period=0

现在让我们使用上述方法删除 pod “pod-delete-demo”:

[email protected]:~# kubectl delete pod pod-delete-demo --force --grace-period=0 --namespace=default
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "pod-delete-demo" force delete

笔记: 强制删除 pod 不要 等待 kubelet 确认 Pod 已终止。

如果即使在这些命令之后,吊舱仍然卡在 Unknown 状态,使用以下命令从集群中删除 pod:

kubectl patch pod pod-delete-demo -p '{"metadata":{"finalizers":null}}'

确认 pod 已被删除:

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-d2pmd   1/1     Running   0          2d23h   172.16.213.194   kworker-rj2   <none>           <none>
my-dep-557548758d-gprnr   1/1     Running   0          2d23h   172.16.213.49    kworker-rj1   <none>           <none>

希望这个 Kubernetes 技巧对您有所帮助。 继续订阅更多 DevOps 技巧和教程。

拉克什耆那教
DevOps 专业 | RHCA | 詹金斯 | 吉特 | 码头工人 | Kubernetes | 稳定 | 普罗米修斯 | 格拉法纳 | AWS Cloud