ポッドtest-1495806908-xn5jn
に2つのコンテナがあります。 container-test
という名前の1つを再起動したいと思います。ポッド内の単一のコンテナを再起動することはできますか?そうでない場合、ポッドを再起動するにはどうすればよいですか?
ポッドはdeployment.yaml
を使用して作成されました:
kubectl create -f deployment.yaml
単一のコンテナを再起動することは可能ですか
kubectl
経由ではなく、クラスターのセットアップに応じて「チート」およびdocker kill the-sha-goes-here
できます。これにより、kubeletが「失敗した」コンテナを再起動します(もちろん、ポッドはそれがすべきことだと言っています)
ポッドを再起動するにはどうすればよいですか
それはPodの作成方法によって異なりますが、指定したPod名に基づいてReplicaSetの監視下にあるように見えるため、kubectl delete pod test-1495806908-xn5jn
とkubernetesはその場所に新しいものを作成できます(新しいPodの名前は異なるため、kubectl get pods
がtest-1495806908-xn5jn
を再び返すことを期待しないでください)
ポッドを削除してKubernetesに再作成させる代わりに、特定のコンテナーを再起動する場合があります。
kubectl exec POD_NAME -c CONTAINER_NAME reboot
をすることは私のために働いた。
ポッドとコンテナーは両方とも一時的です。次のコマンドを使用して特定のコンテナーを停止すると、k8sクラスターが新しいコンテナーを再起動します。
kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"
これにより、SIGTERM
シグナルがプロセス1に送信されます。プロセス1は、コンテナで実行されているメインプロセスです。他のすべてのプロセスはプロセス1の子になり、プロセス1が終了すると終了します。送信できる他のシグナルについては、 kill manpage を参照してください。
Kubernetesを使用する理由は、ポッド内のコンテナのライフサイクルをあまり気にする必要がないように、コンテナを管理するためです。
replica set
を使用するdeployment
セットアップがあるため。 kubectl delete pod test-1495806908-xn5jn
を使用してポッドを削除できます。kubernetesは、ダウンタイムなしで2つのコンテナを持つ新しいポッドの作成を管理します。ポッド内の単一のコンテナーを手動で再起動しようとすると、kubernetesの利点がすべて無効になります。
非常に便利なコマンドラインを使用して、統合ポッドに新しいイメージを強制的に再展開します。
Alpineコンテナはすべて、PID 5で「維持」コマンドを実行していることに気付きました。したがって、SIGTERM
信号を送信すると、コンテナが停止します。 imagePullPolicy
をAlways
に設定すると、コンテナを戻すときにkubeletが最新のイメージを再プルします。
kubectl exec -i [pod name] -c [container-name] -- kill -15 5
DockerfileのCMD
/ENTRYPOINT
で指定されたプロセスを強制終了するとうまくいきます。 (コンテナは自動的に再起動します)
コンテナでの再起動は許可されていなかったため、この回避策を使用する必要がありました。
上記のすべての回答では、ポッドの削除について言及していますが、同じサービスのポッドが多数ある場合は、それぞれを削除するのは面倒です...
したがって、次の解決策を提案しますrestart:
1)スケールをゼロに設定します:
kubectl scale deployment <<name>> --replicas=0 -n service
上記のコマンドは、<<name>>
という名前のすべてのポッドを終了します
2)ポッドを再度起動するには、レプリカを0以上に設定します
kubectl scale deployment <<name>> --replicas=2 -n service
上記のコマンドは、2つのレプリカでポッドを再び起動します。
coredns
podに問題がありました。そのようなpodを削除しました
kubectl delete pod -n=kube-system coredns-fb8b8dccf-8ggcf
そのポッドは自動的に再起動します。