メモ
drain/cordon
ノード再起動や一時的なメンテナンス用
drain = 指定したノードからpodを退避する
cordon = 指定したノードへのスケジューリングを無効にする
kubectl drain host03 --ignore-daemonsets --delete-local-data --force
--ignore-daemonsets
: DaemonSet で管理されている Pod は退避の対象外
--delete-local-data
: ノード上のローカルストレージを使用している Pod を強制的に削除
--force
: 静的 Pod を強制的に削除
drainすると自動でcordonも設定される
#設定
kubectl cordon host03
#解除
kubectl uncordon host03
ノードにSchedulingDisabled
というステータスがつく
ノード上の既存のPodはそのまま継続して実行されるが、それ以上新しいPodがスケジュールされることはない
taint/toleration
ノードの役割管理、特定の用途に対するノードの使用制限用途
taint = ノードにカスタムラベルを付与し、特定の条件を満たさない場合にPodのスケジュールを制限toleration = Pod に toleration を設定することで選択的にそのノードにスケジュールする
#設定
kubectl taint nodes host03 key=value:NoSchedule
#解除
kubectl taint nodes host03 key-
ノードにtaint付与
NoSchedule
: このテイントを持つノードにPodをスケジュールできない
PreferNoSchedule
: なるべくこのノードにPodをスケジュールしないようにする
NoExecute
: すでにノード上で動作しているPodも追い出し、再配置
podにtoleration設定
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
柔軟なスケジューリング制御が可能