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调度失败的主要内容,如果未能解决你的问题,请参考以下文章