一、计算服务部署到高性能机器¶
假设集群中有一批机器是高性能机器,而有一些需要密集计算的服务,需要部署至这些机器,以提高计算性能,此时可以使用节点亲和力来控制 Pod 尽量或者必须部署至这些节点上。
比如计算服务只能部署在 ssd 或 nvme 的节点上:
环境准备工作:
[root@k8s-master01 ~]# k label node k8s-node01 ssd=true disktype=ssd
[root@k8s-master01 ~]# k label node k8s-node02 disktype=nvme
# 验证
[root@k8s-master01 ~]# kg node k8s-node02 --show-labels | grep disktype
k8s-node02 Ready <none> 10d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=nvme,ingress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,zone=beijing-haidian
[root@k8s-master01 ~]# kg node --show-labels | grep ssd
k8s-node01 Ready <none> 10d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,ssd=true,zone=beijing-chaoyang
[root@k8s-master01 ~]# kg node --show-labels | grep disk
k8s-node01 Ready <none> 10d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,ssd=true,zone=beijing-chaoyang
1.1 计算服务必须部署到高性能机器¶
1.查看节点污点情况
[root@k8s-master01 ~]# kubectl describe node | grep Taint
Taints: <none>
Taints: <none>
Taints: <none>
Taints: <none>
2.定义一个名为podAntiAffinity07的yaml文件
[root@k8s-master01 Affinity]# vim podAntiAffinity07.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: compute
name: compute
spec:
replicas: 2
selector:
matchLabels:
app: compute
template:
metadata:
labels:
app: compute
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- nvme
- ssd
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: IfNotPresent
name: compute
4.开始部署
[root@k8s-master01 ~]# kaf podAntiAffinity07.yaml
5.查看pod状态,观察到pod被部署到node01和node02节点上
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-6fcfffd75d-8wtlx 1/1 Running 0 72s 192.168.85.195 k8s-node01 <none> <none>
compute-6fcfffd75d-d2hqc 1/1 Running 0 72s 192.168.58.207 k8s-node02 <none> <none>
6.重启应用,再次进行验证
# 重启应用
[root@k8s-master01 ~]# k rollout restart deploy compute
# 观察到应用重启后仍然部署到value值为nvme和ssd的node01节点和node02节点
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-7879b9bb75-7k62g 1/1 Running 0 5s 192.168.85.199 k8s-node01 <none> <none>
compute-7879b9bb75-kmn2q 1/1 Running 0 6s 192.168.58.206 k8s-node02 <none> <none>
7.环境复原
[root@k8s-master01 ~]# k delete -f podAntiAffinity07.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 podAntiAffinity08.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: compute
name: compute
spec:
replicas: 1
selector:
matchLabels:
app: compute
template:
metadata:
labels:
app: compute
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
- weight: 50
preference:
matchExpressions:
- key: disktype
operator: In
values:
- nvme
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
name: compute
4.开始部署
[root@k8s-master01 ~]# kaf podAntiAffinity08.yaml
5.查看pod状态,观察到pod按照权重被部署到node01节点上
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-59dbd98958-6zsvr 1/1 Running 0 7s 192.168.85.202 k8s-node01 <none> <none>
6.重启应用,再次进行验证
# 重启应用
[root@k8s-master01 ~]# k rollout restart deploy compute
# 观察到应用重启后仍然部署到node01节点上
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
compute-bcd89b469-gbz96 1/1 Running 0 2s 192.168.85.204 k8s-node01 <none> <none>
7.环境复原
[root@k8s-master01 ~]# k delete -f podAntiAffinity08.yaml