LoginSignup
47
30

More than 5 years have passed since last update.

Kubernetesでnodeを安全に除外する

Last updated at Posted at 2018-04-18

KubernetesのNodeを再起動やメンテナンスをしたい時に、クラスタからNodeを切り離す手順を説明します。
安全に切り離すには、kubectl drainコマンドを使います。drain は「徐々に排出する」というような意味です。このコマンドを実行すると対象ノードで起動しているPodに停止命令が送られたあとにPodが削除されます。

ノード名を調べる

kubectl get nodes

ノードを排除する

kubectl drain {$node_name}

drainに指定できるオプション

オプション名 短縮 デフォルト 説明
delete-local-data false emptyDir(ノードが排出されたときに削除されるローカルデータ)を使用するポッドがあっても続行
dry-run false trueの場合、命令は送信せずに結果だけ表示
force false ReplicationController、ReplicaSet、Job、DaemonSetまたはStatefulSetで管理されていないポッドがあっても続行
grace-period -1 正常に終了するために各ポッドに与えられる時間(秒単位)。負の場合、ポッドで指定されたデフォルト値が使用される
ignore-daemonsets false DaemonSetで管理されているPodを無視する
pod-selector 対象podをラベルセレクタで選択
selector l ラベルでノードを選択
timeout 0s タイムアウトを待つ時間の長さ、0は無限に待つ

kubectl drain {$node_name} --grace-period=900

この例では、ReplicationController、ReplicaSet、Job、DaemonSet、またはStatefulSetによって管理されていないポッドがある場合は中止し、15分の猶予時間を与える。

対象ノードで動作しているpod一覧を取得する

kubectl get pods --template \
  '{{range .items}}{{if eq .spec.nodeName "ノード名"}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}'

ノードをメンテナンスする

対象ノードで動作しているpodが無くなったら再起動やメンテナンスを実施します。

ノードを復帰させる

kubectl uncordon {$node_name}

cordon は遮蔽するというような意味なので、uncordonは遮蔽を解除するという意味になります。

参考

47
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
30