Skip to content

Instantly share code, notes, and snippets.

@tenforward
Last active July 8, 2020 09:39
Show Gist options
  • Save tenforward/6380c70e90b73eeedca79a74fc9f4da4 to your computer and use it in GitHub Desktop.
Save tenforward/6380c70e90b73eeedca79a74fc9f4da4 to your computer and use it in GitHub Desktop.

単一 Constraints

Node にラベル付与

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

Pod

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

deploy

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      |
+-------+-------+------------+

複数のConstraints

Pod

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

deploy

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       |
+-------+-------+------------+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment