本文讨论Microsoft Azure Kubernetes 服务(AKS)中 Pod 和命名空间停滞Terminating
在状态中的方案故障排除策略。
先决条件
Kubernetes kubectl 工具。
注意: 若要使用 Azure CLI 安装 kubectl,请运行 az aks install-cli 命令。
故障排除清单
步骤 1:确定要删除的 Pod
验证必须删除的 Pod 的名称以及 Pod 所属的命名空间。 若要确定哪些 Pod 在 AKS 群集上运行,以及 Pod 正在运行的命名空间,请运行以下 kubectl get 命令:
kubectl get pod --all-namespaces
步骤 2:删除 Pod
使用步骤 1 中的信息,运行以下 kubectl delete 命令以删除 Pod:
kubectl delete <pod-name> --namespace <namespace-name>
注意
如果指定的 Pod 属于“default”命名空间,则可以省略 --namespace <namespace-name>
该参数。
如果收到以下错误消息,请确保 Pod 名称和命名空间名称正确:
服务器错误(NotFound):找不到 Pod“<POD NAME>”
如果 Pod 和命名空间名称正确,但未删除 Pod,则可以强行删除 Pod。 为此,请 kubectl delete
运行以下命令:
kubectl delete pod <pod-name> --namespace <namespace-name> --grace-period=0 --force --wait=false
步骤 3:确定要删除的命名空间
验证必须删除的命名空间的名称。 若要确定 AKS 群集上运行的命名空间, kubectl get
请运行以下命令:
kubectl get namespace
步骤 4:查找命名空间中的资源
如果命名空间停滞在 Terminating
状态中,请查找命名空间中定义的所有资源。 为此,请 kubectl get
运行以下命令:
kubectl get all --namespace <namespace-name>
步骤 5:删除命名空间中的资源
发现命名空间中定义了哪些资源后,请删除这些资源。 若要删除每个资源, kubectl delete
请运行以下命令:
kubectl delete <resource> <resource name> --namespace <namespace-name> --grace-period=0 --force --wait=false
例如,如果要删除 nginxtest
命名空间中的 nginx
Pod,请运行以下命令:
kubectl delete pod nginxtest --namespace nginx --grace-period=0 --force --wait=false
步骤 6:删除命名空间
删除命名空间中的所有资源后,请删除命名空间本身。 为此,请 kubectl delete
运行以下命令:
kubectl delete namespace <namespace-name> --grace-period=0 --force --wait=false
警告
如果使用终结器防止意外删除,则kubectl delete
命令最初可能无法成功。 终结器是发出预删除操作信号的资源的密钥。 终结器控制资源上的垃圾回收,它们旨在提醒控制者在删除资源之前要执行的操作。
但是,终结器不一定标识应执行的代码。 事实上,终结器采用以下方式类似于批注:
- 它们基本上是密钥列表。
- 可以操纵它们。
如果尝试删除具有终结器的资源,则在控制器删除终结器键或终结器之前,该资源将一直处于最终状态,或者通过使用 kubectl 删除终结器。 清空终结器列表后,Kubernetes 可以回收资源并将其放入要从注册表中删除的队列中。
如果没有资源保留在命名空间中,但命名空间仍停滞在 Terminating
状态中,请运行以下 kubectl patch 命令以清空终结器字段:
kubectl patch namespace <namespace-name> --patch '{"metadata": {"finalizers": null}}'
此操作使你可以在再次运行 kubectl delete
命令时成功删除命名空间。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。