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

これは未公開の文書です SUSE® Storage 1.12 (Dev).

PVCの所有権と権限

KubernetesはPVCのために2つの ボリュームモードをサポートしています:ファイルシステムとブロック。 ポッドがセキュリティコンテキストを定義し、Longhorn PVCを要求する場合、Kubernetesはボリュームモードに基づいてPVCの所有権と権限の変更を異なる方法で処理します。

ファイルシステムボリュームモードのLonghorn PVC

Longhorn CSIドライバー`csiDriver.spec.fsGroupPolicy`が`ReadWriteOnceWithFSType`に設定されているため、Kubeletは以下の方法でLonghorn PVCの所有権と権限を変更しようとします:

  1. `pod.spec.securityContext.fsGroup`を確認してください。

    • 空でない場合は、次のステップに進んでください。

    • 空の場合、Kubeletはボリュームの所有権と権限を変更しようとはしません。

  2. PVの`fsType`とPVCの`accessModes`を確認してください。

    • PVの`fsType`が定義されていて、PVCの`accessModes`リストに`ReadWriteOnce`が含まれている場合、次のステップに進んでください。

    • そうでない場合、Kubeletはボリュームの所有権と権限を変更しようとはしません。

  3. `pod.spec.securityContext.fsGroupChangePolicy`を確認してください。

    • `pod.spec.securityContext.fsGroupChangePolicy`が`always`または空に設定されている場合、Kubeletは以下のアクションを実行します:

      • ポッド内のコンテナのすべてのプロセスが補助グループID`pod.spec.securityContext.fsGroup`の一部であることを確認します。

      • ボリューム内で作成される新しいファイルがグループID`pod.spec.securityContext.fsGroup`に属することを確認します。

      • ボリュームがマウントされるたびに、ボリュームの権限と所有権を`pod.spec.securityContext.fsGroup`と同じグループIDに再帰的に変更します。

    • `pod.spec.securityContext.fsGroupChangePolicy`が`OnRootMismatch`に設定されている場合:

      • ボリュームのルートがすでに正しい権限(すなわち、グループID`pod.spec.securityContext.fsGroup`に属する)を持っている場合、再帰的な権限と所有権の変更はスキップされます。

      • そうでない場合、Kubeletはボリュームの権限と所有権を`pod.spec.securityContext.fsGroup`と同じグループIDに再帰的に変更します。

詳細については、以下を参照してください。

ブロックボリュームモードのLonghorn PVC

ブロックボリュームモードのPVCの場合、Kubeletはコンテナ内でブロックデバイスを利用可能にする際に、権限や所有権を変更しようとはしません。 ポッドがブロックデバイスに対して読み書き可能となる、またはコンテナをルートとして実行するためには、`pod.spec.securityContext`に正しいグループIDを設定する必要があります。

デフォルトでは、LonghornはブロックデバイスをグループID6に設定します。これは通常「ディスク」グループに関連付けられています。 したがって、ブロックボリュームモードのLonghorn PVCを使用するポッドは、`pod.spec.securityContext`でグループID6を設定するか、ルートとして実行する必要があります。 次に例を示します。

  1. `pod.spec.securityContext`でグループID6を設定するポッド

     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: longhorn-block-vol
     spec:
       accessModes:
         - ReadWriteOnce
       volumeMode: Block
       storageClassName: longhorn
       resources:
         requests:
           storage: 2Gi
     ---
     apiVersion: v1
     kind: Pod
     metadata:
       name: block-volume-test
       namespace: default
     spec:
       securityContext:
         runAsGroup: 1000
         runAsNonRoot: true
         runAsUser: 1000
         supplementalGroups:
         - 6
       containers:
         - name: block-volume-test
           image: ubuntu:20.04
           command: ["sleep", "360000"]
           imagePullPolicy: IfNotPresent
           volumeDevices:
             - devicePath: /dev/longhorn/testblk
               name: block-vol
       volumes:
         - name: block-vol
           persistentVolumeClaim:
             claimName: longhorn-block-vol
  2. ルートとして実行するポッド

     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: longhorn-block-vol
     spec:
       accessModes:
         - ReadWriteOnce
       volumeMode: Block
       storageClassName: longhorn
       resources:
         requests:
           storage: 2Gi
     ---
     apiVersion: v1
     kind: Pod
     metadata:
       name: block-volume-test
       namespace: default
     spec:
       containers:
         - name: block-volume-test
           image: ubuntu:20.04
           command: ["sleep", "360000"]
           imagePullPolicy: IfNotPresent
           volumeDevices:
             - devicePath: /dev/longhorn/testblk
               name: block-vol
       volumes:
         - name: block-vol
           persistentVolumeClaim:
             claimName: longhorn-block-vol