🎯 レッスンの目的
このレッスンを終えると、Pod が Kubernetes の最も基本的なユニットであること、Pod がネットワーク名前空間を共有する方法、Sidecar コンテナ (GA K8s 1.33)、Init コンテナ、デバッグ用の一時コンテナの使用方法、および Pod のライフサイクルとリソースの管理方法を理解できるようになります。
1.ポッドとは何ですか?
Pod は、Kubernetes の最小のスケジューリング単位です。ポッドは、同じノード上で実行され、共通に共有される1 つ以上のコンテナ で構成されます:
- ネットワーク名前空間: 同じ IP アドレス、同じポート空間 - コンテナは
localhost を介して相互に通信します。
- ストレージ ボリューム: ポッドにマウントされたボリュームには多くのコンテナからアクセスできます
- Linux 名前空間 (構成による): PID 名前空間、IPC 名前空間
コンテナを直接デプロイしてみませんか? Kubernetes はコンテナではなくポッドを管理します。ポッドは、密接に関連するプロセスをグループ化するのに役立つ抽象化レイヤーです。
2.単純なポッドの例
___コードブロック_0___ ___コードブロック_1___3.マルチコンテナ ポッド
マルチコンテナ Pod には 3 つの一般的なパターンがあります:
3.1 サイドカー パターン
セカンダリ コンテナはメイン コンテナ (ログ フォワーダー、プロキシ、OTel コレクター) をサポートします。
3.2 アンバサダー パターン
プロキシ コンテナは、メイン コンテナに代わって外部と通信します。
3.3 アダプター パターン
Container は、メイン コンテナからの出力を標準形式に正規化します。
4.サイドカー コンテナ GA — K8s 1.33
K8s 1.33 より前は、サイドカー コンテナが通常の初期化コンテナとして実装されていたため、ライフサイクルの問題が発生していました。メイン コンテナが終了しても、サイドカーはまだ実行中であり、ジョブは完了しませんでした。
K8s ソリューション 1.33: 公式サイドカー コンテナーは initContainer で、__HTMLTAG_56___restartPolicy: Always です。 Kubernetes は次のことを行います:
- メイン コンテナの前にサイドカーを開始__HTMLTAG_61___
- クラッシュした場合はサイドカーを再起動します (メイン コンテナとは独立して)
- メイン コンテナの終了後にサイドカーを終了
- サイドカーはジョブの完了をブロックしません
Sidecar コンテナのユースケース: Grafana Alloy ログ エージェント、OpenTelemetry Collector、Envoy プロキシ (サービス メッシュ内)、Vault エージェント インジェクタ。
5.コンテナの初期化
Init コンテナは、メイン コンテナが起動する前に run-to-completion を実行します。使用目的:
- アプリを開始する前にデータベースの準備ができるまで待ちます
- 外部ソースから構成またはシークレットをダウンロード__HTMLTAG_81___
- ファイル権限の設定、データベース移行
6.一時コンテナ — デバッグポッド
エフェメラル コンテナを使用すると、Pod を再起動することなく、実行中の Pod にデバッグ コンテナをアタッチできます。 Pod がシェルなしで distroless イメージを使用する場合に非常に便利です。
___コードブロック_4___7.ポッドのライフサイクル
Pod は次のフェーズを経ます:
- 保留中: ポッドが作成されました。スケジューラがノードを選択するのを待っているか、イメージをプルしています
- 実行中: ポッドがノードにバインドされており、少なくとも 1 つのコンテナが実行中
- 成功: すべてのコンテナが正常に終了しました (終了 0)
- 失敗: 少なくとも 1 つのコンテナがエラーで終了しました (0 以外で終了)
- 不明: ポッドのステータスを取得できません (通常はノードの問題が原因です)
ポッドの条件 (__HTMLTAG_118___kubectl によるポッド から):
- PodScheduled: スケジューラが選択したノード
- PodReadyToStartContainers: サンドボックスが作成され、ネットワークが構成されました
- 初期化: すべての初期化コンテナが正常に実行されました
- ContainersReady: すべてのコンテナの準備が完了しました
- _準備完了: ポッドはトラフィックを受信する準備ができています
8。リソースのリクエストと制限
___コードブロック_5___Requests は、スケジューラが保証するリソースの量です。 制限 は最大上限です。制限を超えた CPU はスロットルされ (強制終了されません)、制限を超えたメモリは OOMKilled されます。
9. QoS クラス
- 保証: すべてのコンテナに対するリクエスト == 制限。優先度が最も高く、ノードにメモリ不足がある場合は削除されません。
- _バースト可能: リクエスト <;限界。限界。ノードにメモリが不足している場合に削除される可能性があります。
- BestEffort: リクエスト/制限はありません。ノードにリソースが不足している場合は、最初にエビクトします。
10.プローブ — ヘルスチェック
___コードブロック_6___- livenessProbe: ポッドが失敗した場合は再起動されます
- readinessProbe: 失敗した場合 (トラフィックを受信しない場合)、ポッドはサービス エンドポイントから削除されます
- startupProbe: 起動が遅いアプリに使用され、待機中に liveness/readiness プローブをオフにします
11.静的ポッド
静的ポッドは、API サーバーを経由せずに、__HTMLTAG_186___/etc/kubernetes/manifests/ の YAML ファイルから kubelet によって直接作成されます。 Kubernetes コントロール プレーン コンポーネント (kube-apiserver、etcd、スケジューラー、コントローラー マネージャー) は、マスター ノード上で静的ポッドとして実行されます。
概要
- Pod = ネットワークとストレージを共有するコンテナのグループ
- サイドカー コンテナ (K8s 1.33 GA):
initContainer(__HTMLTAG_197___restartPolicy 付き): 常に - 初期コンテナ: メイン コンテナの前の実行から完了まで
- 一時的なコンテナ: 再起動せずにポッドをデバッグ__HTMLTAG_203___
- _実稼働ワークロードのリソース要求/制限を常に設定__HTMLTAG_205___
- readinessProbe を使用してトラフィックを制御し、livenessProbe を使用して自動再起動