[kubernates]Kubernetes Podを再起動するいくつかの方法
4733 ワード
前言
dockerを使用する過程で、
方法1
最新のyamlファイルがあります.
yamlファイルがある場合、
方法2
yamlファイルはありませんが、Deploymentオブジェクトを使用しています.
Deploymentオブジェクトは直接操作するPodオブジェクトではなく、操作するReplicaSetオブジェクトであるため、ReplicaSetオブジェクトはコピーの数の定義とPodテンプレートから構成されます.このコマンドは、ReplicaSetの数を0にscaleし、scaleを1にするとPodが再起動します.
方法3
同様にyamlファイルはありませんが、Deploymentオブジェクトを使用しています.
コマンド
方法4
yamlファイルがなく、直接使用する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を再起動してもプログラムのバグは修復されません.プログラムの予期せぬ終了を解決するには、最終的にバグを修復する必要があります.