Kubernetesポッド障害の分類およびトラブルシューティング方法

ポッドコンセプト

  • ポッドは協力的なスケジューリングを扱う最小のクラスタkubernetesの導入と管理、コラボレーションの基本単位です。
  • ポッドは、1つ以上の容器のセット、1またはサービスのセット(プロセス)抽象のセットです。
  • ポッド保管及び(仮想マシンは単に仮想マシン論理ではなく、として理解することができる)ネットワークを共有することができます。
  • ポッドUIDが再生されるときライフサイクルは、同等のポッドにより置換されたときに一意ポッド終了を識別するためのUIDを使用して作成された後。

最も一般的に使用されるKubernetesポッドドッカーコンテナは、ポッドはもちろん、また、そのようなRKT、同様podmanとして、実行する他のコンテナをサポートし、実行します。

ポッドKubernetesクラスタは2つの主な目的のために使用することができます。

  • ポッドは、単一の容器を実行します。「各ポッド容器は、」例Kubernetesに使用される最も一般的なモデルであり、この場合には、単一の容器ポッドラッパーと見なすことができ、ポッドKubernetes直接管理ではなく、容器。
  • ポッドの協力、複数の容器を実行します。ポッドはしっかりリソースの複数の容器共存組成アプリケーションを共有する必要性によって結合包装することができます。これらの共位置サービス単位容器は、単一の凝集を形成することができる、コンテナファイルは、パブリックに共有ボリュームから供給され、別々の「予告編」容器又はリフレッシュ更新、これらのファイルの他のれます。ポッドのストレージリソースと管理エンティティとしてパッケージ化され、これらのコンテナ。

ポッドコントローラ

コントローラは、作成および管理する複数のポッド、コピーをし、ライン上の管理、およびクラスタ内で自己修復機能を提供することができます。ノードに障害が発生した場合、例えば、コントローラは自動的にPODが異なるノード上にアバター同じスケジュールを置き換えることができます。

一つ以上のポッドを含むコントローラいくつかの例を含みます。

  • 展開は、最も一般的なコントローラをkubernetes。ステートレスアプリケーションの場合は実行されています
  • ステートフルなアプリケーションを実行するためのStatefulset
  • お使いのコンピュータ上のデーモンのように行動DaemonSet、それは] [クラスタストレージ、ログ収集と監視デーモンを実行することができます

コントローラモジュールは、一般的に、あなたがそれを担当して作成するために提供ポッドポッドを使用していました。

ポッド障害の分類


 

  • 保留状態は、ポッドにありました
  • ポッドは待ちの状態になっています
  • ポッドは、状態ContainerCreatingにありました
  • ImagePullBackOffにおけるポッドステータス
  • CrashLoopBackOffにおけるポッドステータス
  • エラーでポッドステータス
  • ポッドは、状態の終端にありました
  • ポッドの状態は不明です

ポッドのトラブルシューティングコマンド


 

  • kubectl GETポッド<ポッド名> -o YAML#ビューポッドが正しく設定されています
  • ポッド<ポッド-name>を記述しkubectl#ビューは、イベント情報ポッドを詳細に説明しました
  • kubectlログ<ポッド名> [-c <コンテナ名>]#は、コンテナのログを表示

ポッド障害の問題やトラブルシューティング方法


 

ポッドはしてきた保留中の状態

ポッドYAMLファイルはKubernetesに提出されたことがステータス手段を保留、APIオブジェクトが作成され、Etcdそれらに保存されています。しかし、何らかの理由で、いくつかのコンテナ内のポッドが正常に作成することができません。例えば、(PODがkubectl流れる電流イベントを表示ポッドコマンドを記述し、次に何スケジュールが存在しない理由を決定することができる)失敗スケジューリング。考えられる原因:;のHostPortは、(一般的に推奨されるサービスのオープンサービスポート)を占有しているリソース不足は、(クラスタ内のすべてのノードのCPU、メモリ、GPUおよびポッド要求の他のリソースを満たされていません)。

ポッドにあった待機またはContainerCreating状態

まずkubectlて、現在のビューのイベントはポッドポッドコマンドを記述しています。考えられる理由は以下のとおりです。

図1に示すように、このような外国の引き上げミラー元を取ることができない画像アドレス構成エラー(gcr.io)、秘密鍵設定エラーミラーとして、故障を引くミラーは、ミラーが適切kubeletに調整することができる(引き出しには大きすぎる-image、プル進捗-期限と-runtime-要求-timeoutオプション)など。

あなたが割り当てたIPアドレスことはできませんが、ポッドは、ネットワークを構成することはできません:2、CNIネットワーク・エラーは、一般的に次のような、設定CNIネットワークプラグインをチェックする必要があります。

コンテナの正しいパラメータで設定されている場合3、コンテナが起動できません、あなたは正しいパッケージミラーをチェックする必要がありますか

失敗4は、ポッドサンドボックスを作成し、おそらくディスクに不良セクタ(入力/出力エラー)に、kubeletログを参照してください。

ポッドはでてきましたImagePullBackOff状態

通常、構成キーの名前は、構成エラーまたはプライベートミラーリングエラーを反映しました。この状況は、ミラードッキングウィンドウは、通常のプルを引くことを確認するために使用することができます。

プライベートキーは設定エラーをミラーリングされているか、設定されていない場合は、次のように確認してください。

1、クエリドッキングウィンドウ・レジストリの秘密のタイプ

#表示ドッキングウィンドウ、レジストリの秘密
$ kubectl GET秘密私の秘密-o YAML | grepの 'dockerconfigjson:' | awkは '{$ NFを印刷}' | BASE64 -d

ドッキングウィンドウ、レジストリタイプシークレットを作成します。2.

#まずドッキングウィンドウ-レジストリタイプシークレットを作成します
$ kubectlは= DOCKER_REGISTRY_SERVER --docker-ユーザ名= DOCKER_USER --docker-パスワード= DOCKER_PASSWORD --docker-メール= DOCKER_EMAILを秘密ドッキングウィンドウ-レジストリ私の秘密--docker-サーバーを作成します
秘密#は、その後の展開でこれを参照します
スペック:
  コンテナ:
  - 名前:プライベート-REG-コンテナ
    画像:<あなたのプライベート・画像>
  imagePullSecrets:
  - 名前:私の秘密

ポッドはでてきましたCrashLoopBackOff状態

この状態指示器が起動しますが、予期せず終了しました。そして、あなたは最初のログの容器で見ることができます。

コマンドkubectlログとkubectlログ--previousコンテナを終了するには、いくつかの理由を送ることができる、といった:コンテナプロセスが終了すると、ヘルスチェックが終了に失敗した。あなたは、この時点で手がかりを見つけていない場合、それはまた、(容器の中にコマンドを実行kubectl幹部カサンドラ - まだ手掛かりそれはポッドは、Kubeletを表示したり、ドッカーさらなる調査をログノードにログインするためにSSHを必要としないならば、終了理由を確認する猫/var.log/cassandra/system.log)。

ポッドのエラー状態

通常、エラーステータスに説明ポッドエラーが起動中に発生しました。一般的な原因:依存性ConfigMap、秘密、またはPV、存在しません。要求されたリソースは、管理者によって制限セットを超え、そのようLimitRangeなどよりなど;例えばPodSecurityPolicyなどの違反として違反クラスタセキュリティポリシー、;コンテナは、クラスタ内で動作することができませんこのようRDACを開いた後などのリソースは、あなたがServiceAccountのためのconfigureの役割バインディングに必要です。

ポッド終端または不明な状態

開始からV1.5、Kubernetesは、ノードが接触を失い、ポッドが実行されている、削除が、終端または不明な状態としてそれをマークしていないので。ポッドは、これらの状態を削除する3つの方法があります。

クラスタからのノードの削除1.。パブリッククラウドを使用する場合は、KUBE-コントローラ・マネージャーは自動的にVM内の対応するノードを削除削除させていただきます。物理マシン配備クラスタでは、管理者のニーズを手動ノード(kubectlノード削除)を削除します。

2、通常のノードバック。kubeletはその後、削除またはポッドを実行し続けることを決定することができ、通信のKUBE-apiserverポッドでこれらの期待の状態を再確認します。削除ユーザーを強制、ユーザーが実行できる(kubectl削除ポッドは、ポッド名= 0 --force --grace期間)力は、ポッドを削除します。明示的に(例えばVMまたは物理マシンがオフになっているノードなど)停止状態で実際にポッドを知っている限り、この方法を使用することはお勧めできません。特にStatefulSetで簡単にデータの損失やスプリットブレインの問題につながるの削除を強制、ポッドを管理します。

図3に示すように、ポッド異常行動、異常行動は、ここで述べたようなpodSpecの内部を設定するためのコマンドラインパラメータを実行していないように、予想される動作として行わないポッドを指します。これは、一般的にpodSpec YAMLファイルの内容のエラーで、次のような--validate血管の再構成パラメータ、使用して試すことができます(kubectl削除ポッドmypodをして--validate -f mypod.yamlを作成kubectl);あなたはまたpodSpecが右後に作成されたかどうかを確認することができますこのような(kubectl GETポッドmypod -o YAML)として、マニフェストは、ポッドの自動静的再構成を変更しない、kubeletはinotifyの/ etc / kubernetes /マニフェストディレクトリを使用して検出機構(-POD-マニフェストパスオプションkubeletで指定することができる)静的です変更のポッド、およびファイルの変更後に適切なポッドを再作成します。しかし、時には自動的ポッドポッドはマニフェスト静的に変更し、新しいシナリオを作成していないことが判明し、この時点では、簡単な修正はKubeletを再起動することで合格しています。

未知の例外ポッド状態が状態kubelet KUBE-apiserverに報告することを継続できないことを意味し、それはマスターノード(マスターとKubelet)の間の通信の問題がある可能性があります。

参考リンク


 

おすすめ

転載: www.cnblogs.com/winnerREN/p/12131364.html