公司产品基于K8s部署,在通过yaml编排启动对应容器时,发现POD一直处于Pending状态。

通常是由于pod的nodeSelector选择器未匹配节点所导致的,需要检查pod配置中定义的nodeSelector相关字段,确保能够与节点标签相匹配。
$ kubectl describe pod pod-xxx
Warning  FailedScheduling  <unknown>  default-scheduler  0/1 nodes are available: 1 node(s) didn't match node selector.

排查思路

查看容器配置

可以通过查看deployment或者pod中nodeSelector的配置,来判断节点分配规则。

[root@localhost ~]# kubectl edit job -n prophet flyway-test
    # 节点标签
      nodeSelector:
        lolicp.com/system: "true"
[root@localhost ~]# kubectl edit pod -n monitoring prometheus-k8s-0
        nodeSelectorTerms:
        - matchExpressions:
          - key: lolicp.com/prometheus
            operator: In
            values:
            - "true"
节点打标签

根据nodeSelector的配置内容,容器分配至指定labels的节点中。

kubectl label nodes <node-name> <label-key>=<label-value>

示范:

kubectl label nodes 192.168.252.145 lolicp.com/prometheus=true

添加标签完成后,容器恢复正常。

END

本文标题:K8s容器一直处于Pending状态问题排查

本文作者:宇宙最帅的男人

本文链接:https://lolicp.com/linux/202318571.html

版权声明:转载或者引用本文内容请注明来源及原作者,本文著作权归作者 (宇宙最帅的男人) 所有。

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

最后修改:2023 年 05 月 18 日
如果觉得我的文章对你有用,请随意赞赏