举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > kubectl 强制删除pod Kubernetes 强制删除StatefulSet中的Pods

kubectl 强制删除pod Kubernetes 强制删除StatefulSet中的Pods

2023-03-17 19:20 Kubernetes(k8s)手册

kubectl 强制删除pod Kubernetes 强制删除StatefulSet中的Pods

kubectl 强制删除pod

Kubectl 是 Kubernetes 的命令行工具,它可以用来管理 Kubernetes 集群中的资源。在 Kubernetes 中,Pod 是最小的部署单位,它是一个或多个容器的集合。有时候,我们需要强制删除 Pod,这时候就可以使用 kubectl 命令来实现。

kubectl 强制删除 pod 的命令格式如下:

kubectl delete pod  --grace-period=0 --force

其中,--grace-period=0 表示立即强制删除 Pod,--force 表示不询问用户是否要执行此操作。如果不加上这两个参数,Kubernetes 会默认使用 30 秒的 grace period 来执行 Pod 的删除操作。

当我们想要强制删除一个特定的 Pod 时,可以使用 kubectl get pods 命令来获取当前集群中所有的 Pod 列表。然后根据想要强制删除的 Pod 的名字来执行 kubectl delete pod --grace-period=0 --force 命令即可。

Kubernetes 强制删除StatefulSet中的Pods

强制删除 StatefulSet 中的 Pods

本文介绍如何删除 StatefulSet 管理的 Pods,并解释这样操作时需要记住的注意事项。

在开始之前

  • 这是一项相当高级的任务,并且可能会违反 StatefulSet 固有的某些属性。
  • 继续任务之前,请熟悉下面列举的注意事项。

StatefulSet 注意事项 

在 StatefulSet 的正常操作中,永远不需要强制删除 StatefulSet 管理的 Pod。 StatefulSet 控制器负责创建、 扩缩和删除 StatefulSet 管理的 Pods。它尝试确保指定数量的从序数 0 到 N-1 的 Pod 处于活跃状态并准备就绪。StatefulSet 确保在任何时候,集群中最多只有一个具有给定标识的 Pod。 这就是所谓的由 StatefulSet 提供的*最多一个(At Most One)*的语义。

应谨慎进行手动强制删除操作,因为它可能会违反 StatefulSet 固有的至多一个的语义。 StatefulSets 可用于运行分布式和集群级的应用,这些应用需要稳定的网络标识和可靠的存储。 这些应用通常配置为具有固定标识固定数量的成员集合。 具有相同身份的多个成员可能是灾难性的,并且可能导致数据丢失 (例如:票选系统中的脑裂场景)。

删除 Pods 

你可以使用下面的命令执行体面地删除 Pod:

kubectl delete pods <pod>

为了让上面操作能够体面地终止 Pod,Pod 一定不能 设置 ​pod.Spec.TerminationGracePeriodSeconds​ 为 0。 将 ​pod.Spec.TerminationGracePeriodSeconds​ 设置为 0s 的做法是不安全的,强烈建议 StatefulSet 类型的 Pod 不要使用。体面删除是安全的,并且会在 kubelet 从 API 服务器中删除资源名称之前确保 体面地结束 pod 。

当某个节点不可达时,不会引发自动删除 Pod。 在无法访问的节点上运行的 Pod 在 超时 后会进入"Terminating" 或者 "Unknown" 状态。 当用户尝试体面地删除无法访问的节点上的 Pod 时 Pod 也可能会进入这些状态。 从 API 服务器上删除处于这些状态 Pod 的仅有可行方法如下:

  • 删除 Node 对象(要么你来删除, 要么节点控制器 来删除)
  • 无响应节点上的 kubelet 开始响应,杀死 Pod 并从 API 服务器上移除 Pod 对象
  • 用户强制删除 pod

推荐使用第一种或者第二种方法。如果确认节点已经不可用了 (比如,永久断开网络、断电等), 则应删除 Node 对象。 如果节点遇到网裂问题,请尝试解决该问题或者等待其解决。 当网裂愈合时,kubelet 将完成 Pod 的删除并从 API 服务器上释放其名字。

通常,Pod 一旦不在节点上运行,或者管理员删除了节点,系统就会完成其删除动作。 你也可以通过强制删除 Pod 来绕过这一机制。

强制删除 

强制删除不会等待来自 kubelet 对 Pod 已终止的确认消息。 无论强制删除是否成功杀死了 Pod,它都会立即从 API 服务器中释放该名字。 这将让 StatefulSet 控制器创建一个具有相同标识的替身 Pod;因而可能导致正在运行 Pod 的重复, 并且如果所述 Pod 仍然可以与 StatefulSet 的成员通信,则将违反 StatefulSet 所要保证的 最多一个的语义。

当你强制删除 StatefulSet 类型的 Pod 时,你要确保有问题的 Pod 不会再和 StatefulSet 管理的其他 Pod 通信并且可以安全地释放其名字以便创建替代 Pod。

如果要使用 kubectl 1.5 以上版本强制删除 Pod,请执行下面命令:

kubectl delete pods <pod> --grace-period=0 --force

如果你使用 kubectl 的 1.4 以下版本,则应省略 ​--force​ 选项:

kubectl delete pods <pod> --grace-period=0

如果在这些命令后 Pod 仍处于 ​Unknown ​状态,请使用以下命令从集群中删除 Pod:

kubectl patch pod <pod> -p "{"metadata":{"finalizers":null}}"

请始终谨慎地执行强制删除 StatefulSet 类型的 pods,并完全了解所涉及地风险。


阅读全文
以上是名动网为你收集整理的kubectl 强制删除pod Kubernetes 强制删除StatefulSet中的Pods全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们