k8s NodeSelector调度失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s NodeSelector调度失败相关的知识,希望对你有一定的参考价值。

参考技术A 从Events 分析到,scheduler 调度失败,没有匹配的工作节点。
此时需要分析本pod 采用了什么调度方式。从以上信息可以找到 Node-Selectors: run=pro 采用了 NodeSelector 方式调度,调度到node节点标签为 run=pro 的。那我们查询一下 node 上的标签信息有没有。

以上node节点上并没有 run=pro 标签的。所以我们需要加上一个标签

再次查看pods信息。显示调度成功

nodeSelector:Pod 定向调度

文章目录

简介

在实际情况下,有时候需要将 Pod 调度到制定的一些 Node 上,比如说CPU密集型Pod调度到CPU够大的节点上,IO密集型Pod调度到带宽够大的节点上等等。可以通过 Node 的标签和 Pod 的 nodeSelector 属性相匹配,来达到上述目的。

给 Node 上标签

kubelet labels nodes <node-name> <label-key>=<label-value>

支持打多个标签,用逗号隔开;

如果要更新标签,加上 --overwrite;如果要删除标签:

kubelet labels nodes <node-name> <label-key>-

如果是查看标签,kubectl get node --show-labels=true


标签选择

比方说我们现在给某个 node 上了一个标签 zone=sz

apiversion: v1
kind: deployment
metadate:
  name: nginx
  labels:
    name: nginx
spec:
  replicas: 1
  selector:
    name: nginx
  template:
    metadate:
      labels:
        name: nginx
    spec:
      containers:
      - name: master
        image: nginx
        ports: 
        - containerPorts: 80
      nodeSelector:
        zone: sz

如果我们给多个 node 都上了这个标签,那么 schedule 调度算法将会在这些 node 中选择一个可用的 Node 进行调度。
如果集群中没有一个 node 有这个标签,那就 pending。


kubernetes 预定义标签

在 node 上,除了我们认为设定的标签,k8s 也会根据 node 的实际情况设定一些标签:

kubernetes.io/hostname
beta.kubernetes.io/os(到 1.18 版本删除)
beta.kubernetes.io/arch(到1.18 版本删除)
kubernetes.io/arch
kubernetes.io/os

用户可以使用这些系统标签进行调度。


以上是关于k8s NodeSelector调度失败的主要内容,如果未能解决你的问题,请参考以下文章

k8s 调度指定节点

k8s:将pod部署到指定的node运行(pod&node选择部署策略)

k8s调度,访问控制

k8s调度,访问控制

Linux企业运维——Kubernetesk8s调度

k8s nodeAffinity