实验环境准备:
[root@master pod-dispatch]# cat pod-nodeaffinity-preferred.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeaffinity-prefered
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
affinity:
nodeAffinity: #设置节点亲和性
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 10 #把优先级10赋值给标签值xxx
preference:
matchExpressions:
- key: nodeenv
operator: In
values: ["xxx"]
- weight: 1 #把优先级1赋值给标签值yyy
preference:
matchExpressions:
- key: nodeenv
operator: In
values: ["yyy"]
[root@master ~]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 43h v1.17.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,max=ccc,node-role.kubernetes.io/master=,nodeenv=yyy #设置主机nodeenv的值为yyy
node1 Ready <none> 43h v1.17.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,max=cc,nodeenv=xxx #设置主机nodeemv的值为xxx
详解:
因为我搭建的k8s集群是一个主一个node节点,在k8s中默认主机节点是没有办法创建pod的,因为他存在污点,你如果想让主节点创建pod,你需要去除节点或者设置容器,这里不做过多讲解,
去除污点可以参考:k8s两节点一个主节点一个node节点部署硬限制失败_m0_52526697的博客-优快云博客
我们现在:把nodeenv中xxx的权重赋值为10,把nodeenv中yyy的权重赋值为1,在官方资料中weight权重值为1到100,值越大越优先,所以我们得知他应该会在nodeenv值为xxx的节点去创建pod。
我们拓展一下是不是我们把nodeenv中yyy的权重设置为20,那么他是不是就在nodeenv值为yyy的节点去创建pod,答案是一定的。