(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】特定Podを停止させずにレプリカセットから切り離す手順

スポンサーリンク

はじめに

Kubernetesではkubectl create deployment nginx-dep --image nginxとデプロイメントを作成すると自動的にReplicaSetも作成され、不具合が発生した場合もPodをdeleteすれば自動的に新たなPodが復旧します。

ただ、PD対応等で特定のPodを一時的に退避してデプロイメントで管理するPodから外して新たなPodを作成したい場合があります。本記事ではそのような際に利用できるPodのラベル変更手順によるPodの切り離しを説明します。

コマンド実行環境
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"15",...

想定するシナリオ

以下のPod(Labels:app=nginx-dep)が

$ kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
nginx-dep-76c88d5587-7fjp7   1/1     Running   0          26m
nginx-dep-76c88d5587-7k6gs   1/1     Running   0          10m

以下のレプリカセットで管理されている状況で

$ kubectl describe rs nginx-dep-76c88d5587
Name:           nginx-dep-76c88d5587
Namespace:      default
Selector:       app=nginx-dep,pod-template-hash=76c88d5587
Labels:         app=nginx-dep

nginx-dep-76c88d5587-7fjp7のPodを立ち上げたままレプリカセットから切り離すことで、デプロイメントとしてのPod数は維持したままでnginx-dep-76c88d5587-7fjp7の内部調査を行いたい。

Podのラベルを変更することでSelectorの対象から外す

レプリカセットの中身を見れば分かる通り以下の条件でPod数を監視しています。

Selector:       app=nginx-dep,pod-template-hash=76c88d5587

切り離したいPodは以下のように同ラベルが付与されているので

$ kubectl describe pod nginx-dep-76c88d5587-7fjp7
...
Labels:         app=nginx-dep
                pod-template-hash=76c88d5587

以下コマンドでエディタを開きPodのラベルを変更(nginx-dep→nginx-depX)すれば

$ kubectl edit pod nginx-dep-76c88d5587-7fjp7
pod/nginx-dep-76c88d5587-7fjp7 edited
$ kubectl describe pod nginx-dep-76c88d5587-7fjp7
...
Labels:       app=nginx-depX

新たなPodがreplica数を維持するために起動してきます。

$ kubectl get pod
NAME                         READY   STATUS              RESTARTS   AGE
nginx-dep-76c88d5587-7fjp7   1/1     Running             0          27m
nginx-dep-76c88d5587-7k6gs   1/1     Running             0          11m
nginx-dep-76c88d5587-hpnxg   0/1     ContainerCreating   0          6s

そしてデプロイメントを削除しても

$ kubectl delete deploy nginx-dep
deployment.extensions "nginx-dep" deleted

ラベルを変更したPodはデプロイメントの管理外となり起動したままになります。

$ kubectl get pod
NAME                         READY   STATUS        RESTARTS   AGE
nginx-dep-76c88d5587-7fjp7   1/1     Running       0          28m
nginx-dep-76c88d5587-7k6gs   0/1     Terminating   0          12m
nginx-dep-76c88d5587-hpnxg   0/1     Terminating   0          37s

終わりに

不具合が発生しているPodはkubectl delete podやデプロイメント自体で落とし上げを行いがちですが、Podを落とさずにラベル名のみを付け替えることで該当のPodを起動したまま同様の操作ができるので覚えておくと役立つと思います。