Pod 一直处于 Pending 状态

Pending 状态说明 Pod 还没有被调度到某个节点上,需要看下 Pod 事件进一步判断原因,比如 :

下面列举下可能原因和解决方法。

节点资源不够


节点资源不够有以下几种情况:

  • CPU 负载过高
  • 剩余可以被分配的内存不够
  • 剩余可用 GPU 数量不够 (通常在机器学习场景,GPU 集群环境)
如果判断某个 Node 资源是否足够? 通过 kubectl describe node <node-name> 查看 node
资源情况,关注以下信息:
  • Allocatable : 表示此节点能够申请的资源总和
  • Allocated resources : 表示此节点已分配的资源 (Allocatable 减去节点上所有 Pod Request)
Capacity:
  cpu:                2
  ephemeral-storage:  9217Mi
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             2031912Ki
  pods:               110

Allocatable:
  cpu:                1600m
  ephemeral-storage:  9217Mi
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             1452355993
  pods:               110

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                350m (21%)  0 (0%)
  memory             70Mi (5%)   170Mi (12%)
  ephemeral-storage  0 (0%)      0 (0%)
  hugepages-1Gi      0 (0%)      0 (0%)
  hugepages-2Mi      0 (0%)      0 (0%)
前者与后者相减,可得出剩余可申请的资源。如果这个值小于 Pod request ,就不满足 Pod
资源要求, Scheduler Predicates (预选) 阶段就会剔除掉这个 Node ,也就不会调度上去。

不满足 nodeSelector affinity


如果 Pod 包含 nodeSelector 指定了节点需要包含的 label,调度器将只会考虑将 Pod 调度到包含这些 label Node 上,如果没有 Node 有这些 label 或者有这些 label Node 其它条件不满足也将会无法调度。参考官方文档:https://kubernetes.io/docs/concepts/configuration/assign-pod- node/#nodeselector

如果 Pod 包含 affinity (亲和性)的配置,调度器根据调度算法也可能算出没有满足条件的Node,从而无法调度。 affinity 有以下几类 :
  • nodeAffinity: 节点亲和性,可以看成是增强版的 nodeSelector,用于限制 Pod 只允许被调度到某一部分 Node
  • podAffinity: Pod 亲和性,用于将一些有关联的 Pod 调度到同一个地方,同一个地方可以是指同一个节点或同一个可用区的节点等。
  • podAntiAffinity: Pod 反亲和性,用于避免将某一类 Pod 调度到同一个地方避免单点故障,比如将集群 DNS 服务的 Pod 副本都调度到不同节点,避免一个节点挂了造成整个集群DNS 解析失败,使得业务中断。
[root@master ~]# kubectl get pod -n kube-system -o wide
coredns-674d655c65-k8x88                  1/1     Running   0          19d     10.233.70.1       master   <none>           <none>
coredns-674d655c65-lg66w                  1/1     Running   0          6m11s   10.233.90.1       node1    <none>           <none>
coredns-674d655c65-v5hjn                  1/1     Running   0          19d     10.233.70.2       master   <none>           <none>


[root@master ~]# kubectl get pod -n kube-system --show-labels
coredns-674d655c65-k8x88                  1/1     Running   0          19d   k8s-app=kube-dns,pod-template-hash=674d655c65
coredns-674d655c65-lg66w                  1/1     Running   0          77s   k8s-app=kube-dns,pod-template-hash=674d655c65
coredns-674d655c65-v5hjn                  1/1     Running   0          19d   k8s-app=kube-dns,pod-template-hash=674d655c65



  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: kube-dns
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                k8s-app: kube-dns
            topologyKey: kubernetes.io/hostname


[root@master ~]# kubectl get pod -n kube-system -o wide
kube-system   coredns-76b666bbdb-kg8lp                  1/1     Running   0          64s   10.233.96.1       node2    <none>           <none>
kube-system   coredns-76b666bbdb-lzm2x                  1/1     Running   0          53s   10.233.70.4       master   <none>           <none>
kube-system   coredns-76b666bbdb-ptzw6                  1/1     Running   0          63s   10.233.90.2       node1    <none>           <none>

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/123497248
今日推荐