用节点亲和性把 Pod 分配到节点
你的 Kubernetes 服务器版本必须不低于版本 v1.10. 要获知版本信息,请输入 kubectl version
.
1.给节点添加标签
kubectl get nodes --show-labels
输出如下
master1 Ready control-plane 28d v1.28.8 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
worker1 Ready worker 28d v1.28.8 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=worker1,kubernetes.io/os=linux,node-role.kubernetes.io/worker=
worker2 Ready worker 28d v1.28.8 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=worker2,kubernetes.io/os=linux,node-role.kubernetes.io/worker=
2.创建pod
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/devops_de/nginx:latest
imagePullPolicy: IfNotPresent
创建pod
kubectl apply -f pod-nginx-required-affinity.yaml
3.查看pod调度
[root@master1 pods]# kubectl get pods --output=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
command-demo 0/1 Completed 0 2d17h 10.233.103.171 worker2 <none> <none>
hello-28921126-hjk74 0/1 CrashLoopBackOff 5 (2m39s ago) 5m45s 10.233.103.94 worker2 <none> <none>
hello-28921127-k4t8x 0/1 CrashLoopBackOff 5 (113s ago) 4m45s 10.233.103.92 worker2 <none> <none>
hello-28921128-b2sgv 0/1 CrashLoopBackOff 5 (43s ago) 3m45s 10.233.103.89 worker2 <none> <none>
hello-28921129-nxnnx 0/1 CrashLoopBackOff 4 (81s ago) 2m45s 10.233.103.99 worker2 <none> <none>
hello-28921130-qt4qk 0/1 CrashLoopBackOff 4 (16s ago) 105s 10.233.103.85 worker2 <none> <none>
hello-28921131-jbvn2 0/1 Error 3 (31s ago) 45s 10.233.103.97 worker2 <none> <none>
nginx 1/1 Running 0 29s 10.233.110.116 worker1 <none> <none>