【问题标题】:Kubernetes pod stuck in state=Terminating after node goes to status = NotReady?Kubernetes pod 卡在状态 = 节点进入状态后终止 = NotReady?
【发布时间】:2019-10-22 14:34:42
【问题描述】:

我在 k8s 集群中有 3 个节点,所有节点都是主节点,即我已经删除了 node-role.kubernetes.io/master 污点。

我在foo2上物理移除了网线,所以我有

kubectl get nodes
NAME   STATUS     ROLES    AGE     VERSION
foo1   Ready      master   3d22h   v1.13.5
foo2   NotReady   master   3d22h   v1.13.5
foo3   Ready      master   3d22h   v1.13.5

几个小时后,一些 pod 仍在 STATUS = Terminating 中,但我认为它们应该在 Terminated 中?

我在https://www.bluematador.com/docs/troubleshooting/kubernetes-pod阅读

在极少数情况下,Pod 可能会卡在终止状态。这是通过查找每个容器已终止但 pod 仍在运行的任何 pod 来检测的。通常,这是由于集群中的一个节点突然停止服务,并且集群调度程序和控制器管理器没有清理该节点上的所有 pod。

解决这个问题就像使用 kubectl delete pod 手动删除 pod 一样简单。

吊舱描述说如果 5 分钟内无法访问将被容忍......

Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  etcd-data:
    Type:        EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:      
    SizeLimit:   <unset>
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

我尝试过刚刚挂起的kubectl delete pod etcd-lns4g5xkcw,尽管强制它确实按照answer工作...

kubectl delete pod etcd-lns4g5xkcw  --force=true --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "etcd-lns4g5xkcw" force deleted

(1) 为什么会这样?不应该改成终止吗?

(2) STATUS = Terminating 是从哪里来的?在https://v1-13.docs.kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/ 我只看到等待/运行/终止作为选项?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    termination 状态下,Pods 卷和网络清理可能会消耗更多时间。 正确的方法是排空节点,以便在宽限期内成功终止 pod。 因为您拔掉了网络电缆,所以节点已将其状态更改为 not ready,其中 pod 已在其上运行。 由于这个 pod 无法终止。

    您可以从 k8s 文档中找到有关 terminating 状态的这些有用信息:

    Kubernetes(1.5 或更高版本)不会仅仅因为 节点不可访问。在不可达节点上运行的 Pod 进入 超时后的“终止”或“未知”状态。豆荚也可能进入 当用户尝试优雅地删除 Pod 时的这些状态 无法访问的节点:

    有 3 种建议的方法可以从 apiserver 中删除它:

    Node 对象被删除(由您或由 Node Controller)。 无响应节点上的 kubelet 开始响应,杀死 Pod 并从 apiserver 中删除该条目。强制删除 Pod 用户。

    这里可以找到更多关于k8s后台删除的信息offical documentation

    【讨论】:

    • 能否仅使用 Kubernetes API 修复?我的意思是,当其中一个节点没有准备好时,所有东西都应该重新分配给不同的节点,这很直观,这就是 Kubernetes 应该自我修复的重点。当节点出现故障(由于网络问题或电力不足)时,它不会很快上线
    猜你喜欢
    • 2019-09-19
    • 2019-01-04
    • 2018-10-11
    • 2018-04-18
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多