zone
を付与
karma@k8s01:~$ kubectl label nodes k8s04.idcf.ten-forward.ws zone=east
node/k8s04.idcf.ten-forward.ws labeled
karma@k8s01:~$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s01.idcf.ten-forward.ws Ready master 46d v1.18.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s01.idcf.ten-forward.ws,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s02.idcf.ten-forward.ws Ready <none> 46d v1.18.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s02.idcf.ten-forward.ws,kubernetes.io/os=linux,node=k8s02,zone=east
k8s03.idcf.ten-forward.ws Ready <none> 24h v1.18.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s03.idcf.ten-forward.ws,kubernetes.io/os=linux,node=k8s03,zone=west
k8s04.idcf.ten-forward.ws Ready <none> 9m42s v1.18.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s04.idcf.ten-forward.ws,kubernetes.io/os=linux,node=k8s04,zone=east
zone
ごとに分散配置。app: hoge
でラベリング。
karma@k8s01:~$ cat sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: (podname)
labels:
app: hoge
spec:
containers:
- name: nginx-container
image: nginx:1.12
topologySpreadConstraints:
- maxSkew: 1
topologyKey: zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: hoge
karma@k8s01:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tenforward1 1/1 Running 0 18s 10.244.1.154 k8s02.idcf.ten-forward.ws <none> <none>
tenforward10 1/1 Running 0 17s 10.244.2.24 k8s03.idcf.ten-forward.ws <none> <none>
tenforward2 1/1 Running 0 18s 10.244.2.20 k8s03.idcf.ten-forward.ws <none> <none>
tenforward3 1/1 Running 0 18s 10.244.1.155 k8s02.idcf.ten-forward.ws <none> <none>
tenforward4 1/1 Running 0 18s 10.244.2.21 k8s03.idcf.ten-forward.ws <none> <none>
tenforward5 1/1 Running 0 18s 10.244.1.156 k8s02.idcf.ten-forward.ws <none> <none>
tenforward6 1/1 Running 0 17s 10.244.2.22 k8s03.idcf.ten-forward.ws <none> <none>
tenforward7 1/1 Running 0 17s 10.244.1.157 k8s02.idcf.ten-forward.ws <none> <none>
tenforward8 1/1 Running 0 17s 10.244.2.23 k8s03.idcf.ten-forward.ws <none> <none>
tenforward9 1/1 Running 0 17s 10.244.3.2 k8s04.idcf.ten-forward.ws <none> <none>
5つずつ配置されてる。
+---------------+------------+
| zone: east | zone: west |
+---------------+------------+
| k8s02 | k8s04 | k8s03 |
+-------+-------+------------+
| PPPP | P | PPPPP |
+-------+-------+------------+
apiVersion: v1
kind: Pod
metadata:
name: tenforward
labels:
app: hoge
spec:
containers:
- name: nginx-container
image: nginx:1.12
topologySpreadConstraints:
- maxSkew: 3
topologyKey: zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: hoge
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: hoge
karma@k8s01:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tenforward1 1/1 Running 0 6s 10.244.1.166 k8s02.idcf.ten-forward.ws <none> <none>
tenforward10 1/1 Running 0 4s 10.244.2.35 k8s03.idcf.ten-forward.ws <none> <none>
tenforward2 1/1 Running 0 6s 10.244.3.8 k8s04.idcf.ten-forward.ws <none> <none>
tenforward3 1/1 Running 0 5s 10.244.2.32 k8s03.idcf.ten-forward.ws <none> <none>
tenforward4 1/1 Running 0 5s 10.244.1.167 k8s02.idcf.ten-forward.ws <none> <none>
tenforward5 1/1 Running 0 5s 10.244.2.33 k8s03.idcf.ten-forward.ws <none> <none>
tenforward6 1/1 Running 0 5s 10.244.3.9 k8s04.idcf.ten-forward.ws <none> <none>
tenforward7 1/1 Running 0 5s 10.244.1.168 k8s02.idcf.ten-forward.ws <none> <none>
tenforward8 1/1 Running 0 5s 10.244.2.34 k8s03.idcf.ten-forward.ws <none> <none>
tenforward9 1/1 Running 0 4s 10.244.3.10 k8s04.idcf.ten-forward.ws <none> <none>
+---------------+------------+
| zone: east | zone: west |
+---------------+------------+
| k8s02 | k8s04 | k8s03 |
+-------+-------+------------+
| PPP | PPP | PPPP |
+-------+-------+------------+