#应用资源配置文件 kubectl apply -f scheduler-pod-affinity-preferred.yaml#查看效果复制代码[rootmaster1 scheduler]# kubectl get pod --show-labels -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELScontroller-deployment-demo-1-75ffc97bf4-grmqb 1/1 Running 0 27s 10.244.1.88 node1.org appmyapp2,pod-template-hash75ffc97bf4controller-deployment-demo-dev-55947b644-dl5cr 1/1 Running 1 (12m ago) 18h 10.244.1.70 node1.org envdev,pod-template-hash55947b644controller-deployment-demo-test-7685c5779d-mfxbx 1/1 Running 1 (12m ago) 18h 10.244.3.174 node2.org envtest,pod-template-hash7685c5779d复制代码#结果显示优先选择的是 node1节点上的Podkubectl delete -f scheduler-pod-affinity-required.yaml复制代码rootmaster1 scheduler]# cat scheduler-pod-affinity-preferred.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: controller-deployment-demo-1spec:replicas: 1selector:matchLabels:app: myapp2template:metadata:labels:app: myapp2spec:containers:- name: deployment-2image: registry.cn-beijing.aliyuncs.com/wangxiaochun/pod-test:v0.1affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 60podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- devopsnamespaces:- defaulttopologyKey: kubernetes.io/hostname- weight: 30podAffinityTerm:labelSelector:matchExpressions:- key: envoperator: Invalues:- testnamespaces:- defaulttopologyKey: kubernetes.io/hostname[rootmaster1 scheduler]#复制代码kubectl apply -f scheduler-pod-affinity-preferred.yaml#查看效果,选择次优的节点node2kubectl get pod --show-labels -o wide复制代码[rootmaster1 scheduler]# kubectl get pod --show-labels -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELScontroller-deployment-demo-1-5db6f874d6-n4dhf 1/1 Running 0 5s 10.244.3.179 node2.org appmyapp2,pod-template-hash5db6f874d6controller-deployment-demo-dev-55947b644-dl5cr 1/1 Running 1 (17m ago) 18h 10.244.1.70 node1.org envdev,pod-template-hash55947b644controller-deployment-demo-test-7685c5779d-mfxbx 1/1 Running 1 (17m ago) 18h 10.244.3.174 node2.org envtest,pod-template-hash7685c5779d[rootmaster1 scheduler]#复制代码#清理环境kubectl delete -f scheduler-pod-affinity-preferred.yaml范例: 硬亲和实现 Pod必须把数据存储到redis中必须在一起#定义资源配置文件复制代码[rootmaster1 scheduler]# cat scheduler-pod-affinity-redis-required.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: redisspec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: registry.cn-beijing.aliyuncs.com/wangxiaochun/redis:7.0imagePullPolicy: IfNotPresentapiVersion: apps/v1kind: Deploymentmetadata:name: pod-affinity-requiredspec:replicas: 4selector:matchLabels:app: pod-testtemplate:metadata:labels:app: pod-testspec:containers:- name: pod-testimage: registry.cn-beijing.aliyuncs.com/wangxiaochun/pod-test:v0.1imagePullPolicy: IfNotPresentaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- {key: app, operator: In, values: [“redis”]}topologyKey: kubernetes.io/hostname复制代码#结果都运行在同一个节点kubectl get pod -o wide --show-labelsredis在哪个节点就调度到哪个节点范例将Pod调度到同一个机架的服务器上kubectl label node node1.org rackrack01kubectl label node node2.org rackrack01复制代码[rootmaster1 scheduler]# cat scheduler-pod-affinity-redis-required02.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: redisspec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:nodeSelector:rack: rack01containers:- name: redisimage: registry.cn-beijing.aliyuncs.com/wangxiaochun/redis:7.0imagePullPolicy: IfNotPresentapiVersion: apps/v1kind: Deploymentmetadata:name: pod-affinity-requiredspec:replicas: 4selector:matchLabels:app: pod-testtemplate:metadata:labels:app: pod-testspec:containers:- name: pod-testimage: registry.cn-beijing.aliyuncs.com/wangxiaochun/pod-test:v0.1imagePullPolicy: IfNotPresentaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- {key: app, operator: In, values: [“redis”]}#topologyKey: kubernetes.io/hostnametopologyKey: rack #根据机架确定位置复制代码kubectl apply -f scheduler-pod-affinity-redis-required02.yaml按照节点有标签就调度pod复制代码[rootmaster1 scheduler]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod-affinity-required-9cc477f85-8vjz9 1/1 Running 0 89s 10.244.1.145 node1.orgpod-affinity-required-9cc477f85-9jmnl 1/1 Running 0 89s 10.244.3.191 node2.orgpod-affinity-required-9cc477f85-drd8d 1/1 Running 0 89s 10.244.1.144 node1.orgpod-affinity-required-9cc477f85-g2f54 1/1 Running 0 89s 10.244.3.190 node2.orgredis-565f4c9cd7-7dpqk 1/1 Running 0 89s 10.244.1.146 node1.org复制代码范例: 软亲和, pod要把数据存储到redis中原则上最好在一起实在不行也可以调度到其他节点#定义资源配置文件复制代码[rootmaster1 scheduler]# cat scheduler-pod-affinity-redis-preferred.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: redis-preferredspec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:nodeName: node1.orgcontainers:- name: redisimage: registry.cn-beijing.aliyuncs.com/wangxiaochun/redis:7.0imagePullPolicy: IfNotPresentresources:requests:cpu: 30mmemory: 30MiapiVersion: apps/v1kind: Deploymentmetadata:name: pod-affinity-preferredspec:replicas: 6selector:matchLabels:app: pod-testtemplate:metadata:labels:app: pod-testspec:containers:- name: pod-testimage: registry.cn-beijing.aliyuncs.com/wangxiaochun/pod-test:v0.1imagePullPolicy: IfNotPresentresources:requests:cpu: 30mmemory: 50Miaffinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- {key: app, operator: In, values: [“redis”]}topologyKey: kubernetes.io/hostname- weight: 50podAffinityTerm:labelSelector:matchExpressions:- {key: app, operator: In, values: [“redis”]}topologyKey: env #根据env标签确认是否为同一个节点复制代码#属性解析如果第一条件满足不了那就用第二条件第二条件不满足就用其他条件#应用kubectl apply -f scheduler-pod-affinity-redis-preferred.yaml#可以看到pod分布到多个节点复制代码[rootmaster1 scheduler]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod-affinity-preferred-69bdd98999-6jlk6 1/1 Running 0 79s 10.244.1.152 node1.orgpod-affinity-preferred-69bdd98999-b88x4 1/1 Running 0 79s 10.244.3.194 node2.orgpod-affinity-preferred-69bdd98999-drqmw 1/1 Running 0 79s 10.244.3.195 node2.orgpod-affinity-preferred-69bdd98999-h8x78 1/1 Running 0 79s 10.244.1.151 node1.orgpod-affinity-preferred-69bdd98999-k2d8b 1/1 Running 0 79s 10.244.3.193 node2.orgpod-affinity-preferred-69bdd98999-zdpt7 1/1 Running 0 79s 10.244.3.196 node2.orgredis-preferred-5d76988d8-4zb8p 1/1 Running 0 79s 10.244.1.150 node1.org复制代码