kubernetes 为什么K8s吊舱卡在“终止”状态超过100分钟

31moq8wy  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(109)

我有一个AWS EKS集群,它运行Istio、Karpenter、AWS EBS CSI驱动程序、AWS节点终止处理程序和我们的服务。
我们不断地让pod陷入Terminating状态,节点被污染为node.kubernetes.io/unreachable:NoSchedulenode.kubernetes.io/unreachable:NoExecute
我一直无法解决这些问题,需要一些指导。
一旦pod进入终止状态,我似乎无法检索任何容器日志。如果我跑步:

$ kubectl get pods -n status-ns
NAME                          READY   STATUS        RESTARTS   AGE
status-api-69cdd64fbf-gc5cz   2/2     Running       0          177m
status-api-69cdd64fbf-tdt8q   2/2     Terminating   0          3h38m

字符串
但是如果我尝试以格式化输出的形式运行它,无论是json还是yaml,那么两个容器都被标记为'Running':

$ kubectl get pods -n status-ns  -o json | jq '.items[].status.phase'
"Running"
"Running"


所有停留在“终止”状态的pod似乎都连接到了受污染的节点,但如上所述,我无法获得这些节点的任何日志。
这些pod保持这种状态,节点不会终止,除非我手动强制删除所有pod

kubectl delete pod status-api-69cdd64fbf-tdt8q --grace-period=0 --force -n status-ns


1.为什么节点会被赋予这些污染,为什么pod没有被排空并成功终止?
1.我在哪里可以找到一些有用的日志来调试这种情况?

mlmc2os5

mlmc2os51#

当kubelet出现问题并且无法与apiserver通信时,就会出现您所描述的问题。
正如您指出的,所有受影响的pod都在同一个节点上。该节点有一些问题,kubelet失败或至少无法与apiserver对话。pod的最后已知状态是它们处于Terminating状态,并且由于apiserver没有获得关于pod的任何新状态更新,因此pod保持在该状态(实际上pod可能已经被驱逐)。原木也是如此。
因此,可能发生的情况是,节点有问题,变得不可达,它被污染并被耗尽。但是由于kubelet没有响应,drain无法成功,使pod保持在Terminating状态,并阻止节点从集群中删除。强制删除所有pod可解决该锁定。

相关问题