[kubernates]Kubernetes Podを再起動するいくつかの方法


前言
dockerを使用する過程で、docker restart {container_id}を使用して容器を再起動することができますが、kubernetesでは再起動コマンドはありません(kubectl restart {podname}はありません)、時には私たちのPodにBugが意外に終了し、Podを再起動する必要がありますが、yamlファイルがない場合は、良い方法はありません.そこでPodを再起動する方法をいくつかまとめました.
方法1
最新のyamlファイルがあります.
yamlファイルがある場合、kubectl replace --force -f xxxx.yamlを直接使用してPodのAPIオブジェクトを強制的に置換し、再起動の目的を達成することができる.次の図を示します.
[root@test-129-70 viua]# kubectl replace --force -f viua.yml
namespace "viua" deleted
service "viua-app-cms" deleted
deployment.apps "viua-app-cms" deleted
service "viua-app-command" deleted
deployment.apps "viua-app-command" deleted
service "viua-show-service" deleted
deployment.apps "viua-show-service" deleted
service "viua-skills-service" deleted
deployment.apps "viua-skills-service" deleted
namespace/viua replaced
secret/xa-harbor-ca replaced
service/viua-app-cms replaced
deployment.apps/viua-app-cms replaced
service/viua-app-command replaced
deployment.apps/viua-app-command replaced
service/viua-show-service replaced
deployment.apps/viua-show-service replaced
service/viua-skills-service replaced
deployment.apps/viua-skills-service replaced

方法2
yamlファイルはありませんが、Deploymentオブジェクトを使用しています.
  • kubectl scale deploy viua-app-cms --replicas=0 -n viua
  • kubectl scale deploy {deploy } --replicas=0 -n {namespace}
  • [root@test-129-70 pvd]# kubectl get deploy -n viua
    NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
    viua-app-cms          1/1     1            1           48m
    viua-app-command      1/1     1            1           48m
    viua-show-service     1/1     1            1           48m
    viua-skills-service   1/1     1            1           48m
    [root@test-129-70 pvd]# kubectl scale deploy viua-app-cms --replicas=0 -n viua
    deployment.apps/viua-app-cms scaled
    [root@test-129-70 pvd]# kubectl get deploy -n viua
    NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
    viua-app-cms          0/0     0            0           49m
    viua-app-command      1/1     1            1           49m
    viua-show-service     1/1     1            1           49m
    viua-skills-service   1/1     1            1           49m
    [root@test-129-70 pvd]# kubectl get po -n viua
    NAME                                   READY   STATUS    RESTARTS   AGE
    viua-app-command-95f7b6f7f-rb7mh       1/1     Running   0          49m
    viua-show-service-85565b9dcf-ss8qp     1/1     Running   0          49m
    viua-skills-service-65447f9b94-fhqhr   1/1     Running   0          49m
    

    Deploymentオブジェクトは直接操作するPodオブジェクトではなく、操作するReplicaSetオブジェクトであるため、ReplicaSetオブジェクトはコピーの数の定義とPodテンプレートから構成されます.このコマンドは、ReplicaSetの数を0にscaleし、scaleを1にするとPodが再起動します.
    方法3
    同様にyamlファイルはありませんが、Deploymentオブジェクトを使用しています.
    コマンドkubectl delete pod {podname} -n {namespace}という方法を使うと簡単に乱暴になり、直接Podを削除します.Kubernetesは宣言式APIなので削除すると、Pod APIオブジェクトが予想と一致しないので、自動的に再作成して予想と一致しますが、ReplicaSetが管理するPodオブジェクトが多いと、いちいち手動で削除するのは面倒です.kubectl delete replicaset {rs_name} -n {namespace}コマンドを使用してReplicaSetを削除できます
    方法4
    yamlファイルがなく、直接使用するPodオブジェクト.
    使用コマンドkubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -この場合、yamlファイルがなく、Podオブジェクトが起動しているため、直接削除したりscaleから0にしたりすることはできませんが、上記のコマンドで再起動できます.このコマンドはgetが現在実行しているpodのyaml宣言を意味し、パイプはkubectl replaceコマンドの標準入力にリダイレクト出力され、再起動の目的を達成する.
    まとめ
    オブジェクトを再起動するには、複数のオブジェクトに適用されるため、kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -という方法が最も推奨されます.また、Podを再起動してもプログラムのバグは修復されません.プログラムの予期せぬ終了を解決するには、最終的にバグを修復する必要があります.