如何使用 kubectl 删除 Kubernetes Pod

2023年 7月 19日 74.5k 0

Kubernetes自动化了大多数与Pod相关的管理任务,例如创建、调度、健康检查和删除。 然而,管理员在维护节点或手动扩展集群时可能必须使用kubectl 接口来删除 pod。

下面介绍如何使用 kubectl 删除 Kubernetes Pod。了解如何从节点中删除所有 pod 以及删除单个 pod。

image.png

先决条件

  • 有集群的管理访问权限。
  • kubectl 已安装。

使用 kubectl 删除 Pod

根据具体情况,用户可能需要删除行为不当的 Pod 或驱逐整个集群节点以进行故障排除或维护。以下部分介绍了两种删除 Pod 的方法,kubectl并提供了避免最常见错误的说明。

删除单个 Pod

使用以下kubectl delete命令从节点中删除单个 pod:

1. 通过输入以下命令获取 pod 的全名:

kubectl get pods

将出现可用 Pod 的列表。找到要删除的 Pod 并记下其名称。

查看集群中运行的 Pod。

2. 输入以下命令删除 Pod:

kubectl delete pod [pod-name]

输出确认 Pod 删除。

使用 kubectl delete 删除 pod。

当 Kubernetes 删除 pod 时,它会自动将其替换为使用相同规格的新 pod。重新检查 pod 列表:

kubectl get pods

该列表显示新创建的 Pod。

删除 Pod 后查看可用的 Pod。

注意:删除 Pod 无法更改正在运行的 Pod 副本数量。相反,通过修改部署YAML 文件来更改它,或使用kubectl scale

kubectl scale deployment [deployment-name] --replicas=[number]

从节点删除所有 Pod

通过删除所有 pod 并防止生成新 pod 来排空节点。kubectl 具有drain在指定节点上执行这两个操作的命令。

请按照以下步骤删除节点中的所有 Pod。

1. 显示可用节点列表:

kubectl get nodes

输出显示由三个节点组成的集群及其Ready状态。

查看可用的集群节点。

2. 使用**-o带有wide**参数的选项来查看集群中 Pod 的详细列表:

kubectl get pods -o wide

详细的 pod 列表包含一**NODE列,其中显示托管每个 pod 的节点。下面的示例输出显示了test-node-1**工作节点上正在运行的三个 pod。

查看 pod 的详细列表。

3. 使用**kubectl drain**命令将 Pod 从节点中逐出。

kubectl drain [node-name]

输出显示该命令执行两个操作:

  • 封锁节点。此操作可防止新的 Pod 在机器上生成。
  • 排空节点。排水会移除当前存在的豆荚。

使用 kubectl 排空节点。

4. 通过检查集群中可用节点的列表来测试操作。

kubectl get nodes

排空的节点显示**SchedulingDisabled**状态。

排空节点后查看节点列表。

注意:该**kubectl cordon**命令允许您封锁节点而不耗尽它:

kubectl cordon [节点名称]

排除错误

当尝试从节点驱逐 pod 时,您可能会遇到错误。以下是最常见错误的列表以及解决这些错误的提示。

无法删除 DaemonSet 管理的 Pod

您无法自动驱逐DaemonSet管理的 Pod 。如果您尝试排出的节点包含此类 pod,请使用该 --ignore-daemonsets 选项来覆盖错误。

kubectl drain [node-name] --ignore-daemonsets

无法删除具有本地存储的 Pod

如果 pod 连接到持久卷,存储数据可能会阻止 pod 被驱逐。

要避免此错误,请添加选项 --delete-emptydir-data

kubectl drain [node-name] --delete-emptydir-data

无法驱逐 Pod,因为这会违反 Pod 的中断预算。

如果您的应用程序有Pod 中断预算 (PDB),它会限制可以同时关闭的 Pod 数量。PDB 在驱逐节点时可能会出现错误,因为移除的 Pod 数量超出了设定的策略。

键入以下命令以查看当前在系统上强制执行的 PDB:

kubectl get pdb -A

输出显示可用的 PDB 及其策略。例如,下图显示了一个具有一个名为 的 PDB 的集群**test-pdb**,这要求至少有一个正在运行的 pod。

查看集群上的 Pod 中断策略。

更改防止节点耗尽的 PDB 策略,或使用以下命令将其删除**kubectl**:

kubectl delete pdb [policy-name]

强制删除 Pod

如果无法使用标准方法删除 Pod,请尝试以下步骤:

1. 使用以下**kubectl delete**命令:

kubectl delete pods [pod-name] --grace-period=0 --force

该**--grace-period选项设置为零会消除 Pod 删除的等待时间。该--force**选项忽略警告和错误。输出显示 Pod 已成功删除。

使用 kubectl 强制删除 pod。

如果删除后 Pod 仍在 Pod 列表中,请执行以下命令将其删除:

kubectl patch pod [pod-name] -p '{"metadata":{"finalizers":null}}'

允许 Pod 返回节点

drain 当您在节点上 执行该 命令时,Kubernetes 会自动封锁 该节点并阻止任何未来的 Pod 调度。当您准备好再次将 Pod 发送到节点时,请输入以下命令使 Pod 可调度:

kubectl uncordon [node-name]

使用 kubectl 取消对节点的封锁。

该节点现在可以接收新的 Pod。

结论

阅读本文后,您应该知道如何使用 kubectl CLI 从 Kubernetes 中的集群节点中删除 pod。本教程介绍了删除单个 Pod 和排空整个节点的过程。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论