Verwenden von Alibaba Cloud Distributed Storage in einem selbstgebauten K8S-Cluster

Einführung

Dieser Artikel wurde am 14.06.2024 verfasst und erklärt, wie Alibaba Cloud Distributed Storage in einem selbstgebauten Cluster auf Alibaba Cloud verwendet werden kann. Am Ende des Artikels befinden sich Dokumentationslinks. Die offizielle Alibaba Cloud-Dokumentation ist auf Chinesisch verfasst, das Alibaba Cloud Storage-Plugin-Installationshandbuch befindet sich jedoch auf GitHub und ist derzeit nur auf Englisch verfügbar. Leser mit ausreichenden Kenntnissen sollten das Original so weit wie möglich lesen.

Installation des Storage-Plugins

  1. Erstellen Sie eine benutzerdefinierte Berechtigungsrichtlinie: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
  2. Erstellen Sie eine RAM-Rolle, erteilen Sie die benutzerdefinierte Berechtigungsrichtlinie und speichern Sie vorübergehend den accesskey und das secret
    1. kubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
  3. Installieren Sie den CSI-Treiber. Es gibt kein Helm Chart, daher kann die Installation nur lokal erfolgen (20240613).
    1. git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.git
    2. cd alibaba-cloud-csi-driver/deploy
    3. Wenn die Installation auf einem selbstgebauten Cluster auf Alibaba Cloud ECS erfolgt, können Sie den nächsten Befehl direkt ausführen. Wenn nicht, lesen Sie bitte selbst: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
    4. helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
  4. Bestätigung: watch kubectl get pods -n kube-system -l app=csi-plugin

Auswahl der Speichertypen

  • Die minimale Kapazität eines ECS-Cloud-Datenträgers beträgt 20 GB mit 3000 IOPS, was eine relativ große Kapazität darstellt und nicht sehr kostengünstig ist.
    • Dynamische Cloud-Datenträger-Speichervolumes
      • Offizielle Dokumentation:
        • Cloud-Datenträger unterstützen keine Verwendung über Verfügbarkeitszonen hinweg, sind nicht-geteilte Speicher und können nur von einem Pod gleichzeitig eingehängt werden. (In Tests kann sie von mehreren Pods desselben Deployments eingehängt werden)
        • Der Cloud-Datenträgertyp muss mit dem ECS-Typ übereinstimmen, um eingehängt werden zu können. Andernfalls schlägt das Einhängen fehl. Für die Übereinstimmungsbeziehung zwischen Cloud-Datenträgertypen und ECS-Typen siehe Instanz-Spezifikationsfamilien.
        • Bei der Anwendungsbereitstellung werden Cloud-Datenträger automatisch über StorageClass für PV gekauft. Wenn Sie bereits Cloud-Datenträger erworben haben, wird die Verwendung von statischen Cloud-Datenträger-Speichervolumes empfohlen.
        • Die angeforderte Größe des Cloud-Datenträgers darf den einzelnen Datenträger-Kapazitätsbereich nicht überschreiten.
        • Wenn ein Pod neu erstellt wird, wird der ursprüngliche Cloud-Datenträger neu eingehängt. Wenn der Pod aufgrund anderer Einschränkungen nicht in die ursprüngliche Verfügbarkeitszone geplant werden kann, befindet sich der Pod im Pending-Zustand.
        • Dynamisch erstellte Cloud-Datenträger sind Pay-as-you-go-Datenträger.
      • Weitere Testergebnisse:
        • Obwohl Cloud-Datenträger von mehreren Pods eingehängt werden können, kann nur ein Pod lesen und schreiben, während andere Pods nicht lesen und schreiben können. Daher kann accessModes in der PVC nur auf ReadWriteOnce gesetzt werden. Änderungen führen nicht zu korrekten Ergebnissen.
        • Wenn reclaimPolicy des StorageClass auf Delete gesetzt ist, wird der Cloud-Datenträger beim Löschen der PVC automatisch gelöscht.
        • Wenn reclaimPolicy des StorageClass auf Retain gesetzt ist, wird der Cloud-Datenträger beim Löschen der PVC nicht automatisch gelöscht. Er muss manuell im Cluster und in der Alibaba Cloud-Konsole gelöscht werden.
      • Es ist schwierig, geeignete Anwendungsfälle zu finden.
    • Statische Cloud-Datenträger-Speichervolumes
      • Offizielle Dokumentation:
        • Manuelles Erstellen von PV und PVC
        • Cloud-Datenträger unterstützen keine Verwendung über Verfügbarkeitszonen hinweg, sind nicht-geteilte Speicher und können nur von einem Pod gleichzeitig eingehängt werden.
        • Der Cloud-Datenträgertyp muss mit dem ECS-Typ übereinstimmen, um eingehängt werden zu können. Andernfalls schlägt das Einhängen fehl.
        • Sie können einen Cloud-Datenträger auswählen, der sich in derselben Region und Verfügbarkeitszone wie der Cluster befindet und im Zustand “Zum Einhängen bereit” ist.
  • NAS hat eine hohe Latenz bei Operationen, die beste Leistung liegt bei 2 ms, Tiefe-Speicherung bei 10 ms, nutzungsbasierte Abrechnung, höhere Lese-/Schreibleistung im Vergleich zum Object Storage OSS.
  • OSS-Speichervolumes, https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
    • OSS ist geteilter Speicher und kann gleichzeitig mehreren Pods gemeinsamen Speicherservice bereitstellen.
    • (20240613) Derzeit werden CentOS, Alibaba Cloud Linux, ContainerOS und Longxin-Betriebssysteme unterstützt.
    • Bei der Verwendung von Datenträgern muss jede Anwendung einen unabhängigen PV-Namen verwenden.
    • OSS-Datenträger sind FUSE-Dateisysteme, die mit dem ossfs-Datei zum Einhängen verwendet werden.
      • Geeignet für Lese-Szenarien wie das Lesen von Konfigurationsdateien, Videodateien, Bilddateien usw.
      • Nicht geeignet für Anwendungsszenarien zum Schreiben von Dateien. Für das Schreiben von Dateien wird empfohlen, das SDK zu verwenden oder den NAS-Speichervolumes-Service zu nutzen.
    • ossfs kann durch Anpassung der Konfigurationsparameter seine Leistung in Bezug auf Cache, Berechtigungen usw. optimieren.
    • ossfs-Nutzungsbeschränkungen
      • Zufällige oder anhängende Schreiboperationen führen dazu, dass alle Dateien neu geschrieben werden.
      • Aufgrund des Remote-Zugriffs auf den OSS-Server sind Metadatenoperationen wie list directory leistungsschwach.
      • Umbenennungsoperationen von Dateien und Ordnern sind nicht atomar.
      • Wenn mehrere Clients denselben OSS-Bucket einhängen, müssen die Benutzer das Verhalten der einzelnen Clients selbst koordinieren, z. B. das Vermeiden des Schreibens derselben Datei durch mehrere Clients.
      • Es werden keine Hardlinks unterstützt.
      • Bei CSI-Plugin-Versionen unter v1.20.7 werden nur lokale Änderungen erkannt, nicht jedoch externe Änderungen durch andere Clients oder Tools.
      • Um die Systemlast zu vermeiden, verwenden Sie dies nicht in Szenarien mit hohem Parallelitätsgrad beim Lesen und Schreiben.
  • Wenn es sich um einen gemischten Cluster handelt (einige Knoten gehören nicht zu Alibaba Cloud), können nur statische NAS- und OSS-Volumes verwendet werden.
  • Cloud-Datenträger, NAS und OSS haben jeweils regionale Einschränkungen.

Zusammenfassend lässt sich sagen, dass Cloud-Datenträger als ganze Festplatte beantragt und eingehängt werden und nicht geteilt werden können. OSS hat eine Dateigranularität und weist bei hochgradig parallelem Lesen und Schreiben Leistungsprobleme auf, wobei die unterstützten Systeme begrenzt sind.

  • Cloud-Datenträger eignen sich für Szenarien wie Datenbanken, die viel Platz und hohe Leistung benötigen.
  • Andere Szenarien mit geringen Leistungsanforderungen können NAS wählen.
  • OSS ist nicht für hochgradig paralleles Schreiben in Alibaba Cloud-Clustern geeignet, kann jedoch für paralleles Lesen verwendet werden.

Die offiziellen Alibaba Cloud-Dokumente befinden sich an ungleichmäßigen Positionen und widersprechen sich teilweise. Die Leser müssen die Dokumente anhand ihres Datums selbst beurteilen. Einige Merkmale, die in älteren Dokumenten als nicht unterstützte deklariert wurden, könnten mit den neueren Versionen bereits unterstützt werden. Daher ist es notwendig, selbst einige Versuche zu unternehmen.

Vorgehensweise

Dies ist die offizielle Anleitung von Alibaba Cloud. Nachdem Sie das Alibaba Cloud Storage-Plugin wie oben beschrieben installiert haben, können Sie gemäß Verwenden von statischen NAS-Speichervolumes vorgehen, um die Bereitstellung zu testen.

Hinweis: K3s-Benutzer stoßen auf Probleme mit local-path-storage. Mögliche Fehlermeldungen:

  • failed to provision volume with StorageClass “local-path”: claim.Spec.Selector is not supported
  • Waiting for a volume to be created either by the external provisioner ’localplugin.csi.alibabacloud.com’ or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.

Setzen Sie storageClassName in persistentVolumeClaim auf leer, um die Verwendung des von k3s standardmäßig verwendeten local-path-storage zu vermeiden.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas
  storageClassName: ""

Referenzen