web-dev-qa-db-ja.com

ポッド内のコンテナーを再起動します

ポッドtest-1495806908-xn5jnに2つのコンテナがあります。 container-testという名前の1つを再起動したいと思います。ポッド内の単一のコンテナを再起動することはできますか?そうでない場合、ポッドを再起動するにはどうすればよいですか?

ポッドはdeployment.yamlを使用して作成されました:

kubectl create -f deployment.yaml
58
s5s

単一のコンテナを再起動することは可能ですか

kubectl経由ではなく、クラスターのセットアップに応じて「チート」およびdocker kill the-sha-goes-hereできます。これにより、kubeletが「失敗した」コンテナを再起動します(もちろん、ポッドはそれがすべきことだと言っています)

ポッドを再起動するにはどうすればよいですか

それはPodの作成方法によって異なりますが、指定したPod名に基づいてReplicaSetの監視下にあるように見えるため、kubectl delete pod test-1495806908-xn5jnとkubernetesはその場所に新しいものを作成できます(新しいPodの名前は異なるため、kubectl get podstest-1495806908-xn5jnを再び返すことを期待しないでください)

80

ポッドを削除してKubernetesに再作成させる代わりに、特定のコンテナーを再起動する場合があります。

kubectl exec POD_NAME -c CONTAINER_NAME rebootをすることは私のために働いた。

31
Zsolt Katona

ポッドとコンテナーは両方とも一時的です。次のコマンドを使用して特定のコンテナーを停止すると、k8sクラスターが新しいコンテナーを再起動します。

kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"

これにより、SIGTERMシグナルがプロセス1に送信されます。プロセス1は、コンテナで実行されているメインプロセスです。他のすべてのプロセスはプロセス1の子になり、プロセス1が終了すると終了します。送信できる他のシグナルについては、 kill manpage を参照してください。

17
ROY

Kubernetesを使用する理由は、ポッド内のコンテナのライフサイクルをあまり気にする必要がないように、コンテナを管理するためです。

replica setを使用するdeploymentセットアップがあるため。 kubectl delete pod test-1495806908-xn5jnを使用してポッドを削除できます。kubernetesは、ダウンタイムなしで2つのコンテナを持つ新しいポッドの作成を管理します。ポッド内の単一のコンテナーを手動で再起動しようとすると、kubernetesの利点がすべて無効になります。

11
Innocent Anigbo

非常に便利なコマンドラインを使用して、統合ポッドに新しいイメージを強制的に再展開します。
Alpineコンテナはすべて、PID 5で「維持」コマンドを実行していることに気付きました。したがって、SIGTERM信号を送信すると、コンテナが停止します。 imagePullPolicyAlwaysに設定すると、コンテナを戻すときにkubeletが最新のイメージを再プルします。

kubectl exec -i [pod name] -c [container-name] -- kill -15 5
2
Alexis LEGROS

DockerfileのCMD/ENTRYPOINTで指定されたプロセスを強制終了するとうまくいきます。 (コンテナは自動的に再起動します)

コンテナでの再起動は許可されていなかったため、この回避策を使用する必要がありました。

2
Kevin

上記のすべての回答では、ポッドの削除について言及していますが、同じサービスのポッドが多数ある場合は、それぞれを削除するのは面倒です...

したがって、次の解決策を提案しますrestart

  • 1)スケールをゼロに設定します:

     kubectl scale deployment <<name>> --replicas=0 -n service 
    

    上記のコマンドは、<<name>>という名前のすべてのポッドを終了します

  • 2)ポッドを再度起動するには、レプリカを0以上に設定します

    kubectl scale deployment <<name>> --replicas=2 -n service
    

    上記のコマンドは、2つのレプリカでポッドを再び起動します。

2
Ajay Reddy

coredns podに問題がありました。そのようなpodを削除しました

kubectl delete pod -n=kube-system coredns-fb8b8dccf-8ggcf

そのポッドは自動的に再起動します。

1
j3ffyang