2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社クラスアクトAdvent Calendar 2022

Day 3

kubectlコマンドで特定のnodeからpodを排出(移動)する

Last updated at Posted at 2022-12-03

メンテナンスなどで特定のnodeから予めpodを他のnodeに移しておきたいことがあります。
スケジューリングをyamlに定義して適用しても良いのですが、コマンド一発でサクッと済ませたいな、、と思いました。

まとめ

  • drainで排出(他へ移動)
  • --ignore-daemonsetsオプションは付ける
  • 元に戻すにはuncordon

実際にやってみた

microk8s-0microk8s-5まで6nodesある中で、microk8s-1を対象に作業してみる。

まずは現状確認

nodeのSTATUSはReady

ubuntu@k8s:~$ kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
microk8s-3   Ready    <none>   13d   v1.25.4
microk8s-2   Ready    <none>   13d   v1.25.4
microk8s-4   Ready    <none>   13d   v1.25.4
microk8s-5   Ready    <none>   13d   v1.25.4
microk8s-1   Ready    <none>   13d   v1.25.4
microk8s-0   Ready    <none>   26d   v1.25.4

microk8s-1に配置されているpods。

ubuntu@k8s:~$ kubectl get pods -A -o wide | grep microk8s-1
kube-system      fluentd-5rmfh                             1/1     Running   0             9d      10.1.211.143   microk8s-1   <none>           <none>
logging          elasticsearch-89d7968d7-dsskn             1/1     Running   0             9d      10.1.211.144   microk8s-1   <none>           <none>
metallb-system   speaker-rlv76                             1/1     Running   3 (8d ago)    13d     172.17.0.91    microk8s-1   <none>           <none>
kube-system      calico-node-dgc6x                         1/1     Running   0             8d      172.17.0.91    microk8s-1   <none>           <none>

drainの実行

--ignore-daemonsetsを付けないとエラーになる。
microk8s-1が閉鎖(cordoned)され、daemonsetsではないelasticsearchのみが排出された。
--delete-emptydir-dataのオプションが必要になるときもある。←ローカルデータは削除される。

ubuntu@k8s:~$ kubectl drain microk8s-1 --ignore-daemonsets 
node/microk8s-1 cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/fluentd-5rmfh, metallb-system/speaker-rlv76, kube-system/calico-node-dgc6x
evicting pod logging/elasticsearch-89d7968d7-dsskn
pod/elasticsearch-89d7968d7-dsskn evicted
node/microk8s-1 drained

drain後の状態確認

nodeのSTATUSはReady,SchedulingDisabled

ubuntu@k8s:~$ kubectl get nodes
NAME             STATUS                     ROLES    AGE   VERSION
microk8s-5   Ready                      <none>   13d   v1.25.4
microk8s-0   Ready                      <none>   26d   v1.25.4
microk8s-3   Ready                      <none>   13d   v1.25.4
microk8s-2   Ready                      <none>   13d   v1.25.4
microk8s-1   Ready,SchedulingDisabled   <none>   13d   v1.25.4
microk8s-4   Ready                      <none>   13d   v1.25.4

elasticsearchmicrok8s-1から消え、microk8s-2に移動している。

ubuntu@k8s:~$ kubectl get pods -A -o wide | grep microk8s-1
kube-system      fluentd-5rmfh                             1/1     Running   0             9d      10.1.211.143   microk8s-1   <none>           <none>
metallb-system   speaker-rlv76                             1/1     Running   3 (8d ago)    13d     172.17.0.91    microk8s-1   <none>           <none>
kube-system      calico-node-dgc6x                         1/1     Running   0             8d      172.17.0.91    microk8s-1   <none>           <none>
ubuntu@k8s:~$ 
ubuntu@k8s:~$ kubectl get pods -A -o wide | grep logging | grep elasticsearch
logging          elasticsearch-89d7968d7-wqf47             1/1     Running   0             2m3s    10.1.36.243    microk8s-2   <none>           <none>

これでmicrok8s-1を停止したり様々なメンテナンスがしやすくなった。

元に戻してみる(uncordon)

microk8s-1を指定してuncordonを実行

ubuntu@k8s:~$ kubectl uncordon microk8s-1 
node/microk8s-1 uncordoned

nodeのSTATUSがReadyに戻った!

ubuntu@k8s:~$ kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
microk8s-4   Ready    <none>   12d   v1.25.4
microk8s-2   Ready    <none>   12d   v1.25.4
microk8s-3   Ready    <none>   12d   v1.25.4
microk8s-0   Ready    <none>   12d   v1.25.4
microk8s-1   Ready    <none>   12d   v1.25.4
microk8s-5   Ready    <none>   12d   v1.25.4

元々あったelasticsearchは自動では戻らない。
※nodeAffinity設定してたら戻ると思いますが未確認。

ubuntu@k8s:~$ kubectl get pods -A -o wide | grep microk8s-1
kube-system      fluentd-2w7fn                              1/1     Running   4 (112s ago)    12d     10.1.189.144   microk8s-1   <none>           <none>
metallb-system   speaker-vkb9z                              1/1     Running   4 (112s ago)    12d     10.9.6.41      microk8s-1   <none>           <none>
kube-system      calico-node-4hxxx                          1/1     Running   4 (112s ago)    8d      10.9.6.41      microk8s-1   <none>           <none>
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?