Opcje magazynu dla aplikacji w usłudze Azure Kubernetes Service (AKS)

Aplikacje działające w usłudze Azure Kubernetes Service (AKS) mogą wymagać przechowywania i pobierania danych. Podczas gdy niektóre obciążenia aplikacji mogą używać lokalnego, szybkiego magazynu na niepotrzebnych, opróżnionych węzłach, inne wymagają magazynu, który utrzymuje się na bardziej regularnych woluminach danych na platformie Azure.

Może być konieczne:

  • Współużytkuj te same woluminy danych.
  • Ponownie dołącz woluminy danych, jeśli zasobnik zostanie ponownie zaplanowany na innym węźle.

Na koniec może być konieczne zbieranie i przechowywanie poufnych danych lub informacji o konfiguracji aplikacji w zasobnikach.

W tym artykule przedstawiono podstawowe pojęcia, które zapewniają magazyn do aplikacji w usłudze AKS:

Opcje magazynu dla aplikacji w klastrze usługi Azure Kubernetes Services (AKS)

Woluminy

Platforma Kubernetes zazwyczaj traktuje poszczególne zasobniki jako efemeryczne, jednorazowe zasoby. Aplikacje mają dostępne różne podejścia do używania i utrwalania danych. Wolumin reprezentuje sposób przechowywania, pobierania i utrwalania danych między zasobnikami i cyklem życia aplikacji.

Tradycyjne woluminy są tworzone jako zasoby platformy Kubernetes wspierane przez usługę Azure Storage. Możesz ręcznie utworzyć woluminy danych, które mają być przypisane bezpośrednio do zasobników, lub utworzyć je automatycznie. Woluminy danych mogą używać: dyski platformy Azure, Azure Files, Azure NetApp Files lub obiekty blob platformy Azure.

Uwaga

Sterownik CSI dysków platformy Azure ma limit 32 woluminów na węzeł. Inne usługi Azure Storage nie mają równoważnego limitu.

Azure Disks

Użyj usługi Azure Disks , aby utworzyć zasób Kubernetes DataDisk . Typy dysków obejmują:

  • Dyski w warstwie Ultra
  • Dyski SSD w warstwie Premium
  • Dyski SSD w warstwie Standardowa
  • Dyski HDD w warstwie Standardowa

Porada

W przypadku większości obciążeń produkcyjnych i programistycznych użyj dysku SSD w warstwie Premium.

Ponieważ dyski platformy Azure są instalowane jako ReadWriteOnce, są dostępne tylko dla jednego węzła. W przypadku woluminów magazynu, do których można uzyskiwać dostęp przez zasobniki w wielu węzłach jednocześnie, należy użyć Azure Files.

Azure Files

Użyj Azure Files, aby zainstalować udział bloku komunikatów serwera (SMB) w wersji 3.1.1 lub sieciowego systemu plików (NFS) w wersji 4.1 wspieranej przez konto magazynu platformy Azure do zasobników. Azure Files umożliwia udostępnianie danych w wielu węzłach i zasobnikach oraz korzystanie z nich:

  • Usługa Azure Premium Storage wspierana przez dyski SSD o wysokiej wydajności
  • Magazyn w warstwie Standardowa platformy Azure wspierany przez zwykłe dyski HDD

Azure NetApp Files

  • Ultra Storage
  • Premium Storage
  • Konto magazynu w warstwie Standardowa

Azure Blob Storage

Użyj Azure Blob Storage, aby utworzyć kontener magazynu obiektów blob i zainstalować go przy użyciu protokołu NFS w wersji 3.0 lub obiektu BlobFuse.

  • Blokowe obiekty blob

Typy woluminów

Woluminy Kubernetes reprezentują więcej niż tylko tradycyjny dysk do przechowywania i pobierania informacji. Woluminy Kubernetes mogą być również używane jako sposób wstrzykiwania danych do zasobnika do użytku przez kontenery.

Typowe typy woluminów w rozwiązaniu Kubernetes obejmują:

emptyDir

Często używane jako miejsce tymczasowe dla zasobnika. Wszystkie kontenery w zasobniku mogą uzyskiwać dostęp do danych na woluminie. Dane zapisywane w tym typie woluminu są utrwalane tylko przez okres istnienia zasobnika. Po usunięciu zasobnika wolumin zostanie usunięty. Ten wolumin zazwyczaj używa bazowego magazynu dysku węzła lokalnego, ale może również istnieć tylko w pamięci węzła.

wpis tajny

Możesz użyć woluminów tajnych do wstrzykiwania poufnych danych do zasobników, takich jak hasła.

  1. Utwórz wpis tajny przy użyciu interfejsu API platformy Kubernetes.
  2. Zdefiniuj zasobnik lub wdrożenie i zażądaj określonego wpisu tajnego.
    • Wpisy tajne są udostępniane tylko węzłom z zaplanowanym zasobnikem, który ich wymaga.
    • Wpis tajny jest przechowywany w plikach tmpfs, a nie zapisywanych na dysku.
  3. Po usunięciu ostatniego zasobnika w węźle wymagającym wpisu tajnego klucz tajny zostanie usunięty z plików tmpfs węzła.
    • Wpisy tajne są przechowywane w danej przestrzeni nazw i mogą być dostępne tylko przez zasobniki w tej samej przestrzeni nazw.

configMap

ConfigMap służy do wstrzykiwania właściwości pary klucz-wartość do zasobników, takich jak informacje o konfiguracji aplikacji. Zdefiniuj informacje o konfiguracji aplikacji jako zasób Kubernetes, łatwo aktualizowane i stosowane do nowych wystąpień zasobników podczas ich wdrażania.

Podobnie jak w przypadku używania wpisu tajnego:

  1. Utwórz ConfigMap przy użyciu interfejsu API Kubernetes.
  2. Zażądaj obiektu ConfigMap podczas definiowania zasobnika lub wdrożenia.
    • Obiekty ConfigMap są przechowywane w danej przestrzeni nazw i mogą być dostępne tylko przez zasobniki w tej samej przestrzeni nazw.

Trwałe woluminy

Woluminy zdefiniowane i utworzone w ramach cyklu życia zasobnika istnieją tylko do momentu usunięcia zasobnika. Zasobniki często oczekują, że ich magazyn pozostanie, jeśli zasobnik zostanie ponownie zaplanowany na innym hoście podczas zdarzenia konserwacji, zwłaszcza w statefulSets. Wolumin trwały (PV) to zasób magazynu utworzony i zarządzany przez interfejs API Kubernetes, który może istnieć poza okresem istnienia pojedynczego zasobnika.

Za pomocą dysków lub plików platformy Azure można podać wartość PersistentVolume. Jak wspomniano w sekcji Woluminy , wybór dysków lub plików jest często określany przez potrzebę współbieżnego dostępu do danych lub warstwy wydajności.

Woluminy trwałe w klastrze usługi Azure Kubernetes Services (AKS)

Element PersistentVolume można utworzyć statycznie przez administratora klastra lub dynamicznie utworzony przez serwer interfejsu API Kubernetes. Jeśli zasobnik jest zaplanowany i żąda obecnie niedostępnego magazynu, platforma Kubernetes może utworzyć bazowy magazyn usługi Azure Disk lub Files i dołączyć go do zasobnika. Aprowizacja dynamiczna używa klasy StorageClass do identyfikowania typu magazynu platformy Azure, który należy utworzyć.

Ważne

Woluminy trwałe nie mogą być współużytkowane przez zasobniki systemów Windows i Linux ze względu na różnice w obsłudze systemu plików między dwoma systemami operacyjnymi.

Klasy magazynu

Aby zdefiniować różne warstwy magazynu, takie jak Premium i Standardowa, można utworzyć klasę StorageClass.

Klasa StorageClass definiuje również zasady odzyskiwania. Usunięcie zasobnika i trwałego woluminu nie jest już wymagane, funkcja odzyskiwaniaPolicy kontroluje zachowanie bazowego zasobu usługi Azure Storage. Bazowy zasób magazynu można usunąć lub przechowywać w celu użycia z przyszłym zasobnikem.

W przypadku klastrów używających sterowników interfejsu magazynu kontenerów (CSI) są tworzone następujące dodatkowe elementy StorageClasses :

Uprawnienie Przyczyna
managed-csi Używa magazynu lokalnie nadmiarowego (LRS) usługi Azure StandardSSD do utworzenia dysku zarządzanego. Zasady odzyskiwania zapewniają usunięcie bazowego dysku platformy Azure po usunięciu trwałego woluminu, który go użył. Klasa magazynu konfiguruje również woluminy trwałe, aby można je było rozszerzać. Wystarczy edytować trwałe oświadczenie woluminu o nowy rozmiar.
managed-csi-premium Używa magazynu lokalnie nadmiarowego (LRS) platformy Azure w warstwie Premium do utworzenia dysku zarządzanego. Zasady odzyskiwania ponownie zapewniają usunięcie bazowego dysku platformy Azure po usunięciu trwałego woluminu, który go użył. Podobnie ta klasa magazynu umożliwia rozszerzenie woluminów trwałych.
azurefile-csi Używa usługi Azure Standard Storage do utworzenia udziału plików platformy Azure. Zasady odzyskiwania zapewniają usunięcie bazowego udziału plików platformy Azure po usunięciu trwałego woluminu, który go użył.
azurefile-csi-premium Używa usługi Azure Premium Storage do utworzenia udziału plików platformy Azure. Zasady odzyskiwania zapewniają usunięcie bazowego udziału plików platformy Azure po usunięciu trwałego woluminu, który go użył.
azureblob-nfs-premium Używa usługi Azure Premium Storage do tworzenia kontenera usługi Azure Blob Storage i nawiązywania połączenia przy użyciu protokołu NFS w wersji 3. Zasady odzyskiwania zapewniają usunięcie bazowego kontenera usługi Azure Blob Storage po usunięciu trwałego woluminu, który go użył.
azureblob-fuse-premium Używa usługi Azure Premium Storage do tworzenia kontenera usługi Azure Blob Storage i nawiązywania połączenia przy użyciu narzędzia BlobFuse. Zasady odzyskiwania zapewniają usunięcie bazowego kontenera usługi Azure Blob Storage po usunięciu trwałego woluminu, który go użył.

Jeśli nie określisz klasy StorageClass dla woluminu trwałego, zostanie użyta domyślna klasa StorageClass. Upewnij się, że woluminy korzystają z odpowiedniego magazynu potrzebnego podczas żądania woluminów trwałych.

Ważne

Począwszy od platformy Kubernetes w wersji 1.21, usługa AKS będzie używać tylko sterowników CSI i domyślnie. Klasa default będzie taka sama jak managed-csi

Klasę StorageClass można utworzyć na potrzeby dodatkowych potrzeb, używając polecenia kubectl. W poniższym przykładzie użyto Dyski zarządzane Premium i określono, że podstawowy dysk platformy Azure powinien zostać zachowany podczas usuwania zasobnika:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium-retain
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_LRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Uwaga

Usługa AKS uzgadnia domyślne klasy magazynu i zastąpi wszelkie zmiany wprowadzone w tych klasach magazynu.

Trwałe woluminy — oświadczenia

Element PersistentVolumeClaim żąda przechowywania określonej klasy StorageClass, trybu dostępu i rozmiaru. Serwer interfejsu API Kubernetes może dynamicznie aprowizować bazowy zasób usługi Azure Storage, jeśli żaden istniejący zasób nie może spełnić oświadczenia na podstawie zdefiniowanej klasy StorageClass.

Definicja zasobnika zawiera instalację woluminu po nawiązaniu połączenia woluminu z zasobnikem.

Oświadczenia trwałego woluminu w klastrze usługi Azure Kubernetes Services (AKS)

Po przypisaniu dostępnego zasobu magazynu do zasobnika żądającego magazynu element PersistentVolume jest powiązany z elementem PersistentVolumeClaim. Woluminy trwałe są mapowane na oświadczenia 1:1.

Poniższy przykładowy manifest YAML przedstawia oświadczenie trwałego woluminu, które używa klasy Managed-Premium StorageClass i żąda rozmiaru disk 5Gi :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium-retain
  resources:
    requests:
      storage: 5Gi

Podczas tworzenia definicji zasobnika należy również określić:

  • Oświadczenie trwałego woluminu w celu zażądania żądanego magazynu.
  • Aplikacja volumeMount umożliwia odczytywanie i zapisywanie danych.

Poniższy przykładowy manifest YAML pokazuje, jak można użyć poprzedniego oświadczenia trwałego woluminu do zainstalowania woluminu w lokalizacji /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      volumeMounts:
      - mountPath: "/mnt/azure"
        name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

W przypadku instalowania woluminu w kontenerze systemu Windows określ literę dysku i ścieżkę. Przykład:

...      
       volumeMounts:
        - mountPath: "d:"
          name: volume
        - mountPath: "c:\k"
          name: k-dir
...

Następne kroki

Aby zapoznać się ze skojarzonymi najlepszymi rozwiązaniami, zobacz Najlepsze rozwiązania dotyczące magazynu i tworzenia kopii zapasowych w usłudze AKS.

Aby zobaczyć, jak używać sterowników CSI, zobacz następujące artykuły z instrukcjami:

Aby uzyskać więcej informacji na temat podstawowych pojęć związanych z platformą Kubernetes i usługą AKS, zobacz następujące artykuły: