Kubernetes アプリケーションの問題に対する一般的なトラブルシューティングのアイデア

Kubernetes アプリケーションの問題に対する一般的なトラブルシューティングのアイデア

[[428799]]

この記事はWeChatの公開アカウント「Mingge's IT Essays」から転載したもので、著者はIT Minggeです。この記事を転載する場合は、Mingge の IT Essays 公開アカウントにご連絡ください。

みなさんこんにちは、ミン兄弟です!

この記事では、Kubernetes アプリケーションの問題に対する一般的なトラブルシューティングのアイデアを紹介し、そのような問題に対するオンライン トラブルシューティングの事例を共有し、読者の利益のためにその背後にある関連知識を要約します。お互いに励まし合いましょう!

1. 技術動向の背景

ビッグデータのさらなる発展における 1 つのトレンドは、ビッグデータとクラウド コンピューティングのさらなる統合 (最下層でストレージとコンピューティングを分離したアーキテクチャの優先、最下層でオブジェクト ストレージの優先など)、展開アーキテクチャでのハイブリッド クラウドとマルチクラウドのシナリオのサポート、クラウド コンピューティングの採用とクラウド ネイティブへの移行であることがわかっています。

基盤となる特定のテクノロジー スタックに対応して、さまざまな主流のビッグ データ プラットフォームと基盤となるビッグ データ コンポーネントが、Kubernetes と Docker に代表されるコンテナー シリーズのテクノロジー スタックをサポートし始めているという事実に反映されています。

したがって、ビッグデータ実践者は、スキル不足のためにビッグデータ関連の問題のトラブルシューティングに困ることがないよう、継続的にスキルセットを拡大し、Kubernetes と Docker の基本知識と一般的なコマンドを習得する必要があります。

技術的観点から見たビッグデータ産業の発展動向

ここでは、ビッグデータ プラットフォームにおける Docker コンテナ関連の障害のトラブルシューティングのケース スタディを共有し、読者の利益のために、このような問題の背後にある知識とトラブルシューティングのアイデアを紹介したいと思います。お互いに励まし合いましょう!

2 問題の症状

StarRing ビッグデータ プラットフォーム TDH では、Zookeeper サービスを正常に起動できません。 TDH では、各サービスは実際には k8s の制御下にある Docker コンテナ内で実行されていることがわかっています。 kubectl get pods -owide |grep -i zoo を実行すると、次の図に示すように、対応するポッドのステータスが CrashLoopBackOff であることがわかります。

ポッドクラッシュループバックオフ

3 舞台裏: CrashLoopBackOff とは何ですか?

ポッドは CrashloopBackOff 状態です。これは、ポッド内のコンテナが起動され、その後クラッシュし、その後自動的に再起動されましたが、再びクラッシュし、というように (起動、クラッシュ、起動、クラッシュ) というサイクルが繰り返されていることを意味します。

注: ポッド内のコンテナが自動的に再起動される理由は、実際には PodSpec の restartPolicy によって指定されます。デフォルトの構成項目は「常に」です。これは、障害発生後に自動的に再起動することを意味します。

  • PodSpec には、ポッド内のすべてのコンテナに適用される Always、OnFailure、Never の値を持つ restartPolicy フィールドがあり、デフォルト値は Always です。
  • restartPolicy は、同じノード上の kubelet によるコンテナの再起動のみを参照します (したがって、ポッドが別のノードで再スケジュールされると、再起動回数はリセットされます)。
  • kubelet によって再起動された失敗したコンテナは、5 分を上限とする指数バックオフ遅延 (10 秒、20 秒、40 秒…) で再起動され、正常に実行されてから 10 分後にリセットされます。

4 舞台裏: CrashLoopBackOff エラーが発生するのはなぜですか?

ポッドの CrashLoopBackOff エラーは非常によく発生します。このエラーはさまざまな理由で発生する可能性があります。主な理由は次のとおりです。

  • Kubernetes クラスターのデプロイメントに問題があります。
  • ポッドまたはポッドの下のコンテナの一部のパラメータが正しく構成されていません。
  • ポッド内のコンテナで実行されているアプリケーションは、複数回の再起動後も失敗した状態のままになります。

5 舞台裏: ポッド コンテナの基盤となるアプリケーションのトラブルシューティング方法

ポッド コンテナの下部で実行されているアプリケーションが失敗した場合、一般的なトラブルシューティングのアイデアは次のようになります。

  • ステップ1: コマンドkubectl describe pod xxxを使用してポッドの詳細情報を取得します。
  • ステップ2: kubectl logs xxx コマンドを使用して、ポッドコンテナの基盤となるアプリケーションのログを表示します。
  • ステップ3: ポッドコンテナの基盤となるアプリケーションの他のログファイルをさらに取得して表示し、問題の原因をさらに詳しく調べます。

質問がある友達もいるかもしれません。上記の手順 2 と 3 はどちらも、ポッド コンテナーの基盤となるアプリケーションのログを表示することです。違いは何ですか?

実際、手順 2 と 3 では、最下層にあるアプリケーションの異なるログ ファイルが表示されます。基礎となる詳細は、Kubernetes のログ メカニズムと、ポッドの最下層にあるアプリケーションがログを書き込む場所に関連しています。

  • kubectl logs は、コンテナの標準出力 stdout と標準エラー stderr のログをポッドの下部に表示します。
  • アプリケーションによって他のファイルに書き込まれたログは、kubectl ログでは表示できません。ログ ファイルのパスを取得して自分で表示する必要があります。
  • K8s では、アプリケーションがコンテナの標準出力 stdout と標準エラー stderr にログを書き込むことを推奨しています。
  • コンテナ内のアプリケーションは、コンテナの標準出力 stdout と標準エラー stderr にログを直接書き込むことができます。
  • コンテナ内のアプリケーションがコンテナの標準出力 stdout と標準エラー stderr にログを直接書き込むことができない、または書き込むのが不便な場合は、サイドカー モードを使用して、アプリケーションのコンテナが配置されているポッドに別のサイドカー コンテナをデプロイできます。サイドカー コンテナーは、アプリケーションのログ ファイルを読み取り、標準出力 stdout と標準エラー stderr に出力する役割を担います。
  • 最下層では、k8s は各ノードで実行されている kubelet を通じてノード内のすべてのコンテナの stdout および stderr ログを収集し、それらを kubelet によって管理されるローカル ファイルに書き込みます。
  • ユーザーが kubectl logs xx コマンドを実行すると、コマンドは最下層のコンテナの対応するノード上の kubelet を呼び出して、ログを取得するために管理しているローカル ログ ファイルを取得します。
  • ユーザーは kubectl log xxx を使用してアプリケーション ログを取得します。これにより、k8s クラスター内の対応するノードにログインして対応するログを表示するという面倒な操作が省かれ、優れたトラバーサルが実現します。

追伸ここで説明するのは、k8s コンテナで実行されているアプリケーションのログです。アプリケーション ログに加えて、実際には、docker、kubelet、kube-proxy、kube-apiserver、kube-scheduler、etcd など、k8s クラスター全体のシステム コンポーネントのログが多数あります。

6. トラブルシューティングとレビュー

上記の一般的なトラブルシューティングのアイデアに従って、CrashLoopBackOff の問題のトラブルシューティング プロセスを確認しましょう。

6.1: トラブルシューティングの確認: kubeclt describe pod xxx コマンドを使用してポッドの詳細情報を取得します。

以下はコマンド出力の部分的なスクリーンショットです。出力のイベント部分から、ポッドがノードに正常に割り当てられ、イメージが正常にプルされ、コンテナが正常に作成されて起動されたが、コンテナ内のプログラムが実行に失敗し、最終的にポッドが BackOff 状態になったという情報を取得できます。

kubectl-describe-pod

このコマンドの詳細な出力は次のとおりです。

  1. kubectl はポッド zookeeper-server-license-7fbfc544fc-h8nn9 を記述します。
  2. 名前: zookeeper-server-license-7fbfc544fc-h8nn9
  3. 名前空間:デフォルト 
  4. 優先度: 0
  5. 優先度クラス名: <なし>
  6. ノード: uf30-tdh3-regression/10.20.159.115
  7. 開始時間: 2021年10月11日(月) 16:56:30 +0800
  8. ラベル: name =zookeeper-server-license
  9. ポッドテンプレートハッシュ=3969710097
  10. podConflictName=zookeeper サーバー ライセンス
  11. 注釈: <なし>
  12. ステータス: 実行中
  13. IP: 10.20.159.115
  14. 制御: ReplicaSet/zookeeper-server-license-7fbfc544fc
  15. コンテナ:
  16. 動物園管理サーバライセンス:
  17. コンテナ ID: docker://0887c97ab185f1b004759e8c85b48631f511cb43088424190c3f27c715bb8414
  18. 画像: transwarp/zookeeper:transwarp-6.0.2-final
  19. イメージ ID: docker-pullable://transwarp/zookeeper@sha256:19bf952dedc70a1d82ba9dd9217a2b7e34fc018561c2741d8f6065c0d87f8a10
  20. ポート: <なし>
  21. 引数:
  22. ブート
  23. ライセンスノード
  24. 状態: 終了
  25. 理由: エラー
  26. 終了コード: 1
  27. 開始: 2021年10月11日(月) 17:12:09 +0800
  28. 終了: 2021年10月11日(月) 17:12:10 +0800
  29. 最終状態: 終了
  30. 理由: エラー
  31. 終了コード: 1
  32. 開始: 2021年10月11日(月) 17:07:07 +0800
  33. 終了: 2021年10月11日(月) 17:07:08 +0800
  34. 準備完了: False  
  35. 再起動回数: 8
  36. 環境:
  37. ZOOKEEPER_CONF_DIR: /etc/license/conf
  38. マウント:
  39. /etc/license/confからconf (rw)
  40. /etc/localtime タイムゾーンから(rw)
  41. /etc/tos/conf を tosから(rw)
  42. /etc/transwarp/confからtranswarphosts (rw)
  43. /usr/lib/transwarp/plugins プラグインから(rw)
  44. /var/license データから(rw)
  45. /var/log/license/ ログから(rw)
  46. /var/run/secrets/kubernetes.io/serviceaccountから デフォルト-token-g42jt (ro)
  47. mountbindからの/vdir (rw)
  48. 条件:
  49. タイプ ステータス
  50. 初期化済み  
  51. 準備完了  
  52. PodScheduled  
  53. ボリューム:
  54. データ:
  55. タイプ: HostPath (ベアホストディレクトリボリューム)
  56. パス: /var/license
  57. ホストパスタイプ:
  58. conf:
  59. タイプ: HostPath (ベアホストディレクトリボリューム)
  60. パス: /etc/license/conf
  61. ホストパスタイプ:
  62. ログ:
  63. タイプ: HostPath (ベアホストディレクトリボリューム)
  64. パス: /var/log/license/
  65. ホストパスタイプ:
  66. マウントバインド:
  67. タイプ: HostPath (ベアホストディレクトリボリューム)
  68. パス: /transwarp/mounts/license
  69. ホストパスタイプ:
  70. プラグイン:
  71. タイプ: HostPath (ベアホストディレクトリボリューム)
  72. パス: /usr/lib/transwarp/plugins
  73. ホストパスタイプ:
  74. タイムゾーン:
  75. タイプ: HostPath (ベアホストディレクトリボリューム)
  76. パス: /etc/localtime
  77. ホストパスタイプ:
  78. トランスワーフォスト:
  79. タイプ: HostPath (ベアホストディレクトリボリューム)
  80. パス: /etc/transwarp/conf
  81. ホストパスタイプ:
  82. 利用規約:
  83. タイプ: HostPath (ベアホストディレクトリボリューム)
  84. パス: /etc/tos/conf
  85. ホストパスタイプ:
  86. デフォルト-token-g42jt:
  87. タイプ: シークレット (シークレット設定されたボリューム)
  88. シークレット名:デフォルト-token-g42jt
  89. オプション: false  
  90. QoS クラス: BestEffort
  91. ノードセレクター: zookeeper-server-license= true  
  92. 許容範囲: node.kubernetes.io/ not -ready:NoExecute300 秒間有効
  93. node.kubernetes.io/unreachable:NoExecute が300 秒間続く
  94. イベント:
  95. タイプ 理由 年齢送信元 メッセージ
  96. ---- ------ ---- ---- -------  
  97. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「default-token-g42jt」MountVolume.SetUp が成功しました 
  98. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「conf」MountVolume.SetUp が成功しました 
  99. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「tos」MountVolume.SetUp が成功しました 
  100. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「mountbind」MountVolume.SetUp が成功しました 
  101. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「transwarphosts」MountVolume.SetUp が成功しました 
  102. 正常 SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「log」MountVolume.SetUp が成功しました 
  103. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「plugin」MountVolume.SetUp が成功しました 
  104. 正常 SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「data」MountVolume.SetUp が成功しました 
  105. 正常な SuccessfulMountVolume 15m kubelet、uf30-tdh3-regressionボリューム「timezone」MountVolume.SetUp が成功しました 
  106. 通常スケジュール 15 分デフォルト-scheduler zookeeper-server-license-7fbfc544fc-h8nn9uf30-tdh3-regression正常に割り当てました
  107. 通常 15m をプルしました (15m で x3) kubelet、uf30-tdh3-regression イメージ「transwarp/zookeeper:transwarp-6.0.2-final」を正常にプルしました 
  108. 通常 15m 作成 (15m で x3) kubelet、uf30-tdh3-regression コンテナ作成
  109. 正常 15m 開始 (15m で x3) kubelet、uf30-tdh3-regression コンテナを開始
  110. 通常のプル 15m (15m を超える x4) kubelet、uf30-tdh3-regression プル イメージ"transwarp/zookeeper:transwarp-6.0.2-final"  
  111. 警告バックオフ 44 秒 (15 分で x70) kubelet、uf30-tdh3-regression バックオフ、失敗したコンテナの再起動

6.2 トラブルシューティングとレビュー: ポッドコンテナの基盤となるアプリケーションのログを表示するには、kubectl logs xxx コマンドを使用します。

次に、コマンド kubectl logs xxx を使用して、ポッド コンテナの基盤となるアプリケーションのログを表示し、問題の原因を特定します。このコマンドの出力は以下のようになります。

上の画像からわかるように、残念ながら、このコマンドの出力では問題の根本的な原因は明らかになりません。

基礎となるログ メカニズムの観点から、StarRing TDH の zk アプリケーションは標準出力 stdout と標準エラー stderr にログを印刷しないため、kubectl logs xxx は対応するログを表示できません。

さらに調査する必要があります。

6.3 トラブルシューティングとレビュー: ポッドコンテナの基盤となるアプリケーションの他のログファイルをさらに取得して表示し、問題の原因をさらに深く調べます。

問題をさらにトラブルシューティングするには、まず、ポッド コンテナーの基盤となるアプリケーションの他のログ ファイルのパスを取得する必要があります。

tdh はクローズドソースなので、アプリケーションのソースコードを表示することはできません。公式の顧客に連絡することなく、コマンド kubectl describe pod xxx を使用してポッドがマウントされているボリュームを表示し、パスを推測して検証し、特定のログ ファイルを取得できます。 (トラブルシューティングでは、大胆な推測と慎重な検証が重要です!)

コマンド出力の部分的なスクリーンショットは次のとおりです。パス /var/log/license がマウントされていることがわかります。

次に、ログ ファイル /var/log/license をチェックして、問題の原因をさらに詳しく調べます。このファイルはローカル ファイル システム内のファイルであり、表示するには対応するノードにログインする必要があることに注意してください。以下はログ ファイルの主要なスクリーンショットです。

ログから、問題の原因が判明しました。zk の下部にあるローカル ファイル システムに保存されているファイル /var/license/version-2/snapshot.70000007a が破損していたため、起動できませんでした。

  1. 2021-10-11 17:07:08,330 エラー org.apache.zookeeper.server.persistence.Util: [myid:16] - [main:Util@239] -最終 取引は部分的でした
  2. 2021-10-11 17:07:08,331 エラー org.apache.zookeeper.server.quorum.QuorumPeer: [myid:16] - [main:QuorumPeer@453] - できませ 負荷 データベース ディスク
  3. java.io.EOFException がjava.io.DataInputStream.readInt(DataInputStream.java:392)発生しました

ログファイルの詳細は次のとおりです。

  1. 末尾 -50 /var/log/license/zookeeper.log
  2. 2021-10-11 17:07:08,203 INFO org.apache.zookeeper.server.DatadirCleanupManager: [myid:16] - [main:DatadirCleanupManager@101] - パージタスク 予定されていません
  3. 2021-10-11 17:07:08,212 INFO org.apache.zookeeper.server.quorum.QuorumPeerMain: [myid:16] - [main:QuorumPeerMain@127] - クォーラムピアを開始しています
  4. 2021-10-11 17:07:08,221 INFO org.apache.zookeeper.server.NIOServerCnxnFactory: [myid:16] - [main:NIOServerCnxnFactory@94] -ポート 0.0.0.0/0.0.0.0:2291バインド
  5. 2021-10-11 17:07:08,235 INFO org.apache.zookeeper.server.quorum.QuorumPeer: [myid:16] - [main:QuorumPeer@913] - tickTimeが設定されました  9000まで
  6. 2021-10-11 17:07:08,235 INFO org.apache.zookeeper.server.quorum.QuorumPeer: [myid:16] - [main:QuorumPeer@933] - minSessionTimeoutが設定されました  -1
  7. 2021-10-11 17:07:08,235 INFO org.apache.zookeeper.server.quorum.QuorumPeer: [myid:16] - [main:QuorumPeer@944] - maxSessionTimeoutが設定されました  -1
  8. 2021-10-11 17:07:08,236 INFO org.apache.zookeeper.server.quorum.QuorumPeer: [myid:16] - [main:QuorumPeer@959] - initLimit が設定されました  10まで
  9. 2021-10-11 17:07:08,285 INFO org.apache.zookeeper.server.persistence.FileSnap: [myid:16] - [main:FileSnap@83] - スナップショット /var/license/version-2/snapshot.70000007a を読み込んでいます
  10. 2021-10-11 17:07:08,330 エラー org.apache.zookeeper.server.persistence.Util: [myid:16] - [main:Util@239] -最終 取引は部分的でした
  11. 2021-10-11 17:07:08,331 エラー org.apache.zookeeper.server.quorum.QuorumPeer: [myid:16] - [main:QuorumPeer@453] - できませ 負荷 データベース ディスク
  12. EOF例外
  13. java.io.DataInputStream.readInt(DataInputStream.java:392)
  14. org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.java:63)
  15. org.apache.zookeeper.server.persistence.FileHeader.deserialize(FileHeader.java:64)
  16. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.inStreamCreated(FileTxnLog.java:558)
  17. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.createInputArchive(FileTxnLog.java:577)
  18. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.goToNextLog(FileTxnLog.java:543)
  19. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIteratorにあります次へ(FileTxnLog.java:625)
  20. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.init(FileTxnLog.java:529)
  21. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.<init>(FileTxnLog.java:504)
  22. org.apache.zookeeper.server.persistence.FileTxnLogにあります読み取り(FileTxnLog.java:341)
  23. org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:132)
  24. org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:223)
  25. org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:417)
  26. org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:409)
  27. org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:151)
  28. org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
  29. org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
  30. 2021-10-11 17:07:08,332 エラー org.apache.zookeeper.server.quorum.QuorumPeerMain: [myid:16] - [main:QuorumPeerMain@89] - 予期しない例外が発生し、異常終了しました
  31. java.lang.RuntimeException:クォーラム サーバーを実行できません
  32. org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:454)
  33. org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:409)
  34. org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:151)
  35. org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
  36. org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
  37. 原因: java.io.EOFException
  38. java.io.DataInputStream.readInt(DataInputStream.java:392)
  39. org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.java:63)
  40. org.apache.zookeeper.server.persistence.FileHeader.deserialize(FileHeader.java:64)
  41. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.inStreamCreated(FileTxnLog.java:558)
  42. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.createInputArchive(FileTxnLog.java:577)
  43. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.goToNextLog(FileTxnLog.java:543)
  44. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIteratorにあります次へ(FileTxnLog.java:625)
  45. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.init(FileTxnLog.java:529)
  46. org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.<init>(FileTxnLog.java:504)
  47. org.apache.zookeeper.server.persistence.FileTxnLogにあります読み取り(FileTxnLog.java:341)
  48. org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:132)
  49. org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:223)
  50. org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:417)
  51. ...さらに4件

7 問題解決

上記の一般的なトラブルシューティングのアイデアを通じて、ログをチェックし、問題の原因を見つけました。zk の下部にあるローカル ファイル システムに保存されているファイル /var/license/version-2/snapshot.70000007a が破損していたため、起動できませんでした。クラスターには複数の zk ノードがあり、他のノードの zk は正常に起動されているため、問題のあるノードの上記ディレクトリにあるデータファイルを削除し、ノードの zk を再起動することができます。再起動後、ノードの zk は他のノードからローカルにデータをコピーし、外部に正常にサービスを提供できるようになります。

zk の下部にあるローカル ファイル システムに保存されているファイルは、正常ノードと問題ノードで比較されます。スクリーンショットは次のとおりです。

良好なノード上のzkデータ

不良ノード上の zk データ

上記の方法によると、ディレクトリをクリアして zk を再起動すると、kubectl get pods でサービスが正常であることが示されます。スクリーンショットは次のとおりです。

修正後のポッドを取得する

注: 実際、zk はローカル データ ファイルをクリーンアップするためのシステム ツール zkCleanup.sh も提供しています。著者はこのツールを使用せず、問題のあるノードのローカル ファイルを手動でバックアップしてクリアしました。このツールを自分で試すことができます。

zkクリーンアップ

8 知識の要約

  • ビッグデータ実践者は、スキル不足によりビッグデータ関連の問題のトラブルシューティングに圧倒されることがないよう、常にスキルセットを拡大し、Kubernetes と Docker の基本知識と一般的なコマンドを習得する必要があります。
  • ポッドは CrashloopBackOff 状態です。これは、ポッド内のコンテナが起動され、その後クラッシュし、その後自動的に再起動したが再びクラッシュし、というように (起動、クラッシュ、起動、クラッシュ) というサイクルが繰り返されていることを意味します。
  • ポッド コンテナの下部で実行されているアプリケーションが失敗した場合、一般的なトラブルシューティングのアイデアは次のようになります。

ステップ 1: kubectl describe pod xxx コマンドを使用して、ポッドに関する詳細情報を取得します。

ステップ 2: kubectl logs xxx コマンドを使用して、ポッド コンテナーの下部にあるアプリケーションのログを表示します。

ステップ 3: ポッド コンテナーの基盤となるアプリケーションの他のログ ファイルをさらに取得して表示し、問題の原因をさらに詳しく調べます。

  • kubectl logs は、コンテナの標準出力 stdout と標準エラー stderr のログをポッドの下部に表示します。 kubectl logs は、アプリケーションによって他のファイルに書き込まれたログを表示できません。ログ ファイルのパスを取得して自分で表示する必要があります。
  • K8s では、アプリケーションがコンテナの標準出力 stdout と標準エラー stderr にログを書き込むことを推奨しています。
  • コンテナ内のアプリケーションは、コンテナの標準出力 stdout と標準エラー stderr にログを直接書き込むことができます。コンテナ内のアプリケーションがコンテナの標準出力 stdout と標準エラー stderr にログを直接書き込むことができない、または書き込むのが不便な場合は、サイドカー モードを使用して、アプリケーションのコンテナが配置されているポッドに別のサイドカー コンテナをデプロイできます。サイドカー コンテナーは、アプリケーションのログ ファイルを読み取り、標準出力 stdout と標準エラー stderr に出力する役割を担います。
  • 最下層では、k8s は各ノードで実行されている kubelet を通じてノード内のすべてのコンテナの stdout および stderr ログを収集し、それらを kubelet によって管理されるローカル ファイルに書き込みます。
  • ユーザーが kubectl logs xx コマンドを実行すると、コマンドは最下層のコンテナの対応するノード上の kubelet を呼び出して、ログを取得するために管理しているローカル ログ ファイルを取得します。
  • ユーザーは kubectl log xxx を使用してアプリケーション ログを取得します。これにより、k8s クラスター内の対応するノードにログインして対応するログを表示するという面倒な操作が省かれ、非常に便利になります。
  • 問題を解決するには、大胆な推測を行い、それを慎重に検証する必要があります。

<<:  クラウドネイティブの AWS サービスを活用してセキュリティ体制を強化するにはどうすればよいでしょうか?

>>:  企業がクラウドコンピューティングを通じて持続可能な開発目標を達成する方法

推薦する

クラウドコンピューティング環境における主要なセキュリティ技術の研究

まとめクラウド コンピューティングは、ビッグ データ アプリケーションやクロスプラットフォーム アプ...

ホームページのタイトルにウェブサイトの URL を追加すると、SEO の最適化に役立ちますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブサイトのホームペー...

パーフェクトダイアリーのストップロスの瞬間

パーフェクトダイアリーの計画はそれほど順調には進みませんでした。閉幕したばかりの中国国際輸入博覧会で...

AWS IoT ボタンの紹介

AWS IoT ボタンは、Amazon Dash Button ハードウェアをベースにしたプログラム...

fastcomet - クリスマスに20%オフ/日本のデータセンター/KDDI回線/中国の超高速/仮想ホスト+VPS

Fastcomet のクリスマス プロモーションが始まりました: cpanel パネルを備えたすべて...

Infrastructure as Code (IaC) に注意を払わないと、失敗します。

[[406325]]これまで、IT インフラストラクチャの管理は困難な作業でした。システム管理者は、...

cloudcone: ストレージ VPS (大容量ハードディスク VPS)、年間 20 ドル、1G メモリ/1 コア/250g ハードディスク/5T ストリーミング

Cloudcone は、大量のトラフィックに対応する安価な大容量ハード ドライブ VPS (ストレー...

レポート:共同購入サイトの半数が閉鎖

中国電子商取引研究センターが最近発表した「2012年中国オンライン共同購入市場データ監視レポート」に...

Cert-manager を使用した Admission Webhooks 証明書の管理

Kubernetes は、組み込み機能を拡張する方法を提供します。最も一般的に使用されるのは、おそら...

分散コンセンサスアルゴリズムの実装 - Raft アルゴリズム

[[385285]]著者は、Raftアルゴリズムフレームワークraft-coreの独自のJavaバー...

高い木は風を引き寄せます。Yixin は強力な WeChat に公然と挑戦します。

WeChatの突如の出現は、中国電信、中国移動、中国聯通の3大通信事業者のSMSと音声機能市場を猛烈...

zgovpsはどうですか?オランダのVPSの詳細なテストデータを共有します! Netflix\Spotify\Steam\ChatGPT などのブロックを解除します。

zgovps は、オランダのナールトウェイクで、年間 16.9 ドルという低価格の VPS サービス...

テンセント、WeChatパブリックアカウントの再認証プロセスを是正する措置を講じる

北京ビジネスデイリー(記者:屈中芳)工業情報化部がセキュリティとプライバシー保護に重点を置いたWeC...

スマートルーターの時代が来るのか?

モバイルインターネットの発展に伴い、スマートホームはますます一般大衆に身近なものになり、多くの伝統的...