|
| 1 | +--- |
| 2 | +title: サイドカーコンテナ |
| 3 | +content_type: concept |
| 4 | +weight: 50 |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | +{{< feature-state for_k8s_version="v1.29" state="beta" >}} |
| 9 | + |
| 10 | +サイドカーコンテナは、メインのアプリケーションコンテナと同じ{{< glossary_tooltip text="Pod" term_id="pod" >}}内で実行されるセカンダリーコンテナです。 |
| 11 | +これらのコンテナは、主要なアプリケーションコードを直接変更することなく、ロギング、モニタリング、セキュリティ、データの同期などの追加サービスや機能を提供することにより、アプリケーションコンテナの機能を強化または拡張するために使用されます。 |
| 12 | + |
| 13 | +<!-- body --> |
| 14 | + |
| 15 | +## サイドカーコンテナの有効化 |
| 16 | + |
| 17 | +Kubernetes 1.29でデフォルトで有効化された`SidecarContainers`という名前の [フィーチャーゲート](/docs/reference/command-line-tools-reference/feature-gates/)により、 |
| 18 | +Podの`initContainers`フィールドに記載されているコンテナの`restartPolicy`を指定することができます。 |
| 19 | +これらの再起動可能な _サイドカー_ コンテナは、同じポッド内の他の[initコンテナ](/docs/concepts/workloads/pods/init-containers/)やメインのアプリケーションコンテナとは独立しています。 |
| 20 | +これらは、メインアプリケーションコンテナや他のinitコンテナに影響を与えることなく、開始、停止、または再起動することができます。 |
| 21 | + |
| 22 | +## サイドカーコンテナとPodのライフサイクル |
| 23 | + |
| 24 | +もしinitコンテナが`restartPolicy`を`Always`に設定して作成された場合、それはPodのライフサイクル全体にわたって起動し続けます。 |
| 25 | +これは、メインアプリケーションコンテナから分離されたサポートサービスを実行するのに役立ちます。 |
| 26 | + |
| 27 | +このinitコンテナに`readinessProbe`が指定されている場合、その結果はPodの`ready`状態を決定するために使用されます。 |
| 28 | + |
| 29 | +これらのコンテナはinitコンテナとして定義されているため、他のinitコンテナと同様に順序に関する保証を受けることができ、複雑なPodの初期化フローに他のinitコンテナと混在させることができます。 |
| 30 | + |
| 31 | +通常のinitコンテナと比較して、`initContainers`内で定義されたサイドカーは、開始した後も実行を続けます。 |
| 32 | +これは、`.spec.initContainers`にPod用の複数のエントリーがある場合に重要です。 |
| 33 | +サイドカースタイルのinitコンテナが実行中になった後(kubeletがそのinitコンテナの`started`ステータスをtrueに設定した後)、kubeletは順序付けられた`.spec.initContainers`リストから次のinitコンテナを開始します。 |
| 34 | +そのステータスは、コンテナ内でプロセスが実行されておりStartup Probeが定義されていない場合、あるいはその`startupProbe`が成功するとtrueになります。 |
| 35 | + |
| 36 | +以下は、サイドカーを含む2つのコンテナを持つDeploymentの例です: |
| 37 | + |
| 38 | +{{% code_sample language="yaml" file="application/deployment-sidecar.yaml" %}} |
| 39 | + |
| 40 | +この機能は、サイドカーコンテナがメインコンテナが終了した後もジョブが完了するのを妨げないため、サイドカーを持つジョブを実行するのにも役立ちます。 |
| 41 | + |
| 42 | +以下は、サイドカーを含む2つのコンテナを持つJobの例です: |
| 43 | + |
| 44 | +{{% code_sample language="yaml" file="application/job/job-sidecar.yaml" %}} |
| 45 | + |
| 46 | +## 通常のコンテナとの違い |
| 47 | + |
| 48 | +サイドカーコンテナは、同じPod内の通常のコンテナと並行して実行されます。 |
| 49 | +しかし、主要なアプリケーションロジックを実行するわけではなく、メインのアプリケーションにサポート機能を提供します。 |
| 50 | + |
| 51 | +サイドカーコンテナは独自の独立したライフサイクルを持っています。 |
| 52 | +通常のコンテナとは独立して開始、停止、再起動することができます。 |
| 53 | +これは、メインアプリケーションに影響を与えることなく、サイドカーコンテナを更新、スケール、メンテナンスできることを意味します。 |
| 54 | + |
| 55 | +サイドカーコンテナは、メインのコンテナと同じネットワークおよびストレージの名前空間を共有します。 |
| 56 | +このような配置により、密接に相互作用し、リソースを共有することができます。 |
| 57 | + |
| 58 | +## initコンテナとの違い |
| 59 | + |
| 60 | +サイドカーコンテナは、メインのコンテナと並行して動作し、その機能を拡張し、追加サービスを提供します。 |
| 61 | + |
| 62 | +サイドカーコンテナは、メインアプリケーションコンテナと並行して実行されます。 |
| 63 | +Podのライフサイクル全体を通じてアクティブであり、メインコンテナとは独立して開始および停止することができます。 |
| 64 | +[Initコンテナ](/docs/concepts/workloads/pods/init-containers/)とは異なり、サイドカーコンテナはライフサイクルを制御するための[Probe](/docs/concepts/workloads/pods/pod-lifecycle/#types-of-probe)をサポートしています。 |
| 65 | + |
| 66 | +これらのコンテナは、メインアプリケーションコンテナと直接相互作用することができ、同じネットワーク名前空間、ファイルシステム、環境変数を共有します。追加の機能を提供するために緊密に連携して動作します。 |
| 67 | + |
| 68 | +## コンテナ内のリソース共有 |
| 69 | + |
| 70 | +{{< comment >}} |
| 71 | +このセクションは[Initコンテナ](/docs/concepts/workloads/pods/init-containers/)ページにも存在します。 |
| 72 | +このセクションを編集する場合は、その両方を変更してください。 |
| 73 | +{{< /comment >}} |
| 74 | + |
| 75 | +Initコンテナ、サイドカーコンテナ、アプリケーションコンテナの順序と実行を考えるとき、リソースの使用に関して下記のルールが適用されます。 |
| 76 | + |
| 77 | +* 全てのInitコンテナの中で定義された最も高いリソースリクエストとリソースリミットが、*有効なinitリクエスト/リミット* になります。いずれかのリソースでリミットが設定されていない場合、これが最上級のリミットとみなされます。 |
| 78 | +* Podのリソースの*有効なリクエスト/リミット* は、[Podのオーバーヘッド](/ja/docs/concepts/scheduling-eviction/pod-overhead/)と次のうち大きい方の合計になります。 |
| 79 | + * リソースに対する全てのアプリケーションコンテナとサイドカーコンテナのリクエスト/リミットの合計 |
| 80 | + * リソースに対する有効なinitリクエスト/リミット |
| 81 | +* スケジューリングは有効なリクエスト/リミットに基づいて実行されます。つまり、InitコンテナはPodの生存中には使用されない初期化用のリソースを確保することができます。 |
| 82 | +* Podの*有効なQoS(quality of service)ティアー* は、Initコンテナ、サイドカーコンテナ、アプリケーションコンテナで同様です。 |
| 83 | + |
| 84 | +クォータとリミットは有効なPodリクエストとリミットに基づいて適用されます。 |
| 85 | + |
| 86 | +Podレベルのコントロールグループ(cgroups)は、スケジューラーと同様に、有効なPodリクエストとリミットに基づいています。 |
| 87 | + |
| 88 | +## {{% heading "whatsnext" %}} |
| 89 | + |
| 90 | +* [ネイティブサイドカーコンテナ](/blog/2023/08/25/native-sidecar-containers/)に関するブログ投稿を読む。 |
| 91 | +* [Initコンテナを持つPodを作成する方法](/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container)について読む。 |
| 92 | +* [Probeの種類](/docs/concepts/workloads/pods/pod-lifecycle/#types-of-probe)について学ぶ: Liveness, Readiness, Startup Probe。 |
| 93 | +* [Podのオーバーヘッド](/docs/concepts/scheduling-eviction/pod-overhead/)について学ぶ。 |
0 commit comments