Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Dies ist eine unveröffentlichte Dokumentation für SUSE® Storage 1.12 (Dev).

PVC-Eigentum und Berechtigungen

Kubernetes unterstützt die 2 Volume-Modi für PVC: Dateisystem und Block. Wenn ein Pod den Sicherheitskontext definiert und ein Longhorn PVC anfordert, behandelt Kubernetes die Änderung des Eigentums und der Berechtigungen für das PVC je nach Volume-Modus unterschiedlich.

Longhorn PVC mit Dateisystem-Volume-Modus

Da der Longhorn CSI-Treiber csiDriver.spec.fsGroupPolicy auf ReadWriteOnceWithFSType eingestellt ist, versucht das Kubelet, das Eigentum und die Berechtigungen eines Longhorn PVC auf folgende Weise zu ändern:

  1. Überprüfen Sie pod.spec.securityContext.fsGroup.

    • Wenn nicht leer, fahren Sie mit dem nächsten Schritt fort.

    • Wenn leer, versucht das Kubelet nicht, das Eigentum und die Berechtigungen für das Volume zu ändern.

  2. Überprüfen Sie fsType des PV und accessModes des PVC.

    • Wenn fsType des PV definiert ist und die accessModes Liste des PVC ReadWriteOnce enthält, fahren Sie mit dem nächsten Schritt fort.

    • Andernfalls versucht das Kubelet nicht, das Eigentum und die Berechtigungen für das Volume zu ändern.

  3. Überprüfen Sie pod.spec.securityContext.fsGroupChangePolicy.

    • Wenn pod.spec.securityContext.fsGroupChangePolicy auf always oder leer gesetzt ist, führt das Kubelet die folgenden Aktionen aus:

      • Stellt sicher, dass alle Prozesse der Container im Pod Teil der zusätzlichen Gruppen-ID pod.spec.securityContext.fsGroup sind.

      • Stellt sicher, dass alle neuen Dateien, die im Volume erstellt werden, in der Gruppen-ID pod.spec.securityContext.fsGroup sind.

      • Ändert rekursiv die Berechtigungen und das Eigentum des Volumes, sodass es jedes Mal die gleiche Gruppen-ID wie pod.spec.securityContext.fsGroup hat, wenn das Volume gemountet wird.

    • Wenn pod.spec.securityContext.fsGroupChangePolicy auf OnRootMismatch gesetzt ist:

      • Wenn das Wurzelverzeichnis des Volumes bereits die richtigen Berechtigungen hat (d.h. zur Gruppen-ID pod.spec.securityContext.fsGroup gehört), wird die rekursive Änderung der Berechtigungen und des Eigentums übersprungen.

      • Andernfalls ändert das Kubelet rekursiv die Berechtigungen und das Eigentum des Volumes, sodass es die gleiche Gruppen-ID wie pod.spec.securityContext.fsGroup hat.

Weitere Informationen finden Sie unter:

Longhorn PVC mit Block-Volume-Modus

Für PVC mit Block-Volume-Modus versucht Kubelet niemals, die Berechtigungen und das Eigentum des Blockgeräts zu ändern, wenn es innerhalb des Containers verfügbar gemacht wird. Sie müssen in der pod.spec.securityContext die korrekte Gruppen-ID festlegen, damit der Pod auf das Blockgerät lesen und schreiben kann oder den Container als Root ausführen kann.

Standardmäßig setzt Longhorn das Blockgerät in die Gruppen-ID 6, die typischerweise mit der Gruppe "disk" assoziiert ist. Daher müssen Pods, die Longhorn PVC mit Block-Volume-Modus verwenden, entweder die Gruppen-ID 6 in der pod.spec.securityContext festlegen oder als Root ausgeführt werden. Beispiel:

  1. Pod, der die Gruppen-ID 6 in der pod.spec.securityContext festlegt

     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. Pod, der als Root ausgeführt wird

     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