この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

コンテナの設定に関するヒント

適切に構築されたコンテナを実行することは、環境全体のパフォーマンスとセキュリティに大きな影響を与える可能性があります。

以下は、コンテナを設定するためのいくつかのヒントです。

コンテナのセキュリティに関する詳細な議論については、Rancher’s コンテナセキュリティガイドを参照してください。

一般的なコンテナOSを使用する

可能な限り、一般的なコンテナベースのOSに標準化することをお勧めします。

AlpineやBusyBoxのような小規模なディストリビューションは、コンテナイメージのサイズを削減し、一般的に攻撃面および脆弱性のリスクが低減されます。

Ubuntu、Fedora、CentOSのような人気のあるディストリビューションは、より多くのフィールドテストを受けており、より多くの機能を提供します。

FROM scratchコンテナから始める

マイクロサービスがスタンドアロンの静的バイナリである場合は、FROM scratchコンテナを使用するべきです。

FROM scratchコンテナは、最小限のイメージを設計するために使用できる空の 公式Dockerイメージです。

これにより、最小の攻撃面と最小のイメージサイズが得られます。

コンテナプロセスを特権のないユーザーとして実行する

可能な限り、コンテナ内でプロセスを実行する際には、特権のないユーザーを使用してください。コンテナランタイムは隔離を提供しますが、脆弱性や攻撃は依然として可能です。コンテナがルートとして実行されている場合、意図しないホストマウントにも影響を与える可能性があります。ポッドまたはコンテナのセキュリティコンテキストを構成する詳細については、 Kubernetesドキュメントを参照してください。

リソース制限を定義する

ポッドにCPUとメモリの制限を適用してください。これにより、ワーカーノードのリソースを管理し、故障したマイクロサービスが他のマイクロサービスに影響を与えるのを防ぐことができます。

標準のKubernetesでは、ネームスペースレベルでリソース制限を設定できます。Rancherでは、プロジェクトレベルでリソース制限を設定でき、それがプロジェクト内のすべてのネームスペースに伝播します。詳細については、Rancherのドキュメントを参照してください。

リソースクォータを設定する際に、プロジェクトまたはネームスペースにCPUまたはメモリ(すなわち制限または予約)に関連するものを設定すると、すべてのコンテナは作成時にそれぞれのCPUまたはメモリフィールドを設定する必要があります。ワークロード作成時にこれらの制限をすべてのコンテナに設定しないようにするために、ネームスペースにデフォルトのコンテナリソース制限を指定できます。

Kubernetesのドキュメントには、リソース制限を コンテナレベルおよびネームスペースレベルで設定する方法に関する詳細が記載されています。

リソース要件を定義する

ポッドにCPUおよびメモリの要件を適用する必要があります。これは、スケジューラにポッドが配置されるべきコンピュートノードの種類を通知し、そのノードが過剰にプロビジョニングされないようにするために重要です。Kubernetesでは、ポッドのコンテナ仕様のリソースリクエストフィールドで`resources.requests`を定義することにより、リソース要件を設定できます。詳細については、 Kubernetesのドキュメントを参照してください。

ポッドがデプロイされているネームスペースにリソース制限を設定し、コンテナに特定のリソースリクエストがない場合、ポッドは起動できません。ワークロード作成時にこれらのフィールドをすべてのコンテナに設定しないようにするために、ネームスペースにデフォルトのコンテナリソース制限を指定できます。

リソース要件はコンテナレベルで定義することをお勧めします。そうしないと、スケジューラはクラスタが負荷を受けているときにアプリケーションに役立たない仮定をする可能性があります。

ライブネスおよびレディネスプローブ

コンテナのライブネスおよびレディネスプローブを設定してください。コンテナが完全にクラッシュしない限り、状態を報告するエンドポイントまたは仕組みがなければ、Kubernetesはその不健康状態を検知できません。あるいは、不健康な場合はコンテナが停止してクラッシュすることを確認してください。