3.6. fsGroup を使用して Pod のタイムアウトを減らす
ストレージボリュームに多数のファイル (たとえば、100 万以上) が含まれている場合、Pod のタイムアウトが発生する可能性があります。
これは、デフォルトで、Red Hat OpenShift Service on AWS が各ボリュームのコンテンツの所有権と権限を再帰的に変更して、そのボリュームがマウントされたときに Pod の securityContext で指定された fsGroup に一致させるために発生する可能性があります。多くのファイルが含まれるボリュームの場合、所有権と権限の確認と変更に時間がかかり、Pod の起動が遅くなる可能性があります。securityContext 内の fsGroupChangePolicy フィールドを使用して、Red Hat OpenShift Service on AWS がボリュームの所有権と権限をチェックおよび管理する方法を制御できます。
fsGroupChangePolicy は、Pod 内で公開される前にボリュームの所有者およびパーミッションを変更する動作を定義します。このフィールドは、fsGroup によって制御される所有権と権限をサポートするボリュームタイプにのみ適用されます。このフィールドには、以下の 2 つの値を指定できます。
-
OnRootMismatch: ルートディレクトリーのパーミッションと所有者が、ボリュームの予想されるパーミッションと一致しない場合にのみ、パーミッションと所有者を変更します。これにより、ボリュームの所有者とパーミッションを変更するのに必要な時間を短縮でき、Pod のタイムアウトを減らすことができます。 -
Always: (デフォルト) ボリュームのマウント時に、常にボリュームのパーミッションと所有者を変更します。
fsGroupChangePolicy は、secret、configMap、emptydir などの一時ボリュームタイプには影響を及ぼしません。
fsGroupChangePolicy は、namespace レベルまたは Pod レベルで設定できます。
3.6.1. namespace レベルで fsGroup を変更する リンクのコピーリンクがクリップボードにコピーされました!
任意の fsGroupChangePolicy 設定を namespace レベルで適用すると、その後その namespace に作成されるすべての Pod に、その設定が継承されます。ただし、個々の Pod に継承された fsGroupChangePolicy 設定は、必要に応じてオーバーライドできます。Pod レベルで fsGroupChangePolicy を設定すると、その Pod に継承された namespace レベルの設定がオーバーライドされます。
前提条件
- 管理者特権で Red Hat OpenShift Service on AWS クラスターにログインした。
- Red Hat OpenShift Service on AWS にアクセスできる。
手順
namespace ごとに fsGroupChangePolicy を設定するには、以下を実行します。
任意の namespace を選択します。
- Administration > Namespaces をクリックします。
- Namespaces ページで、任意の namespace をクリックします。Namespace details ページが表示されます。
fsGroupChangePolicyラベルを namespace に追加します。- Namespace details ページで、Labels の横にある Edit をクリックします。
Edit labels ダイアログで、
storage.openshift.io/fsgroup-change-policyラベルを追加し、次のいずれかと同じ設定にします。-
OnRootMismatch: ルートディレクトリーの権限と所有権が、ボリュームの予期される権限と一致しない場合にのみ、権限と所有権を変更することを指定します。これは、Pod のタイムアウト問題を回避するために役立ちます。 -
Always: (デフォルト) ボリュームがマウントされるたびに、ボリュームの権限と所有権を必ず変更することを指定します。
-
- Save をクリックします。
検証
以前に編集した namespace で Pod を起動し、namespace に設定した値が spec.securityContext.fsGroupChangePolicy パラメーターに含まれていることを確認します。
fsGroupChangePolicy 設定を示す Pod YAML ファイルの例
- 1
- この値は namespace から継承されます。
3.6.2. Pod レベルで fsGroup を変更する リンクのコピーリンクがクリップボードにコピーされました!
新規または既存のデプロイメントで fsGroupChangePolicy パラメーターを設定すると、管理する Pod にこのパラメーター値が適用されます。同様に、Statefulset でもこれを行うことができます。既存の Pod を編集して fsGroupChangePolicy を設定することはできませんが、新しい Pod を作成するときにこのパラメーターを設定することはできます。
この手順では、既存のデプロイメントで fsGroupChangePolicy パラメーターを設定する方法について説明します。
前提条件
- Red Hat OpenShift Service on AWS にアクセスできる。
手順
既存のデプロイメントで fsGroupChangePolicy パラメーターを設定するには、以下を実行します。
- Workloads > Deployments をクリックします。
- Deployment ページで、任意のデプロイメントをクリックします。
- Deployment details ページで、YAML タブをクリックします。
次のサンプルファイルを使用して、
spec.template.spec.securityContextの下にあるデプロイメントの YAML ファイルを編集します。fsGroupChangePolicyを設定するデプロイメント YAML ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
OnRootMismatchは、再帰的なパーミッション変更をスキップさせるため、Pod のタイムアウトの問題を回避するのに役立ちます。デフォルト値はAlwaysです。ボリュームがマウントされるたびに必ずボリュームの権限と所有権が変更されます。
- Save をクリックします。