GNU/Linux >> Linux の 問題 >  >> Linux

Kubernetesでポッドを再起動する方法[K8sのクイックヒント]

ポッドを再起動する必要がある状況になる場合があります。たとえば、ポッドがエラー状態の場合。

再起動ポリシーに応じて、Kubernetes自体が再起動して修正しようとします。

ただし、それでも問題が解決せず、エラーの原因が見つからない場合は、Kubernetes Podを手動で再起動することが、アプリを再び機能させるための最速の方法です。

Kubernetesでポッドを再起動する方法

残念ながら、 kubectlrestartpodコマンドはありません この目的のために。ポッドを再起動する方法は次のとおりです。

  1. ロールアウトポッドが再起動します
  2. レプリカの数のスケーリング

両方の方法を詳しく説明します。

方法1:ロールアウトポッドが再起動します

Kubernetesバージョン1.15以降、デプロイのローリングリスタートを実行できます。

コントローラは一度に1つのポッドを強制終了し、ReplicaSetを使用して、すべてのポッドが再起動時間よりも新しくなるまで新しいポッドをスケールアップします。私の意見では、アプリケーションがダウンしないため、これがポッドを再起動するための最良の方法です。

注: 個々のポッドIPが変更されます。

例を見てみましょう。 2つのポッドで構成されるmy-depという名前のデプロイメントがあります(レプリカが2つに設定されているため)。

[email protected]:~# kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           13s

ポッドの詳細を取得しましょう:

[email protected]:~# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-6d9f78d6c4-8j5fq   1/1     Running   0          47s   172.16.213.255   kworker-rj2   <none>           <none>
my-dep-6d9f78d6c4-rkhrz   1/1     Running   0          47s   172.16.213.35    kworker-rj1   <none>           <none>

次に、次のようなコマンドを使用して、my-depデプロイメントの再起動をロールアウトしましょう。

kubectl rollout restart deployment name_of_deployment

前のコマンドからの展開の名前を覚えていますか?ここで使用してください:

[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted

kubectl get pod -wを使用して、古いポッドが終了し、新しいポッドが作成されるプロセスを確認できます。 コマンド:

[email protected]:~# kubectl get pod -w
NAME                      READY   STATUS              RESTARTS   AGE
my-dep-557548758d-kz6r7   1/1     Running             0          5s
my-dep-557548758d-svg7w   0/1     ContainerCreating   0          1s
my-dep-6d9f78d6c4-8j5fq   1/1     Running             0          69s
my-dep-6d9f78d6c4-rkhrz   1/1     Terminating         0          69s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          69s
my-dep-557548758d-svg7w   0/1     ContainerCreating   0          1s
my-dep-557548758d-svg7w   1/1     Running             0          3s
my-dep-6d9f78d6c4-8j5fq   1/1     Terminating         0          71s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          72s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          74s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          74s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          76s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          76s

ここでポッドを確認すると、詳細がここで変更されていることがわかります:

[email protected]:~# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-kz6r7   1/1     Running   0          42s   172.16.213.43    kworker-rj1   <none>           <none>
my-dep-557548758d-svg7w   1/1     Running   0          38s   172.16.213.251   kworker-rj2   <none>           <none>
方法2.レプリカ数のスケーリング

CI / CD環境では、エラーが発生したときにポッドを再起動するプロセスは、ビルドプロセス全体を再度実行する必要があるため、長い時間がかかる可能性があります。

これを実現するためのより高速な方法は、kubectl scaleを使用することです。 レプリカ番号をゼロに変更するコマンド。ゼロより大きい数を設定すると、Kubernetesは新しいレプリカを作成します。

試してみよう。最初にポッドを確認してください:

[email protected]:~# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-557548758d-kz6r7   1/1     Running   0          11m
my-dep-557548758d-svg7w   1/1     Running   0          11m

展開情報を取得します:

[email protected]:~# kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           12m

次に、レプリカ番号をゼロに設定します。

[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled

そして、それを2に戻します:

[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled

今すぐポッドを確認してください:

[email protected]:~# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-557548758d-d2pmd   1/1     Running   0          10s
my-dep-557548758d-gprnr   1/1     Running   0          10s

Kubernetesポッドを正常に再起動しました。

上記の方法のいずれかを使用して、エンドユーザーに影響を与えることなくアプリをすばやく安全に動作させます。

この演習を行った後、コアの問題を見つけて修正してください。ポッドを再起動しても 根本的な問題を修正します。

このKubernetesのヒントが気に入っていただければ幸いです。もっと購読することを忘れないでください。

Rakesh Jain
DevOps Professional | RHCA |ジェンキンス| Git | Docker | Kubernetes | Ansible |プロメテウス| Grafana | AWSクラウド

Linux
  1. 最初のポッドをKubernetesクラスターにデプロイする方法

  2. 字幕を映画と同期させる方法[クイックヒント]

  3. UbuntuにCurlをインストールする方法[クイックヒント]

  1. Bashで文字列の長さを見つける方法[クイックヒント]

  2. Kubernetesでポッドを削除する方法[K8sのクイックヒント]

  3. Kubernetesデプロイメントを削除する方法[K8sのクイックヒント]

  1. Linuxでグループからユーザーを削除する方法[クイックヒント]

  2. Kubernetesでノードを読み取る方法[K8sのクイックヒント]

  3. Kubernetes ノードで実行された Pod の履歴を取得するには?