赞
踩
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 <none> 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 <none> 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 <your-node-name> disktype=ssd
验证你所选节点具有 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。