Kubernetes Pod のトラブルシューティングをマスターする: 高度な戦略とシナリオ

Kubernetes Pod のトラブルシューティングをマスターする: 高度な戦略とシナリオ

Kubernetes (K8s) のデプロイメントでは、ポッド、サービス、イングレス、応答しないクラスター、コントロール プレーン、高可用性設定など、さまざまな角度から課題が発生することがよくあります。 Kubernetes ポッドは、Kubernetes エコシステムで展開可能な最小の単位であり、リソースとネットワークを共有する 1 つ以上のコンテナをカプセル化します。ポッドは、アプリケーションまたはプロセスの単一のインスタンスを実行するように設計されており、必要に応じて作成および破棄されます。ポッドは、K8s 環境でのアプリケーションのスケーリング、更新、保守に不可欠です。

『Master Kubernetes Pods: Advanced Troubleshooting Strategies』 (著者なし) からの翻訳です。

この記事では、Kubernetes ポッドの課題とトラブルシューティング手順について説明します。 Kubernetes ポッドの実行中に表示される可能性のあるエラー メッセージには、次のようなものがあります。

  • イメージプルバックオフ
  • エラーイメージプル
  • 無効な画像名
  • クラッシュループバックオフ

場合によっては、エラーがリストに表示されなくても、ポッドが失敗していることに気付くことがあります。まず、Kubernetes リソースをデバッグするときは、API リファレンスに注意することが重要です。さまざまな Kubernetes API がどのように定義され、ポッド/デプロイメント内の複数のオブジェクトがどのように機能するかについて説明します。ドキュメントは、Kubernetes Web サイトの API リファレンスで明確に定義されています。この場合、ポッドをデバッグするときに、API リファレンスからポッド オブジェクトを選択して、ポッドの動作の詳細を確認します。これは、ポッドに入るフィールド、つまりバージョン、タイプ、メタデータ、仕様、ステータスを定義します。 Kubernetes では、必要なコマンドのガイドを含むチートシートも提供されています。

前提条件

この記事は、読者が以下の要件を満たしていることを前提としています。

  • シナリオデモンストレーション用にインストールされた種類
  • Kubernetesアーキテクチャについて中級レベルの理解があること
  • Kubectl コマンドラインツール

Kubernetes ポッド エラー - ImagePullBackoff

このエラーは、次の 3 つの理由で表示されます。

  • 無効な画像
  • 無効なタグ
  • 無効な権限

これらの状況は、ミラーに関する正しい情報がない場合に発生します。また、リポジトリ (プライベート リポジトリ) からイメージをプルする権限がない場合もあります。以下の例でこれを実証するために、nginx デプロイメントを作成します。

 ➜ ~ kubectl create deploy nginx --image=nginxdeployment.apps/nginx
 created

Pod が実行されたら、Pod 名を取得します。

 ➜ ~ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-8f458dc5b-hcrsh 1/1 Running 0 100s

実行中のポッドの名前をコピーして、その詳細情報を取得します。

 ➜ ~ kubectl describe pod nginx-8f458dc5b-hcrsh Name: nginx-8f458dc5b-hcrsh hable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m43s default-scheduler Successfully assigned default/nginx-8f458dc5b-hcrsh to k8s-troubleshooting-control-plane Normal Pulling 2m43s kubelet Pulling image "nginx" Normal Pulled 100s kubelet Successfully pulled image "nginx" in 1m2.220189835s Normal Created 100s kubelet Created container nginx Normal Started 100s kubelet Started container nginx
镜像已成功拉取。您的Kubernetes pod 正在运行,没有错误。

ImagePullBackoff をデモンストレーションするには、デプロイメント YAML ファイルを編集し、存在しないイメージを指定します。

 ➜ kubectl edit deploy nginx containers: -image: nginxdoestexist imagePullPolicy: Always name: nginx

新しいポッドは正常にデプロイされませんでした

➜ ~ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-5b847fdb95-mx4pq 0/1 ErrImagePull 0 3m40s nginx-8f458dc5b-hcrsh 1/1 Running 0 38m

ImagePullBackoffエラーが表示される

➜ ~ kubectl describe pod nginx-6f46cbfbcb-c92bl Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 88s default-scheduler Successfully assigned default/nginx-6f46cbfbcb-c92bl to k8s-troubleshooting-control-plane Normal Pulling 40s (x3 over 88s) kubelet Pulling image "nginxdoesntexist" Warning Failed 37s (x3 over 85s) kubelet Failed to pull image "nginxdoesntexist": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginxdoesntexist:latest": failed to resolve reference "docker.io/library/nginxdoesntexist:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed Warning Failed 37s (x3 over 85s) kubelet Error: ErrImagePull Normal BackOff 11s (x4 over 85s) kubelet Back-off pulling image "nginxdoesntexist" Warning Failed 11s (x4 over 85s) kubelet Error: ImagePullBackOff
 Kubernetes Pod 错误- 已拉取镜像但Pod 处于pending 状态。

K8s を本番環境で実行するたびに、K8s 管理者はクラスター内で実行されている名前空間の要件に基づいて、各名前空間にリソース クォータを割り当てます。名前空間は、クラスター内で論理的な分離を提供するために使用されます。

リソース クォータの仕様がポッド内のアプリケーションの最小要件を満たしていない場合、「イメージはプルされましたが、ポッドはまだ保留中です」というエラーがスローされます。次の例では、payments という名前空間が作成されます。

 ➜ ~ kubectl create ns payments namespace/payments created

関連する仕様でリソース割り当てを作成する

➜ ~ cat resourcequota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 4Gi

名前空間の支払いにリソースクォータを割り当てる

➜ ~ kubectl apply -f resourcequota.yaml -n paymentsresourcequota/compute-resources created
在具有资源配额限制的命名空间内创建新部署:
 kubectl create deploy nginx --image=nginx -n paymentsdeployment.apps/nginx created
尽管已成功创建部署,但没有Pod 存在:
 ➜ ~ kubectl get pods -n payments No resources found in payments namespace

デプロイメントは作成されましたが、準備中の状態の Pod はなく、更新中の Pod はなく、使用可能な Pod もありません。

 ➜ ~ kubectl get deploy -n payments NAME READY UP-TO-DATE AVAILABLE AGE nginx 0/1 0 0 7m4s

さらにデバッグするには、nginx のデプロイメントについて説明します。ポッドの作成に失敗しました:

 ➜ ~ kubectl describe deploy nginx -n payments Name: nginx Namespace: payments CreationTimestamp: Wed, 24 May 2023 21:37:55 +0300 Labels: app=nginx Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx Replicas: 1 desired | 0 updated | 0 total | 0 available | 1 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx Port: <none> Host Port: <none> Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available False MinimumReplicasUnavailable ReplicaFailure True FailedCreate Progressing False ProgressDeadlineExceeded OldReplicaSets: <none> NewReplicaSet: nginx-8f458dc5b (0/1 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 10m deployment-controller Scaled up replica set nginx-8f458dc5b to 1
从Kubernetes 事件进行的进一步分析显示Pod 创建所需的内存不足。
 ➜ ~ kubectl get events --sort-by=/metadata.creationTimestamp

このエラーは、イメージが正常にプルされ、コンテナが作成されたが、ランタイム構成が失敗した場合に発生します。たとえば、動作中の Python アプリケーションがあり、存在しないフォルダー、またはそのフォルダーへの書き込み権限がないフォルダーに書き込もうとしている場合などです。最初にアプリケーションが実行され、その後エラーが発生します。アプリケーション ロジックでパニックが発生すると、コンテナーは停止します。コンテナはCrashLoopBackOff状態になります。最終的に、デプロイメントに Pod がないことがわかります。つまり、Pod は存在しますが、実行されておらず、CrashLoopbackoff エラーがスローされます。

生存および準備の調査に失敗しました

活性プローブは、ポッドが破損した状態になり、トラフィックを処理できなくなったかどうかを検出します。 Kubernetes が Pod を再起動します。準備プローブは、アプリケーションがトラフィックを処理する準備ができているかどうかを確認します。準備プローブは、アプリケーションが構成マップから必要なすべての構成を抽出し、スレッドを開始することを保証します。このプロセスが完了した後にのみ、アプリケーションはトラフィックを受信できるようになります。このプロセス中にアプリケーションでエラーが発生した場合も、CrashLoopBackoff 状態になります。

トラブルシューティングを始めましょう!

この記事では、Kubernetes Pod のトラブルシューティング手法の概要を説明します。 Pod をデプロイするときに発生する一般的なエラーを取り上げ、それらを解決するための実用的なソリューションを提供します。また、Kubernetes の仕組みを理解し、問題を効果的に特定して解決するために重要なリファレンス ページとチート シートに関する情報も提供します。この記事で提供されているガイダンスに従うことで、読者はトラブルシューティング スキルを向上させ、Kubernetes Pod の展開と管理を簡素化できます。


<<:  クラウドテクノロジーの最も包括的な説明

>>:  ByteDance 第2回インタビュー: 分散ロックを使用したことはありますか?分散ロック実装ソリューションは何ですか?分散ロックを使用する利点と欠点は何ですか?

推薦する

Nヘッドボスはヒーローに招待状を広く送り、SEOヒーローはニュースを聞いてミンユエを助けに招待する

6月は企業が採用情報で忙しくなる時期ですが、SEO業界も例外ではありません。最大のSEO企業であるN...

onetechcloud 春節 VPS 30% オフ、月額 19 元、香港 CN2/CMI、米国 CN2 GIA/CUII/AS4837 (デュアル ISP IP + 高防御付き)

onetechcloud は、春節の大規模なプロモーションを開始しました。すべての VPS クラウド...

安くて使いやすいおすすめの格安Windows VPS

中国では多くの人が Windows オペレーティング システムに慣れているため、VPS を使用する際...

エッジコンピューティングプロジェクトを成功させる方法

おそらくこれまで以上に、今日の IT リーダーは新興テクノロジーのビジネス価値を理解し、それを売り込...

Fingertip Micro-Earnは、アプリのプロモーションとマーケティングの新しい時代をもたらします

月収10万元の起業の夢を実現するミニプログラム起業支援プランご存知のとおり、モバイルインターネットは...

#12.12# 六易クラウド:香港CN2/ロサンゼルス高防御/CDN、「リベート+割引」ダブル割引、割引プラス割引で実物をゲット

Liuyi Cloudは「12.12」プロモーションを先行して開始しました:(1)全製品とも年間払い...

保険業界のクラウドコンピューティング標準が発表

12月24日、中国保険業界協会と中国通信標準化協会は北京で「保険業界のクラウドコンピューティングシナ...

簡単にウェブサイトを構築できます!スマートなウェブサイト構築ソフトウェアはホテルのウェブサイトのソースコードを巧みに利用します

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています情報化社会...

5月の第3週には、中国の.COMドメイン名の総数は700万に達し、純増は5万以上となった。

IDC Review Network (idcps.com) は 5 月 26 日に次のように報告し...

virmach: 格安 VPS の概要、virmach 割引コードの長期更新、およびいくつかの問題の概要

ここでは、virmach の安価な VPS の概要を示します。また、virmach にまだ注目してい...

#黑5# 格安ドメイン名情報のまとめ。ドメイン名のプロモーションを見るには1つの投稿だけで十分です

ブラック フライデーは基本的に始まりましたが、今は状況が異なります。単に数を埋め合わせたり、参加しな...

IT業界の転換点: パブリッククラウドITインフラへの支出が初めて従来のITインフラを上回る

IDC が最近発表した「グローバル クラウド IT インフラストラクチャ四半期追跡レポート」によると...

クラウド コンピューティングは今後どのように進化するのでしょうか?

今日、多くの企業は、クラウド環境が提供する拡張性と柔軟性を活用するために、クラウドでビジネスを運営し...