tjtjtjのメモ

自分のためのメモです

kubernetes 学習 taints tolerations その2

pod でなく deployment で taints/tolerations を試す。

確認

$ kubectl describe node kb1
Taints:             node-role.kubernetes.io/master:NoSchedule

$ kubectl describe node kb2
Taints:             <none>

$ kubectl describe node kb3
Taints:             <none>

テキトーな deployment.yaml

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:                ## <--- PodSpec
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
      tolerations:
      - key: apptype
        value: appproxy
        effect: NoExecute

nginx-deployment.yaml を適用

$ kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created

pod確認 kb2,kb3 で実行されている。

$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
nginx-deployment-78d48847c6-5ldbv   1/1     Running   0          11m   10.244.2.33   kb3    <none>           <none>
nginx-deployment-78d48847c6-wh7x9   1/1     Running   0          11m   10.244.1.41   kb2    <none>           <none>

$ kubectl describe pod | grep -3 Tole
Tolerations:     apptype=appproxy:NoExecute
                 node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s

Tolerations:     apptype=appproxy:NoExecute
                 node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s

kb2 から追い出して kb3で実行する

kb2 を汚す。

$ kubectl taint node kb2 apptype=asdf:NoExecute
node/kb2 tainted

$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
nginx-deployment-78d48847c6-5ldbv   1/1     Running   0          12m   10.244.2.33   kb3    <none>           <none>
nginx-deployment-78d48847c6-j5gw5   1/1     Running   0          16s   10.244.2.34   kb3    <none>           <none>

kb3 から追い出して kb2 で実行する

kb2 の汚れを取る。

$ kubectl taint node kb2 apptype-
node/kb2 untainted

追い出し前の確認

$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
nginx-deployment-78d48847c6-5ldbv   1/1     Running   0          13m   10.244.2.33   kb3    <none>           <none>
nginx-deployment-78d48847c6-j5gw5   1/1     Running   0          91s   10.244.2.34   kb3    <none>           <none>

kb3を汚す。kb2からkb3に引っ越している。

$ kubectl taint node kb3 apptype=asdf:NoExecute
node/kb3 tainted

$ kubectl get pod -o wide
NAME                                READY   STATUS              RESTARTS   AGE     IP            NODE   NOMINATED NODE   READINESS GATES
nginx-deployment-78d48847c6-5ldbv   1/1     Terminating         0          14m     10.244.2.33   kb3    <none>           <none>
nginx-deployment-78d48847c6-cxdpj   0/1     ContainerCreating   0          2s      <none>        kb2    <none>           <none>
nginx-deployment-78d48847c6-j5gw5   1/1     Terminating         0          2m24s   10.244.2.34   kb3    <none>           <none>
nginx-deployment-78d48847c6-v8nkt   1/1     Running             0          2s      10.244.1.43   kb2    <none>           <none>
$ kubectl get pod -o wide
NAME                                READY   STATUS        RESTARTS   AGE     IP            NODE   NOMINATED NODE   READINESS GATES
nginx-deployment-78d48847c6-5ldbv   0/1     Terminating   0          14m     <none>        kb3    <none>           <none>
nginx-deployment-78d48847c6-cxdpj   1/1     Running       0          5s      10.244.1.42   kb2    <none>           <none>
nginx-deployment-78d48847c6-j5gw5   0/1     Terminating   0          2m27s   10.244.2.34   kb3    <none>           <none>
nginx-deployment-78d48847c6-v8nkt   1/1     Running       0          5s      10.244.1.43   kb2    <none>           <none>
$ kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
nginx-deployment-78d48847c6-cxdpj   1/1     Running   0          15s   10.244.1.42   kb2    <none>           <none>
nginx-deployment-78d48847c6-v8nkt   1/1     Running   0          15s   10.244.1.43   kb2    <none>           <none>

おわり

pod は 追い出すと delete されて終了だが、deployment の pod 死んでも生き延びようとする?書籍にあたったほうがよさそう。