我有一组 Kubernetes Pod(Kafka)。它们是由 Terraform 创建的,但不知何故,它们“脱离”了状态(Terraform 无法识别它们)并且配置错误(无论如何我都不再需要它们了)。
我现在想从集群中完全删除 Pod。主要问题是,即使在我杀死/删除它们之后,它们仍然会被重新创建/重新启动。
我尝试过:
kubectl get deployments --all-namespaces
然后删除 pod 所在的命名空间
kubectl delete -n <NS> deployment <DEPLOY>
此命名空间已正确删除。不过,如果我现在尝试删除/杀死豆荚(强制和级联),它们仍然会重新出现。在这些事件中,我可以看到它们是由 kubelet 重新创建的,但我不知道为什么也不知道如何阻止这种行为。
我也查过
kubectl get jobs --all-namespaces
但是没有找到资源。还有
kubectl get daemonsets.app --all-namespaces
kubectl get daemonsets.extensions --all-namespaces
但我认为其中之一与 Kafka 部署根本无关。
我还可以尝试什么来删除这些 Pod?欢迎任何帮助。
好的,我找到了根本原因。
与:
kubectl get all --all-namespaces
我查找了与 pod 名称相关的所有内容。在这个原因中,我找到了相关的服务。删除这些服务后,pod 没有再次重新创建。
我仍然认为这不是解决问题的好方法(“只需删除具有相同名称的所有内容”...),如果有人可以提出更好的解决方案来解决此问题,我会很高兴。
对我来说,它们看起来像一个有状态集,您是否也尝试过以下命令?
kubectl get statefulset --all-namespaces
真的很像一个
statefulset
,控制着pods
StatefulSet 中的 Pod 具有粘性、唯一的身份。该标识基于 StatefulSet 控制器分配给每个 Pod 的唯一序数索引。 Pod 的名称采用“
- ”的形式。
所以,尝试一下
kubectl get statefulset --all-namespaces
那必须是一个有状态集
但是检查此链接,您可能在 terraform 中使用了类似的内容:https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/stateful_set
kubectl get statefulset -n you-namespace
您可以通过杀死与 Pod 相关的服务来实现这一点。
获取服务入口点的名称:
kubectl 获取 svc
删除服务:
kubectl 删除 svc
入口点可以是您在该 pod 的 YAML 文件中定义的任何内容