Kubernetesベース:podを再起動する方法
4317 ワード
Kubernetesではdocker restartのようなコンテナを再起動するようなpodを再起動するコマンドは提供されていませんが、一般的にrestartPolicyと組み合わせて自動再起動されます.この文章では、たまに手動で再起動する必要がある場合に使用する方法を整理します.
事前準備
環境準備
本明細書では、Kubernetes 1.17を使用して、以下を参照して、高速環境構築を行うことができます.スタンドアロンバージョンまたはクラスタバージョン環境構築 pod準備
次のpodのyamlファイルを使用します.
実行コマンド:kubectl create-f busybox-pod-volume.yaml
実行ログの例を次に示します.
上記podは15秒後に終了するが、podのライフサイクルの状態説明に従ってcompletedの状態として表示され、状態例は以下の通りである.
pod再起動:方式1:replaceコマンドで置き換える
以前の起動時に使用したyamlファイルがあることを前提に、forceオプションとreplaceを使用して再起動できます.
結果から,この方式が実際に置き換えられるプロセスは,削除してから再作成するプロセスであることがわかる.
pod再起動:方式2:yamlファイルのないreplace方法
実行コマンド:kubectl get pod名前-nネーミングスペース名-o yaml|kubectl replace--force-f-
yamlファイルがない場合は-o yamlを使用して生成し、replaceを行い、サンプルログを次のように実行します.
pod再起動:方式3:再作成
上記replaceコマンドの手動実行に相当し、podに基づいてyamlファイルを生成して作成することができ、氏成が作成したyamlファイル
次にpodを削除します
podを再作成します
pod再起動:方式4:restartPolicyの設定
Deploymentを使用しているか、restartPolicyの設定がNeverではないことを前提としています.例えばAlwaysです.例は以下の通りです.
実際に使ってみると、このrestartPolicyの作用でpodがcompletedになったときにすぐに再起動されることがわかります
pod再起動:方式5:Podを直接削除する
前提:Deploymentなどを使用する場合、podの上にまた1階を閉じることに相当するので、この場合podを直接削除すると、Deploymentがポリシーに従って管理制御し、一般的に直接削除すればよいし、replicaを調整して類似の効果を実現することもできる.
事前準備
環境準備
本明細書では、Kubernetes 1.17を使用して、以下を参照して、高速環境構築を行うことができます.
次のpodのyamlファイルを使用します.
[root@host131 config]# cat busybox-pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: busybox-container
image: busybox:latest
command: ["sleep", "15"]
restartPolicy: Never
[root@host131 config]#
実行コマンド:kubectl create-f busybox-pod-volume.yaml
実行ログの例を次に示します.
[root@host131 ~]# kubectl get pods
No resources found in default namespace.
[root@host131 ~]# kubectl create -f busybox-pod-test.yaml
pod/test-pod created
[root@host131 ~]#
上記podは15秒後に終了するが、podのライフサイクルの状態説明に従ってcompletedの状態として表示され、状態例は以下の通りである.
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 57s
[root@host131 ~]#
pod再起動:方式1:replaceコマンドで置き換える
以前の起動時に使用したyamlファイルがあることを前提に、forceオプションとreplaceを使用して再起動できます.
[root@host131 ~]# kubectl replace --force -f busybox-pod-test.yaml
pod "test-pod" deleted
pod/test-pod replaced
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 ContainerCreating 0 3s
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 4s
[root@host131 ~]#
結果から,この方式が実際に置き換えられるプロセスは,削除してから再作成するプロセスであることがわかる.
pod再起動:方式2:yamlファイルのないreplace方法
実行コマンド:kubectl get pod名前-nネーミングスペース名-o yaml|kubectl replace--force-f-
yamlファイルがない場合は-o yamlを使用して生成し、replaceを行い、サンプルログを次のように実行します.
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 5m15s
[root@host131 ~]# kubectl get pod test-pod -n default -o yaml | kubectl replace --force -f -
pod "test-pod" deleted
pod/test-pod replaced
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 13s
[root@host131 ~]#
pod再起動:方式3:再作成
上記replaceコマンドの手動実行に相当し、podに基づいてyamlファイルを生成して作成することができ、氏成が作成したyamlファイル
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 3m13s
[root@host131 ~]# kubectl get pod test-pod -n default -o yaml >ttt.yml
[root@host131 ~]#
次にpodを削除します
[root@host131 ~]# kubectl delete pod test-pod
pod "test-pod" deleted
[root@host131 ~]# kubectl get pods
No resources found in default namespace.
[root@host131 ~]#
podを再作成します
[root@host131 ~]# kubectl create -f ttt.yml
pod/test-pod created
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 6s
[root@host131 ~]#
pod再起動:方式4:restartPolicyの設定
Deploymentを使用しているか、restartPolicyの設定がNeverではないことを前提としています.例えばAlwaysです.例は以下の通りです.
[root@host131 ~]# cat busybox-pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: busybox-container
image: busybox:latest
command: ["sleep", "15"]
restartPolicy: Always
[root@host131 ~]#
実際に使ってみると、このrestartPolicyの作用でpodがcompletedになったときにすぐに再起動されることがわかります
[root@host131 ~]# kubectl get pods
No resources found in default namespace.
[root@host131 ~]# kubectl create -f busybox-pod-test.yaml
pod/test-pod created
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 7s
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 25s
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 1 28s
[root@host131 ~]#
pod再起動:方式5:Podを直接削除する
前提:Deploymentなどを使用する場合、podの上にまた1階を閉じることに相当するので、この場合podを直接削除すると、Deploymentがポリシーに従って管理制御し、一般的に直接削除すればよいし、replicaを調整して類似の効果を実現することもできる.