一、拓扑域约束实践

1.1 应用均匀分布在不同的机房

1.查看节点污点情况

[root@k8s-master01 ~]# kubectl describe node | grep Taint            
Taints:             <none>
Taints:             <none>
Taints:             <none>
Taints:             <none>

2.定义一个名为topologySC.yaml 的yaml文件

[root@k8s-master01 Affinity]# vim topologySC.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-app
  name: my-app
spec:
  replicas: 9
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        whenUnsatisfiable: DoNotSchedule
        topologyKey: kubernetes.io/hostname
        labelSelector:
          matchLabels:
            app: my-app
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
        imagePullPolicy: IfNotPresent
        name: my-app

3.开始部署

[root@k8s-master01 ~]# kaf topologySC.yaml 

4.查看pod状态,观察到每个节点均匀分配3个pod

[root@k8s-master01 ~]# kgp -owide 
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE           NOMINATED NODE   READINESS GATES
my-app-5d6bfb5d84-2hhd5   1/1     Running   0          80s   192.168.32.141   k8s-master01   <none>           <none>
my-app-5d6bfb5d84-7jtmk   1/1     Running   0          80s   192.168.32.140   k8s-master01   <none>           <none>
my-app-5d6bfb5d84-g72rf   1/1     Running   0          80s   192.168.85.214   k8s-node01     <none>           <none>
my-app-5d6bfb5d84-sds6w   1/1     Running   0          80s   192.168.32.142   k8s-master01   <none>           <none>
my-app-5d6bfb5d84-ssqrz   1/1     Running   0          80s   192.168.58.223   k8s-node02     <none>           <none>
my-app-5d6bfb5d84-vkzpk   1/1     Running   0          80s   192.168.85.212   k8s-node01     <none>           <none>
my-app-5d6bfb5d84-vqsd9   1/1     Running   0          80s   192.168.58.224   k8s-node02     <none>           <none>
my-app-5d6bfb5d84-xcg96   1/1     Running   0          80s   192.168.85.217   k8s-node01     <none>           <none>
my-app-5d6bfb5d84-xjj4z   1/1     Running   0          80s   192.168.58.229   k8s-node02     <none>           <none>

5.重启应用,再次进行验证

# 重启应用
[root@k8s-master01 ~]# k rollout restart deploy my-app

# 观察到应用重启后仍然每个节点均匀分配3个pod
[root@k8s-master01 ~]# kgp -owide 
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE           NOMINATED NODE   READINESS GATES
my-app-657f4dc4c9-6f9qk   1/1     Running   0          4s    192.168.58.230   k8s-node02     <none>           <none>
my-app-657f4dc4c9-d6ztv   1/1     Running   0          4s    192.168.32.145   k8s-master01   <none>           <none>
my-app-657f4dc4c9-gh7xz   1/1     Running   0          3s    192.168.85.216   k8s-node01     <none>           <none>
my-app-657f4dc4c9-m6tkl   1/1     Running   0          3s    192.168.85.210   k8s-node01     <none>           <none>
my-app-657f4dc4c9-nwwzf   1/1     Running   0          4s    192.168.32.144   k8s-master01   <none>           <none>
my-app-657f4dc4c9-wqws6   1/1     Running   0          3s    192.168.58.227   k8s-node02     <none>           <none>
my-app-657f4dc4c9-xjbjg   1/1     Running   0          4s    192.168.85.213   k8s-node01     <none>           <none>
my-app-657f4dc4c9-zrz79   1/1     Running   0          3s    192.168.58.225   k8s-node02     <none>           <none>
my-app-657f4dc4c9-zwqk8   1/1     Running   0          4s    192.168.32.143   k8s-master01   <none>           <none>

6.环境复原

[root@k8s-master01 ~]# k delete -f topologySC.yaml