我最近注意到大量状态为“关闭”的Pod。我们从2020年10月开始使用Kubernetes。
生产和转移在相同的节点上运行,只是转移使用可抢占的节点来降低成本。集装箱在分段运输中也是稳定的。(故障很少发生,因为它们以前在测试中被发现过)。
服务提供商谷歌云Kubernetes。
我熟悉了自己的文档,并尝试搜索,但我都不认识,也没有谷歌帮助与这个特定的状态。日志中没有错误。
100d 1xx 1c 1d 1x的字符串
我不介意吊舱被拦截。理想情况下,我希望K8能自动删除这些关机Pod。如果我运行kubectl delete po redis-7b86cdccf9-zl6k9
,它会在一眨眼的时间内消失。kubectl get pods | grep Shutdown | awk '{print $1}' | xargs kubectl delete pod
是手动临时解决方法。
PS.k
是我的环境中kubectl
的别名。
最后一个示例:它在所有命名空间//不同的容器中发生。
的
我偶然发现了一些解释https://github.com/kubernetes/website/pull/28235https://github.com/kubernetes/kubernetes/issues/102820状态的相关问题
“如果在正常关闭节点期间收回单元,则会将其标记为失败。运行kubectl get pods
会将逐出的pod的状态显示为Shutdown
。”
8条答案
按热度按时间b09cbbtk1#
被驱逐的吊舱不是故意移除的,正如k8s团队在这里所说的1,被驱逐的吊舱不是为了在被驱逐后被检查。
我相信这里最好的方法是创建一个cronjob 2,正如前面提到的。
字符串
kmbjn2e32#
你不需要任何 grep -只需要使用kubectl提供的选择器。顺便说一句,你不能从busybox镜像调用kubectl,因为它根本没有 kubectl。我还创建了一个服务帐户,具有删除Pod的权限。
字符串
r7xajy2e3#
首先,尝试使用以下命令强制删除kubernetes pod:
$ kubectl delete pod<pod_name>-n --grace-period 0 --force
您可以使用以下命令直接删除pod:
$ kubectl delete pod
然后,使用以下命令检查pod的状态:
$ kubectl获取pods
在这里,你会看到pod已经被删除。
您也可以使用yaml文件中的documentation进行验证。
大多数程序在收到SIGTERM时都会正常关闭,但是如果您使用的是第三方代码或者管理的是一个无法控制的系统,那么preStop钩子是一个很好的方法,可以在不修改应用程序的情况下触发正常关闭。Kubernetes会向pod中的容器发送SIGTERM信号。此时,Kubernetes等待一个指定的时间,称为终止宽限期。
更多信息refer。
xfyts7mz4#
目前,Kubernetes默认情况下不会删除驱逐和关闭状态pod。在我们的环境中,我们也面临着类似的问题。
作为一个自动修复程序,您可以创建一个Kubernetes cronjob,它可以删除具有驱逐和关闭状态的pod。Kubernetes cronjob pod可以使用serviceaccount和RBAC进行身份验证,您可以限制实用程序的动词和名称空间。
amrnrhlw5#
您可以使用https://github.com/hjacobs/kube-janitor。这提供了各种可配置的选项来清理
7kjnsjlb6#
我对这个问题的看法是这样的(这里来自其他解决方案的灵感):
字符串
7xllpg7q7#
我刚安排了一个cronjob来清理死的GKE吊舱。完整的设置包括RBAC角色、角色绑定和服务帐户。
服务帐户和群集角色设置。
字符串
Cronjob清理死豆荚。
型
z31licg08#
受这里讨论的启发,我在GitHub上创建了以下kube-clean repository,并在artifacthub.io上创建了相应的kube-clean helm chart,为每个指定的名称空间生成一个
CronJob
。