一、计算服务不部署到低性能机器¶
假如已知集群中有一些机器可能性能不佳或者其他因素的影响,需要控制某个服务尽量不部署至这些机器,此时只需要把 operator 改为 NotIn 即可:
比如计算服务不能部署在带有performance=low的节点上:
环境准备工作:
[root@k8s-master01 ~]# k label node k8s-master01 performance=low
# 验证
[root@k8s-master01 ~]# kg node --show-labels | grep master01
k8s-master01 Ready control-plane 10d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=,performance=low,zone=beijing-haidian
1.1 计算服务必须不部署到低性能机器¶
1.查看节点污点情况
[root@k8s-master01 ~]# kubectl describe node | grep Taint
Taints: <none>
Taints: <none>
Taints: <none>
Taints: <none>
2.定义一个名为podAntiAffinity09的yaml文件
[root@k8s-master01 Affinity]# vim podAntiAffinity09.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: compute-intensive
name: compute-intensive-app
spec:
replicas: 3
selector:
matchLabels:
app: compute-intensive
template:
metadata:
labels:
app: compute-intensive
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: performance
operator: NotIn
values:
- low
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: IfNotPresent
name: compute-intensive
4.开始部署
[root@k8s-master01 ~]# kaf podAntiAffinity09.yaml
5.查看pod状态,观察到pod被部署到node01和node02节点上,没有部署到master01节点上
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-intensive-app-6b486f499b-bqpg4 1/1 Running 0 107s 192.168.85.203 k8s-node01 <none> <none>
compute-intensive-app-6b486f499b-hnkqw 1/1 Running 0 107s 192.168.58.208 k8s-node02 <none> <none>
compute-intensive-app-6b486f499b-wfqn9 1/1 Running 0 107s 192.168.58.210 k8s-node02 <none> <none>
6.重启应用,再次进行验证
# 重启应用
[root@k8s-master01 ~]# k rollout restart deploy compute-intensive-app
# 观察到应用重启后仍然部署到node01节点和node02节点上,没有部署到master01节点上
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-intensive-app-7b7cb44b8b-hhmgr 1/1 Running 0 4s 192.168.58.212 k8s-node02 <none> <none>
compute-intensive-app-7b7cb44b8b-mbn4b 1/1 Running 0 2s 192.168.58.211 k8s-node02 <none> <none>
compute-intensive-app-7b7cb44b8b-q8twh 1/1 Running 0 3s 192.168.85.205 k8s-node01 <none> <none>
7.环境复原
[root@k8s-master01 ~]# k delete -f podAntiAffinity09.yaml
1.2 计算服务尽量不部署到低性能机器¶
1.查看节点污点情况
[root@k8s-master01 ~]# kubectl describe node | grep Taint
Taints: <none>
Taints: <none>
Taints: <none>
Taints: <none>
2.定义一个名为podAntiAffinity08的yaml文件
[root@k8s-master01 Affinity]# vim podAntiAffinity10.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: compute-intensive
name: compute-intensive-app
spec:
replicas: 3
selector:
matchLabels:
app: compute-intensive
template:
metadata:
labels:
app: compute-intensive
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: performance
operator: NotIn
values:
- low
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
name: compute-intensive
4.开始部署
[root@k8s-master01 ~]# kaf podAntiAffinity08.yaml
5.查看pod状态,观察到pod只部署到了node01节点和node02节点
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-intensive-app-f8c8d785c-9c4hf 1/1 Running 0 9s 192.168.58.214 k8s-node02 <none> <none>
compute-intensive-app-f8c8d785c-r2xff 1/1 Running 0 9s 192.168.85.201 k8s-node01 <none> <none>
compute-intensive-app-f8c8d785c-v9tgz 1/1 Running 0 36s 192.168.58.213 k8s-node02 <none> <none>
6.重启应用,再次进行验证
# 重启应用
[root@k8s-master01 ~]# k rollout restart deploy compute-intensive-app
# 观察到应用重启后仍然部署到node01节点和node02节点上
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-intensive-app-6f689b8d7d-fslgj 1/1 Running 0 4s 192.168.85.206 k8s-node01 <none> <none>
compute-intensive-app-6f689b8d7d-j7nw7 1/1 Running 0 6s 192.168.58.216 k8s-node02 <none> <none>
compute-intensive-app-6f689b8d7d-n82vj 1/1 Running 0 4s 192.168.58.215 k8s-node02 <none> <none>
7.环境复原
[root@k8s-master01 ~]# k delete -f podAntiAffinity10.yaml