如何在Kubernetes中删除POD

时间:2020-03-05 15:31:08  来源:igfitidea点击:

在研究Kubernetes群集环境时,有时运行到我们需要从一个工作者节点中删除POD的情况。

我们可能需要使用节点本身调试问题,升级节点或者简单地缩小群集。

删除Kubernetes Pod的动作非常简单,"kubectl删除pod"命令非常简单:

kubectl delete pod pod-name

但是,我们应该采取具体步骤以最大限度地减少应用程序的中断。
我会在本文中详细解释。

优雅地删除Kubernetes Pods

首先,列出所有POD:

Hyman@theitroad:~# 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,请运行以下命令:

Hyman@theitroad:~# kubectl delete pod pod-delete-demo
pod "pod-delete-demo" deleted

通过列出所有POD,确认删除有问题的POD:

Hyman@theitroad:~# 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-DELET-DEMO POD。

强制删除Kubernetes Pods

你为什么需要强迫Pods删除?

有时,在超时后,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":

Hyman@theitroad:~# 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 Jan continue to run on the cluster indefinitely.
pod "pod-delete-demo" force delete

注意:Force Pod删除不等待POD已终止的Kubelet确认。

如果即使在这些命令之后,POD卡在"未知"状态下,请使用以下命令从群集中删除POD:

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

确认POD已被删除:

Hyman@theitroad:~# 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>