解决问题:
1、登录服务器修改节点标签
查看所有节点labels:
kubectl get nodes --show-labels
添加labels:
kubectl label nodes node2 [label.key]=[label.value]
2、修改pod配置文件与工作节点标签对应
修改yaml配置文件:
添加nodeSelector配置,样式为[label.key]: [label.value]
nodeSelector:
[label.key]: [label.value]
修改后重启服务
参考文章:https://blog.csdn.net/lzy_zhi_yuan/article/details/106913428
拓展:
nodeSelector配置相对简单,k8s提供了另外一个pod调度配置:nodeAffinity(节点亲和),相对于nodeSelector的简单匹配他拥有更多更加个性化的配置。
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: deploy.type
operator: In
values:
- yztssjdxt-test
- yztssjdxt
这段配置表示:该pod可以被调度到标签key为 "deploy.type" ,值为 "yztssjdxt-test" 或 "yztssjdxt" 的节点。
通过使用的语句不同,调度分成软策略(soft)和硬策略(hard),在软策略下,如果没有满足调度条件的节点,pod会忽略这条规则,继续完成调度。而硬策略下,pod必须部署到满足条件的节点上,如果没有满足条件的节点,就不停重试。
DuringScheduling和IgnoredDuringExecution组合生成目前主要的nodeaffinity策略
策略字段 | 字段释义 |
---|---|
requiredDuringScheduling | pod必须部署到满足条件的节点上,如果没有满足条件的节点,就不停重试。 |
preferredDuringScheduling | 表示优先部署到满足条件的节点上,如果没有满足条件的节点,就忽略这些条件,按照正常逻辑部署。 |
IgnoredDuringExecution | 表示pod部署之后运行的时候,如果节点标签发生了变化,不再满足pod指定的条件,pod也会继续运行。 |
RequiredDuringExecution | 表示pod部署之后运行的时候,如果节点标签发生了变化,不再满足pod指定的条件,则重新选择符合要求的节点。 |
软硬策略可以组合使用,如下面这段配置中pod必须被调度到标签为 "deploy.type=yztssjdxt-test" 的节点。另外,在满足该条件的节点中,优先使用具有 "server=oms" 标签的节点。
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: deploy.type
operator: In
values:
- yztssjdxt-test
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: server
operator: In
values:
- oms
nodeAffinity中nodeSelector字段下,节点满足任何一个条件即可;但更下一级matchExpressions,节点必须同时满足所有条件才能运行pod 。
如下面这段配置需要deploy.type=yztssjdxt-test、server=oms同时满足
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: deploy.type
operator: In
values:
- yztssjdxt-test
- key: server
operator: In
values:
- oms
而这段配置只需要deploy.type=yztssjdxt-test、deploy.type1=yztssjdxt满足一个即可
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: deploy.type
operator: In
values:
- yztssjdxt-test
- matchExpressions:
- key: deploy.type1
operator: In
values:
- yztssjdxt
operator字段:pod与node的匹配逻辑,可选的操作符有:(我只测过in、notin)
字段名称 | 字段释义 |
---|---|
In | label.value在列表中 |
NotIn | label.value不在列表中 |
Exists | 某个label.value存在 |
DoesNotExist | 某个label.value不存在 |
Gt | label.value的值大于某个值 |
Lt | label.value的值小于某个值 |
如下方这段配置,pod将不会调度到deploy.type=yztssjdxt-test的node上
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: deploy.type
operator: NotIn
values:
- yztssjdxt-test