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

推薦する

加速クラウド:四川徳陽高防御、825元/16コア/16gメモリ/200g SSD/50M帯域幅/100G防御(CC攻撃を無視)

加速クラウド(中華人民共和国付加価値通信事業許可証 B1-5344)は、四川省徳陽電信のコンピュータ...

インフルエンサーがライブ配信で商品を販売するための10のポイント!

インターネットセレブによるライブストリーミングは、強力なインタラクティブ性とリアルタイムのフィードバ...

時代遅れのスターを復活させるためにプロダクト思考をどのように活用するか?

文/Jincuodao(WeChat公式アカウント:ijincuodao) 「I Am a Sing...

モカ、「2022年上半期CHO人材戦略調査レポート」を発表

2022年8月10日、Mokaが主導し、中国語版「ハーバードビジネスレビュー」を独占知的サポートメデ...

ワールドカップがマーケティング戦争を引き起こした。ハイセンスはCポジションでどのようにデビューするのだろうか?

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

インターネット大手が銀行業に参入:テンセントとアリババは最初のライセンス取得を逃す可能性も

民間資本が銀行業界に参入できるという警鐘が鳴らされるやいなや、アリババ、テンセント、蘇寧などのネット...

クラウド大手の AWS、Alibaba Cloud、Google Cloud などは、独自のクラウドを開発することを好みます。なぜ?

今日、接続とデータマイニングの嵐であるクラウドコンピューティングは、当初嵐が吹き荒れていたインターネ...

中国が初めてオンライン融資の参入基準を設定。上海P2Pはデータの提出が必要

記者の喬佳偉が上海からレポートします苦い経験から学び、混沌としたP2P業界は制度的再構築を進めている...

ウェブサイト最適化のヒント: 外部リンク、トラフィック、コンテンツの拡張

Baidu と Google は、アルゴリズムの更新に力を惜しみません。アルゴリズムが調整されるたび...

K-ed ウェブサイトは「新時代」を歓迎する

SEO の世界で、SEO 担当者にとって最も迷惑なことは、サイトがブロックされることです。少し前に、...

重要な情報: OpenStack と DRaaS の一般的なアーキテクチャと設計

新しい時代の IT インフラストラクチャの発展に伴い、従来のインフラストラクチャに代わってクラウド ...

WeChat、パブリックアカウントによる「いいねを集める」行為を禁止、4回の違反でアカウントを永久禁止

[概要] 発表では、公開アカウントが一度でも「いいね!」を集めたことが判明した場合、そのアカウントは...

詳細分析: 金融企業向けコンテナ クラウド プラットフォームのストレージを選択するにはどうすればよいでしょうか?

1. コンテナクラウドプラットフォームとコンテナクラウドストレージクラウド プラットフォームにおける...

#云者·奔跑#: テック教育はトレンドに逆らって成長し、ICT教育サービスの新たなピークに到達

「テクトロニクスのトレーニングクラウドプラットフォームは、まさに業界の視点に基づいており、大企業や通...