使用 Alibaba Cloud Distributed Storage w własnoręcznym klastrze K8S

Wprowadzenie

Artykuł napisany 2024.06.14, prezentuje jak wykorzystać Alibaba Cloud Distributed Storage w własnoręcznie zbudowanym klastrze na platformie Alibaba Cloud. Na końcu umieszczono linki do dokumentacji, gdzie dokumenty oficjalne Alibaba Cloud są w języku chińskim, natomiast instalacja wtyczki magazynu Alibaba Cloud na githubie ma obecnie tylko dokumentację angielską. Zaleca się, aby Czytelnicy z odpowiednimi możliwościami starali się czytać oryginał.

Instalacja wtyczki magazynu

  1. Utwórz niestandardową strategię uprawnień: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
  2. Utwórz rolę RAM, przydziel niestandardową strategię uprawnień, tymczasowo zapisz accesskey i secret
    1. kubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
  3. Zainstaluj sterownik CSI, nie ma helm charta, można go zainstalować tylko lokalnie (20240613).
    1. git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.git
    2. cd alibaba-cloud-csi-driver/deploy
    3. Jeśli instalacja odbywa się w klastrze ECS na Alibaba Cloud, można wykonać poniższe polecenie bezpośrednio, jeśli nie, proszę samodzielnie przeczytać: 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. Potwierdź, watch kubectl get pods -n kube-system -l app=csi-plugin

Odniesienie do wyboru typu magazynu

  • Minimalna pojemność dysku ECS wynosi 20 GB, IOPS 3000, co jest dużą pojemnością i nie jest zbyt opłacalna.
    • Dynamiczny wolumin dysku
      • Dokumentacja oficjalna:
        • Dysk nie obsługuje użytkowania między strefami dostępności, jest magazynem niewspółdzielonym i może być zamontowany tylko przez jeden Pod. (W rzeczywistości może być zamontowany przez wiele Podów tego samego deploymentu)
        • Typ dysku i typ ECS muszą pasować do siebie, aby można go było zamontować, w przeciwnym razie montowanie nie powiedzie się. Szczegóły dotyczące relacji dopasowania typów dysku i typów ECS znajdują się w rodzinie specyfikacji instancji.
        • Podczas wdrażania aplikacji, dysk zostaje zakupiony automatycznie poprzez StorageClass tworzący PV. Jeśli dysk został już zakupiony, zaleca się użycie statycznego woluminu dysku.
        • Wymagana pojemność dysku nie może przekraczać zakresu pojemności pojedynczego dysku.
        • Gdy Pod zostanie odtworzony, pierwotny dysk zostanie zamontowany ponownie. Jeśli z powodu innych ograniczeń nie będzie można zaplanować go w pierwotnej strefie dostępności, Pod przejdzie w stan oczekiwania (Pending).
        • Dynamicznie tworzony dysk jest dyskiem opłacanym za zużycie.
      • Inne podsumowanie testów:
        • Chociaż dysk może być zamontowany przez wiele Podów, tylko jeden Pod może czytać i zapisywać, inne Pod-y nie mogą czytać i zapisywać. W związku z tym accessModes w PVC może być ustawione tylko na ReadWriteOnce, zmiana nie da poprawnych wyników.
        • Jeśli reclaimPolicy w StorageClass jest ustawione na Delete, to przy usuwaniu PVC dysk również zostanie automatycznie usunięty.
        • Jeśli reclaimPolicy w StorageClass jest ustawione na Retain, to przy usuwaniu PVC dysk nie zostanie automatycznie usunięty, trzeba go będzie ręcznie usunąć z klastra i konsoli Alibaba Cloud.
      • Trudno znaleźć odpowiednie zastosowanie.
    • Statyczny wolumin dysku
      • Dokumentacja oficjalna:
        • Ręczne tworzenie PV i PVC
        • Dysk nie obsługuje użytkowania między strefami dostępności, jest magazynem niewspółdzielonym i może być zamontowany tylko przez jeden Pod.
        • Typ dysku i typ ECS muszą pasować do siebie, aby można go było zamontować, w przeciwnym razie montowanie nie powiedzie się.
        • Można wybrać dysk w stanie oczekiwania na podłączenie, który znajduje się w tym samym regionie i strefie dostępności co klaster.
  • Opóźnienia operacji NAS są duże, najlepszy wynik to 2 ms, głębokie przechowywanie 10 ms, rozliczane za zużycie, wydajność odczytu i zapisu jest wyższa niż magazyn obiektowy OSS
  • Wolumin OSS, https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
    • OSS to magazyn współdzielony, może jednocześnie dostarczać usługi współdzielonego magazynu dla wielu Podów.
    • (20240613) Obecnie obsługuje systemy CentOS, Alibaba Cloud Linux, ContainerOS i Longxin.
    • Podczas korzystania z woluminu danych, każda aplikacja używa niezależnej nazwy PV.
    • Wolumin danych OSS jest systemem plików FUSE zamontowanym przy użyciu pliku ossfs.
      • Odpowiedni do scenariuszy odczytu plików. Na przykład, odczyt plików konfiguracyjnych, plików wideo, plików obrazów itp.
      • Nie nadaje się do scenariuszy aplikacji zapisujących pliki. W przypadku zapisu plików zaleca się użycie SDK lub usługi woluminu magazynu NAS.
    • ossfs może zoptymalizować swoje działanie w zakresie cache’owania i uprawnień poprzez dostosowanie parametrów konfiguracyjnych
    • Ograniczenia ossfs
      • Operacje losowego lub dołączającego zapisu plików spowodują ponowne zapisanie wszystkich plików.
      • Ze względu na konieczność zdalnego dostępu do serwera OSS, wydajność operacji metadanych takich jak list directory jest słaba.
      • Operacje zmiany nazwy plików i folderów nie są atomowe.
      • Gdy wiele klientów montuje ten sam Bucket OSS, muszą one samodzielnie koordynować swoje działania, np. unikać zapisywania tego samego pliku przez wiele klientów.
      • Nie obsługuje twardych linków (Hard Link).
      • Gdy wersja CSI plugin jest poniżej v1.20.7, wykrywa tylko zmiany lokalne, a nie zewnętrzne zmiany dokonane przez inne klientów lub narzędzia.
      • Aby uniknąć wzrostu obciążenia systemu, nie należy używać go w scenariuszach o wysokiej współbieżności odczytu i zapisu.
  • Jeśli jest to klaster hybrydowy (część węzłów nie należy do Alibaba Cloud), to można używać tylko statycznych woluminów NAS i OSS.
  • Dysk, NAS i OSS mają ograniczenia regionalne.

Podsumowanie: dysk jest przydzielany i montowany w postaci całego dysku, co nie jest wygodne do współdzielenia. Operacje OSS są wykonywane na poziomie plików, ale istnieją problemy z wydajnością przy wysokiej współbieżności odczytu i zapisu, a obsługiwane systemy są ograniczone.

  • Dysk jest odpowiedni dla scenariuszy wymagających dużej przestrzeni i wysokiej wydajności, takich jak bazy danych.
  • Wszystko inne o niskich wymaganiach wydajnościowych może wybrać NAS.
  • OSS nie nadaje się do scenariuszy zapisu o wysokiej współbieżności w klastrach Alibaba Cloud, ale może być używane w scenariuszach współbieżnego odczytu.

Dokumentacja oficjalna Alibaba Cloud ma problemy z niejednolitością położenia i wzajemnymi sprzecznościami, czytelnicy muszą samodzielnie ocenić na podstawie dat dokumentów, niektóre cechy, które zostały oznaczone jako nieobsługiwane, mogą być już obsługiwane wraz z aktualizacją wersji, trzeba samodzielnie przeprowadzić pewne próby.

Kroki operacyjne

Jest to instrukcja oficjalna Alibaba Cloud, po zainstalowaniu wtyczki magazynu Alibaba Cloud zgodnie z powyższym przewodnikiem, można przejść do Use NAS Static Storage Volume w celu przeprowadzenia wdrożenia i testowania.

Uwaga: Użytkownicy k3s mogą napotkać problem z local-path-storage, informacje o błędach mogą obejmować,

  • 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.

Należy ustawić storageClassName na pusty w persistentVolumeClaim, aby uniknąć użycia domyślnego local-path-storage w k3s.

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

Referencje