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 死んでも生き延びようとする?書籍にあたったほうがよさそう。