Kubernetesを使っていると、Nodeが応答不能になった時にTaintsを付けてくれる。
例えば、Amazon EKS を使っていて、Nodeが応答できなくなった時(例えば、 Kubelet
が止まってしまった時)には、下記のTaintsを付けてくれる。
node.kubernetes.io/unreachable:NoExecute
node.kubernetes.io/unreachable:NoSchedule
これはKubernets コントロールプレーンにあるKubernetes Nodeコントローラーが付けてくれるので、「Nodeが応答できなくなって、Nodeが自分自身にTaintsを付けられない」という心配はない(と思う、誤っていたらコメントで教えてほしい)。
これで何が嬉しいかというと、Taintsの付いているNodeへは、スケジューリングを行わず、他のNodeを優先的に使えるということができる点である。
また、他にも、メモリが少ないことを意味する node.kubernetes.io/memory-pressure
や ディスク容量低下を示す node.kubernetes.io/disk-pressure
等がある。これらのTaintsを参考にすると、ヤバそうなNodeからさっさと退避させ、安全なNodeへ再配備させるということが可能になる。
Kubernetes に命令を出す kubectl
には、 drain
というコマンドが用意されており、これを使用することで「指定したNodeからPodを退避させる」「指定したNodeに『こいつはヤバイから再配備するな』というTaintsを貼れる1」を一度に行える。