一、同一应用分布在不同机房¶
1.1 同一应用尽量分布在不同机房¶
1、给机房添加不同的标签
kubectl label node k8s-master01 zone=beijing-haidian
kubectl label node k8s-node01 zone=beijing-chaoyang
kubectl label node k8s-node02 zone=beijing-haidian
验证,观察到目前分为两个域,第一个域beijing-haidian分布的节点为k8s-master01和k8s-node02,第二个域beijing-chaoyang分布的节点为k8s-node01
[root@k8s-master01 ~]# kg node --show-labels | grep zone
k8s-master01 Ready control-plane 9d 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=,zone=beijing-haidian
k8s-node01 Ready <none> 9d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,zone=beijing-chaoyang
k8s-node02 Ready <none> 9d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ingress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,zone=beijing-haidian
2、定义一个名为podAntiAffinity03的yaml文件
[root@k8s-master01 ~]# vim podAntiAffinity03.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: diff-zone
name: diff-zone
spec:
replicas: 2
selector:
matchLabels:
app: diff-zone
template:
metadata:
labels:
app: diff-zone
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- diff-zone
topologyKey: zone
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: IfNotPresent
name: diff-zone
3、开始部署
[root@k8s-master01 ~]# kaf podAntiAffinity03.yaml
4、验证,观察到一个分配在k8s-master01,一个分配在k8s-node01
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
diff-zone-6877d75455-cqmd6 1/1 Running 0 3s 192.168.58.194 k8s-node02 <none> <none>
diff-zone-6877d75455-lc2k6 1/1 Running 0 3s 192.168.85.194 k8s-node01 <none> <none>
5、重启deploy
[root@k8s-master01 ~]# k rollout restart deploy diff-zone
# 观察到虽然zone为beijing-haidian有两个节点,但是仍然保持强制性,就是一个zone只能分配到一个pod
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
diff-zone-6877d75455-cqmd6 1/1 Running 0 27s 192.168.58.194 k8s-node02 <none> <none>
diff-zone-6877d75455-lc2k6 1/1 Running 0 27s 192.168.85.194 k8s-node01 <none> <none>
diff-zone-7db96875f4-5ljct 0/1 Pending 0 2s <none> <none> <none> <none>
6、环境复原
[root@k8s-master01 ~]# k delete -f podAntiAffinity03.yaml
1.2 同一应用尽量分布在不同机房¶
1、给机房添加不同的标签
kubectl label node k8s-master01 zone=beijing-haidian
kubectl label node k8s-node01 zone=beijing-chaoyang
kubectl label node k8s-node02 zone=beijing-haidian
验证,观察到目前分为两个域,第一个域beijing-haidian分布的节点为k8s-master01和k8s-node02,第二个域beijing-chaoyang分布的节点为k8s-node01
[root@k8s-master01 ~]# kg node --show-labels | grep zone
k8s-master01 Ready control-plane 9d 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=,zone=beijing-haidian
k8s-node01 Ready <none> 9d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,zone=beijing-chaoyang
k8s-node02 Ready <none> 9d v1.32.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ingress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,zone=beijing-haidian
2、定义一个名为podAntiAffinity03的yaml文件
[root@k8s-master01 ~]# vim podAntiAffinity04.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: diff-zone
name: diff-zone
spec:
selector:
matchLabels:
app: diff-zone
replicas: 2
template:
metadata:
labels:
app: diff-zone
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- diff-zone
topologyKey: zone
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: IfNotPresent
name: diff-zone
3、开始部署
[root@k8s-master01 ~]# kaf podAntiAffinity03.yaml
4、验证,观察到一个分配在k8s-master01,一个分配在k8s-node01
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
diff-zone-7b6899b8c9-5sgzs 1/1 Running 0 76s 192.168.32.131 k8s-master01 <none> <none>
diff-zone-7b6899b8c9-rbzsb 1/1 Running 0 76s 192.168.85.252 k8s-node01 <none> <none>
5、重启deploy
[root@k8s-master01 ~]# k rollout restart deploy diff-zone
# 观察到仍然分配到不同的zone
[root@k8s-master01 ~]# kgp -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
diff-zone-68d444fd97-8jj2q 1/1 Running 0 12s 192.168.85.255 k8s-node01 <none> <none>
diff-zone-68d444fd97-r9s59 1/1 Running 0 14s 192.168.58.255 k8s-node02 <none> <none>
6、环境复原
[root@k8s-master01 ~]# k delete -f podAntiAffinity04.yaml