kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master.k8s Ready control-plane,master 44h v1.22.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.k8s,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
node1.k8s Ready 44h v1.22.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1.k8s,kubernetes.io/os=linux
node2.k8s Ready 44h v1.22.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2.k8s,kubernetes.io/os=linux
1 )场景 1
选择一个节点,给它添加一个标签:
$ kubectl label nodes
验证你所选节点具有 disktype=ssd 标签:
$ kubectl get nodes --show-labels
依据强制的节点亲和性调度 Pod, 下面清单描述了一个 Pod
它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution , disktype=ssd
这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上
亲和性有很多类型,这里是一种节点亲和性
创建 affinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: aff-nginx
image: nginx
imagePullPolicy: IfNotPresent
$ kubectl create -f affinity.yaml
$ kubectl describe pod aff-nginx
可以看到非常准确的部署到 设置了 distype=ssd
的那个节点机器上了
如果有移除相关label, 参考: $ kubectl label nodes node2.k8s disktype-
2 )场景2: 将数据库类型的应用部署到 db 类型的节点上
kubectl label nodes node1.k8s type=db
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- db