Udostępnij przez


Sterownik CSI usługi Azure Storage i aprowizowanie woluminów

Sterownik interfejsu CSI (Container Storage Interface) usługi Azure Blob Storage to sterownik zgodny ze specyfikacją CSI używany przez usługę Azure Kubernetes Service (AKS) do zarządzania cyklem życia usługi Azure Blob Storage. CSI jest standardem dotyczącym udostępniania dowolnych systemów przechowywania bloków i plików dla konteneryzowanych obciążeń w Kubernetes.

Dzięki wdrożeniu i użyciu interfejsu CSI usługa AKS może teraz zapisywać, wdrażać i iterować wtyczki, aby uwidocznić nowe lub ulepszać istniejące systemy magazynowania na platformie Kubernetes. Korzystanie ze sterowników CSI w usłudze AKS pozwala uniknąć konieczności modyfikowania podstawowego kodu Kubernetes i oczekiwania na jego cykle wydania.

Podczas montowania usługi Azure Blob Storage jako systemu plików w kontenerze lub podzie, umożliwia to korzystanie z magazynu obiektów blob z wieloma aplikacjami, które przetwarzają ogromne ilości niestrukturalnych danych. Przykład:

  • Dane pliku dziennika
  • Obrazy, dokumenty oraz wideo lub audio w transmisji strumieniowej
  • Dane odzyskiwania po awarii

Aplikacje uzyskują dostęp do danych przechowywanych w usłudze Azure Blob Storage przy użyciu programu BlobFuse lub protokołu sieciowego systemu plików (NFS) 3.0. Przed wprowadzeniem sterownika CSI dla Azure Blob storage jedyną opcją było ręczne zainstalowanie nieobsługiwanego sterownika, aby uzyskać dostęp do Blob storage z aplikacji działającej na AKS. Gdy sterownik CSI usługi Azure Blob Storage jest włączony w usłudze AKS, istnieją dwie wbudowane klasy magazynu:

  • azureblob-fuse-premium
  • Azure Blob NFS Premium

Aby utworzyć klaster usługi AKS z obsługą sterowników CSI, zobacz Sterowniki CSI w usłudze AKS. Aby dowiedzieć się więcej o różnicach w dostępie między poszczególnymi typami magazynu platformy Azure przy użyciu protokołu NFS, zobacz Porównanie dostępu do usług Azure Files, Blob Storage i Azure NetApp Files z systemem plików NFS.

Sterownik interfejsu CSI (Container Storage Interface) usługi Azure Disks to sterownik zgodny ze specyfikacją CSI używany przez usługę Azure Kubernetes Service (AKS) do zarządzania cyklem życia usługi Azure Disk.

CSI jest standardem dotyczącym udostępniania dowolnych systemów przechowywania bloków i plików dla konteneryzowanych obciążeń w Kubernetes. Dzięki wdrożeniu i użyciu interfejsu CSI usługa AKS może teraz zapisywać, wdrażać i iterować wtyczki, aby uwidocznić nowe lub ulepszać istniejące systemy magazynowania na platformie Kubernetes. Korzystanie ze sterowników CSI w usłudze AKS pozwala uniknąć konieczności modyfikowania podstawowego kodu Kubernetes i oczekiwania na jego cykle wydania. Aby utworzyć klaster AKS z obsługą sterowników CSI, zobacz Włączanie sterownika CSI w usłudze AKS.

Aby uzyskać więcej informacji na temat woluminów Kubernetes, zapoznaj się z Opcjami magazynowania dla aplikacji w usłudze AKS.

Uwaga / Notatka

Sterowniki wewnątrzdrzewne odnoszą się do bieżących sterowników magazynu, które należą do podstawowego kodu Kubernetes, w odróżnieniu od nowych sterowników CSI, które pełnią rolę rozszerzeń.

Sterownik interfejsu CSI (Container Storage Interface) usługi Azure Files to sterownik zgodny ze specyfikacją CSI używany przez usługę Azure Kubernetes Service (AKS) do zarządzania cyklem życia udziałów plików platformy Azure. CSI jest standardem dotyczącym udostępniania dowolnych systemów przechowywania bloków i plików dla konteneryzowanych obciążeń w Kubernetes.

Dzięki wdrożeniu i użyciu interfejsu CSI usługa AKS może teraz zapisywać, wdrażać i iterować wtyczki, aby uwidocznić nowe lub ulepszać istniejące systemy magazynowania na platformie Kubernetes. Korzystanie ze sterowników CSI w usłudze AKS pozwala uniknąć konieczności modyfikowania podstawowego kodu Kubernetes i oczekiwania na jego cykle wydania.

Aby utworzyć klaster usługi AKS z obsługą sterowników CSI, zobacz Włączanie sterowników CSI w usłudze AKS.

Uwaga / Notatka

Sterowniki wbudowane odnoszą się do bieżących sterowników magazynu, które są częścią podstawowego kodu Kubernetes, w porównaniu z nowymi sterownikami CSI, które są pluginami.

Funkcje sterownika Azure CSI

Sterownik CSI usługi Azure Blob Storage obsługuje następujące funkcje:

  • BlobFuse
  • Protokół NFS 3.0

Oprócz funkcji wbudowanych sterowników, sterownik Azure Disk CSI obsługuje następujące funkcje:

  • Ulepszenia wydajności podczas dołączania i odłączania dysków współbieżnych

    • Wbudowane sterowniki dołączają lub odłączają dyski sekwencyjnie, podczas gdy sterowniki CSI dołączają lub odłączają dyski partiami. W przypadku dołączania wielu dysków do jednego węzła występuje znaczna poprawa.
  • Obsługiwane są dyski SSD w warstwie Premium w wersji 1 i 2.

    • PremiumV2_LRS obsługuje tylko tryb buforowania None
  • Obsługa dysków przechowywania strefowo nadmiarowego (ZRS)

    • Premium_ZRS obsługiwane są StandardSSD_ZRS typy dysków. Dysk ZRS można zaplanować w strefie lub w węźle bez strefy, bez ograniczenia, że wolumin dysku powinien być kolokowany w tej samej strefie co dany węzeł. Aby uzyskać więcej informacji, w tym obsługiwane regiony, zobacz artykuł Magazyn strefowo nadmiarowy dla dysków zarządzanych.
  • Migawka woluminu

  • Klon woluminu

  • Zmienianie rozmiaru woluminu trwałego dysku bez przestoju

Uwaga / Notatka

W zależności od używanej jednostki SKU maszyny wirtualnej sterownik CSI dysku platformy Azure może mieć limit woluminu na węzeł. W przypadku niektórych zaawansowanych maszyn wirtualnych (na przykład 16 rdzeni) limit wynosi 64 woluminy na węzeł. Aby zidentyfikować limit dla jednostki SKU maszyny wirtualnej, zapoznaj się z kolumną Maksymalna liczba dysków danych dla każdej oferowanej jednostki SKU maszyny wirtualnej. Aby uzyskać listę oferowanych jednostek SKU maszyn wirtualnych i ich odpowiednie szczegółowe limity pojemności, zobacz Rozmiary maszyn wirtualnych ogólnego przeznaczenia.

Wymagania wstępne

  • Musisz mieć zainstalowany i skonfigurowany interfejs wiersza polecenia platformy Azure w wersji 2.42 lub nowszej. Aby dowiedzieć się, jaka wersja jest używana, uruchom polecenie az --version. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. Jeśli zainstalowano rozszerzenie interfejsu wiersza polecenia aks-preview platformy Azure, pamiętaj, aby zaktualizować rozszerzenie do najnowszej wersji, wywołując polecenie az extension update --name aks-preview.

  • Wykonaj następujące kroki, aby wyczyścić sterownik typu open source , jeśli wcześniej zainstalowano sterownik open source CSI Blob Storage w celu uzyskania dostępu do usługi Azure Blob Storage z klastra.

  • Tożsamość płaszczyzny sterowania klastrem usługi AKS (nazwa klastra usługi AKS) jest dodawana do roli Kontrybutor w sieci wirtualnej i grupie zabezpieczeń sieciowych.

  • Aby obsługiwać konto usługi [Azure Data Lake Storage Gen2][azure-datalake-storage-account] (ADLS) podczas korzystania z instalacji blobFuse, wykonaj następujące czynności:

    • Aby utworzyć konto usługi ADLS przy użyciu sterownika w dynamicznej aprowizacji, określ isHnsEnabled: "true" w parametrach klasy magazynu.
    • Aby umożliwić dostęp do konta usługi ADLS za pomocą programu BlobFuse w statycznej aprowizacji, należy określić opcję montowania --use-adls=true w trwałym woluminie.
    • Jeśli zamierzasz włączyć konto magazynu z hierarchiczną przestrzenią nazw, istniejące woluminy trwałe (PV) powinny zostać ponownie zainstalowane z opcją --use-adls=true instalacji.
  • Domyślnie pamięć podręczna BlobFuse znajduje się w /mnt katalogu . Jeśli jednostka SKU maszyny wirtualnej udostępnia dysk tymczasowy, katalog /mnt jest montowany na dysku tymczasowym. Jeśli jednak jednostka SKU maszyny wirtualnej nie udostępnia dysku tymczasowego, katalog /mnt jest zamontowany na dysku systemu operacyjnego, możesz ustawić opcję montowania --tmp-path=, aby określić inny katalog pamięci podręcznej.

Uwaga / Notatka

Jeśli serwer blobfuse-proxy nie jest włączony podczas instalacji sterownika open source, odinstalowanie sterownika typu open source zakłóca istniejące instalacje blobfuse. Jednak instalacja systemu plików NFS pozostaje nienaruszona.

  • Musisz mieć klaster AKS z włączonym sterownikiem dysku Azure CSI. Sterownik CSI jest domyślnie włączony w klastrach usługi AKS z uruchomioną platformą Kubernetes w wersji 1.21 lub nowszej.

  • Interfejs wiersza polecenia platformy Azure w wersji 2.37.0 lub nowszej jest zainstalowany i skonfigurowany. Uruchom az --version, aby znaleźć wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • kubectl Narzędzie wiersza polecenia jest zainstalowane i skonfigurowane do łączenia się z klastrem AKS.

  • Klasa magazynu skonfigurowana do używania sterownika CSI dysku platformy Azure (disk.csi.azure.com).

  • Sterownik CSI dysku platformy Azure ma limit woluminu na węzeł. Liczba woluminów zmienia się w zależności od rozmiaru węzła lub puli węzłów. Uruchom polecenie kubectl get, aby określić liczbę woluminów, które można przydzielić na węzeł:

    kubectl get CSINode <nodename> -o yaml
    

    Jeśli limit woluminów na węzeł stanowi problem dla twojego obciążenia roboczego, rozważ użycie usługi Azure Container Storage do trwałego przechowywania danych zamiast sterowników CSI.

Wymagania ogólne:

  • Musisz mieć klaster AKS (Azure Kubernetes Service) z włączonym sterownikiem CSI Azure Files. Sterownik CSI usługi Azure Files jest domyślnie włączony w klastrach usługi AKS z uruchomioną platformą Kubernetes w wersji 1.21 lub nowszej.

  • Interfejs wiersza polecenia platformy Azure w wersji 2.37.0 lub nowszej jest zainstalowany i skonfigurowany. Aby sprawdzić wersję, uruchom polecenie az --version. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • kubectl Narzędzie linii poleceń jest zainstalowane i skonfigurowane do łączenia się z klastrem AKS.

  • Klasa magazynu skonfigurowana do używania sterownika CSI usługi Azure Files (file.csi.azure.com).

  • Podczas wybierania między udziałami plików w warstwie Standardowa i Premium, ważne jest, aby zrozumieć model udostępniania i wymagania oczekiwanego wzorca użycia, jaki planujesz zastosować w usłudze Azure Files. Aby uzyskać więcej informacji, zobacz Wybieranie warstwy wydajności usługi Azure Files na podstawie wzorców użycia.

Wymagania dotyczące udziału plików sieciowych (NFS):

  • Tożsamość płaszczyzny kontrolnej klastru AKS (nazwa klastru AKS) jest przypisywana do roli Kontrybutor w sieci wirtualnej i GrupieZabezpieczeńSieci.

  • Jednostka usługi lub tożsamość usługi zarządzanej (MSI) klastra usługi AKS musi zostać dodana do roli Współautor na koncie magazynu.

Wymagania dotyczące tożsamości zarządzanej:

  • Upewnij się, że tożsamość kubelet przypisana przez użytkownika ma przypisaną Storage File Data SMB MI Admin rolę na koncie magazynu. Jeśli używasz własnego konta przechowywania, musisz przypisać Storage File Data SMB MI Admin rolę do tożsamości Kubelet przypisanej użytkownikowi na tym koncie przechowywania.

  • Jeśli sterownik CSI utworzy konto przechowywania, przyznaj rolę Storage File Data SMB MI Admin grupie zasobów, w której znajduje się konto przechowywania.

  • Jeśli używasz domyślnej, predefiniowanej tożsamości Kubelet przypisanej przez użytkownika, to już posiada wymaganą Storage File Data SMB MI Admin rolę w grupie zasobów zarządzanego węzła.

Uwaga / Notatka

Sterownik CSI usługi Azure File zezwala tylko na instalowanie udziałów plików SMB przy użyciu uwierzytelniania opartego na kluczach (NTLM v2), dlatego nie obsługuje maksymalnego profilu zabezpieczeń ustawień udziału plików platformy Azure. Z drugiej strony instalowanie udziałów plików NFS nie wymaga uwierzytelniania opartego na kluczach.

Włączanie sterownika CSI w nowym lub istniejącym klastrze AKS

Za pomocą Azure CLI można włączyć sterownik CSI Blob Storage w nowym lub istniejącym klastrze AKS, zanim skonfigurujesz wolumen trwały do użycia przez zasobniki w klastrze.

  1. Aby włączyć sterownik w nowym klastrze, dołącz parametr --enable-blob-driver za pomocą polecenia az aks create, jak pokazano w poniższym przykładzie:

    az aks create \
        --enable-blob-driver \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --generate-ssh-keys
    
  2. Aby włączyć sterownik w istniejącym klastrze, dołącz --enable-blob-driver parametr za pomocą polecenia az aks update jak pokazano w poniższym przykładzie:

    az aks update --enable-blob-driver --name myAKSCluster --resource-group myResourceGroup
    

Zostanie wyświetlony monit o potwierdzenie, że nie zainstalowano sterownika Blob CSI typu open source. Po potwierdzeniu wykonanie tej akcji może potrwać kilka minut. Po zakończeniu powinien być widoczny w danych wyjściowych stan włączenia sterownika w klastrze. Poniższy przykład przypomina sekcję wskazującą wyniki poprzedniego polecenia:

"storageProfile": {
  "blobCsiDriver": {
    "enabled": true
  },
  ...
}

Wyłączanie sterownika CSI w istniejącym klastrze AKS

Za pomocą interfejsu wiersza polecenia platformy Azure można wyłączyć sterownik CSI usługi Blob Storage w istniejącym klastrze usługi AKS po usunięciu woluminu trwałego z klastra.

  1. Aby wyłączyć sterownik w istniejącym klastrze, dołącz --disable-blob-driver parametr za pomocą polecenia az aks update, jak pokazano w poniższym przykładzie:

    az aks update --disable-blob-driver --name myAKSCluster --resource-group myResourceGroup
    

Używanie woluminu trwałego na potrzeby magazynu

Kubernetes przypisuje wolumin trwały (PV) jako zasób magazynowy jednemu lub większej liczbie zasobników. Pamięci trwałe można aprowizować dynamicznie za pośrednictwem platformy Kubernetes lub statycznie jako administrator.

Jeśli wiele zasobników wymaga współbieżnego dostępu do tego samego woluminu magazynu, możesz użyć usługi Azure Blob Storage do nawiązania połączenia przy użyciu NFS lub BlobFuse. W tym artykule pokazujemy, jak dynamicznie utworzyć kontener Azure Blob Storage do wykorzystania przez wiele zasobników w klastrze AKS.

Aby uzyskać więcej informacji na temat woluminów Kubernetes, zapoznaj się z Opcjami magazynowania dla aplikacji w usłudze AKS.

W tym artykule pokazano, jak dynamicznie utworzyć sieć PV z dyskiem platformy Azure do użycia przez pojedynczy zasobnik w klastrze usługi AKS.

Jeśli wiele zasobników wymaga współbieżnego dostępu do tego samego wolumenu pamięci masowej, możesz użyć usługi Azure Files do nawiązania połączenia przy użyciu bloku komunikatów serwera (SMB) lub systemu plików sieciowych (NFS). W tym artykule pokazano, jak dynamicznie utworzyć udział Azure Files do wykorzystania przez wiele zasobników w klastrze AKS.

Dynamicznie aprowizowany wolumin: Użyj tego podejścia, jeśli chcesz, aby platforma Kubernetes automatycznie tworzyć zasoby magazynu i zarządzać nimi. Jest to idealne rozwiązanie w scenariuszach, w których potrzebujesz skalowania na żądanie, preferuj infrastrukturę jako kod i chcesz zminimalizować ręczne kroki konfiguracji.

Wolumin aprowizowany statycznie: Wybierz tę metodę, jeśli masz już konto usługi Azure Blob Storage lub kontener, którego chcesz użyć. Zapewnia większą kontrolę nad konfiguracją magazynu, dostępem i cyklem życia oraz jest odpowiedni, gdy konieczne jest nawiązanie połączenia z istniejącymi zasobami lub ponowne użycie magazynu w wielu klastrach lub obciążeniach.

Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą aprowizować co najmniej jeden wolumin trwały, który zawiera szczegóły magazynu obiektów blob do użycia przez obciążenie. Żądanie utworzenia trwałego wolumenu (PVC) używa obiektu klasy pamięci do dynamicznego przydzielania kontenera usługi Azure Blob Storage.

Aby aprowizować wolumin trwały przy użyciu usługi Azure Blob Storage z podaną klasą magazynu, wykonaj następujące kroki:

  1. StorageClass Utwórz manifest, zapisując następujący kod YAML w pliku o nazwie blob-fuse-sc.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-fuse
    provisioner: blob.csi.azure.com
    parameters:
      skuName: Premium_LRS  # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS
      protocol: fuse2
      networkEndpointType: privateEndpoint
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - -o allow_other
      - --file-cache-timeout-in-seconds=120
      - --use-attr-cache=true
      - --cancel-list-on-mount-seconds=10  # prevent billing charges on mounting
      - -o attr_timeout=120
      - -o entry_timeout=120
      - -o negative_timeout=120
      - --log-level=LOG_WARNING  # LOG_WARNING, LOG_INFO, LOG_DEBUG
      - --cache-size-mb=1000  # Default will be 80% of available memory, eviction will happen beyond specified value.
    
  2. Aby utworzyć klasę pamięci masowej w klastrze, zastosuj StorageClass, uruchamiając następujące polecenie:

    kubectl apply -f blob-fuse-sc.yaml
    

Utwórz PVC przy użyciu wbudowanej klasy przechowywania

Klasa magazynu służy do definiowania sposobu tworzenia kontenera usługi Azure Blob Storage. Konto magazynu jest tworzone automatycznie w grupie zasobów węzła do użycia z klasą magazynu do przechowywania kontenera usługi Azure Blob Storage. Wybierz jedną z następujących jednostek SKU nadmiarowości pamięci masowej Azure dla skuName:

  • Standard_LRS: Standardowa lokalna nadmiarowość przechowywania
  • Premium_LRS: magazyn lokalnie nadmiarowy w warstwie Premium
  • Standard_ZRS: magazyn strefowo nadmiarowy w warstwie Standardowa
  • Premium_ZRS: magazyn strefowo nadmiarowy w warstwie Premium
  • Standard_GRS: Standardowa pamięć geograficznie z nadmiarową dostępnością
  • Standard_RAGRS: magazyn geograficznie nadmiarowy z dostępem do odczytu w warstwie Standardowa

Kiedy używasz sterowników CSI magazynu w usłudze AKS, dostępne są dwa inne wbudowane sterowniki StorageClasses, które korzystają z magazynu Azure Blob CSI.

Zasady odzyskiwania w obu klasach pamięci masowej zapewniają, że podstawowy magazyn obiektów Blob w Azure zostanie usunięty, gdy odpowiedni PV zostanie usunięty. Klasy pamięci masowej konfigurują również kontener, aby można go było rozszerzać domyślnie, ponieważ set allowVolumeExpansion parametr ma wartość true.

Uwaga / Notatka

Zmniejszanie woluminów trwałych nie jest obsługiwane.

Użyj polecenia kubectl get sc , aby wyświetlić klasy magazynu. W przedstawionym przykładzie pokazano dostępne klasy pamięci azureblob-fuse-premium i azureblob-nfs-premium w klastrze AKS.

NAME                     PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
azureblob-fuse-premium   blob.csi.azure.com   Delete          Immediate           true                   23h
azureblob-nfs-premium    blob.csi.azure.com   Delete          Immediate           true                   23h

Aby użyć tych klas magazynowania, utwórz PVC i odpowiedni pod, który do nich odwołuje i je wykorzystuje. PVC służy do automatycznego przydzielania zasobów dyskowych na podstawie klasy pamięci masowej. PVC można utworzyć przy użyciu jednej z wbudowanych klas pamięci masowej lub niestandardowej klasy pamięci masowej. Ten PVC tworzy kontener w usłudze Azure Blob Storage z określoną jednostką SKU, rozmiarem oraz protokołem. Podczas tworzenia definicji zasobnika określa się PVC w celu zażądania żądanej przestrzeni dyskowej.

Element PVC używa obiektu klasy magazynu do dynamicznego aprowizowania kontenera usługi Azure Blob Storage. Poniższy kod YAML może służyć do utworzenia 5 GB PVC z dostępem ReadWriteMany przy użyciu wbudowanej klasy przechowywania. Aby uzyskać więcej informacji na temat trybów dostępu, zobacz dokumentację dotyczącą trwałego woluminu Kubernetes .

  1. Utwórz plik o nazwie blob-nfs-pvc.yaml i skopiuj następujący kod YAML:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Utwórz element PVC za pomocą polecenia kubectl create :

    kubectl create -f blob-nfs-pvc.yaml
    

Po zakończeniu zostanie utworzony kontener usługi Blob Storage. Możesz użyć polecenia kubectl get , aby wyświetlić stan PVC:

kubectl get pvc azure-blob-storage

Dane wyjściowe polecenia przypominają następujący przykład:

NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
azure-blob-storage   Bound    pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68   5Gi        RWX            azureblob-nfs-premium       92m

Zamontuj PCV

Poniższy kod YAML tworzy zasobnik, który używa magazynu azure-blob-storage PVC do zainstalowania usługi Azure Blob Storage w ścieżce /mnt/blob .

  1. Utwórz plik o nazwie blob-nfs-pvi skopiuj następujący kod YAML. Upewnij się, że claimName jest zgodny z PVC utworzonym w poprzednim kroku.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
      - name: mypod
        image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/blob"
          name: volume
          readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-blob-storage
    
  2. Utwórz pod za pomocą polecenia kubectl apply

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Po uruchomieniu zasobnika uruchom następujące polecenie, aby utworzyć nowy plik o nazwie test.txt.

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Aby sprawdzić, czy dysk jest poprawnie zainstalowany, uruchom następujące polecenie i sprawdź, czy plik jest widoczny test.txt w danych wyjściowych:

    kubectl exec mypod -- ls /mnt/blob
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    test.txt
    

Tworzenie niestandardowej klasy magazynu obiektów blob platformy Azure

Domyślne klasy magazynu odpowiadają najbardziej typowym scenariuszom, ale nie wszystkim. W niektórych przypadkach możesz chcieć dostosować własną klasę przechowywania z własnymi parametrami. W tej sekcji przedstawiono dwa przykłady z pierwszym przy użyciu protokołu NFS, a drugi przy użyciu narzędzia BlobFuse.

W tym przykładzie poniższy manifest konfiguruje instalowanie kontenera usługi Blob Storage przy użyciu protokołu NFS. Użyj go, aby dodać tags parametr .

  1. Utwórz plik o nazwie blob-nfs-sc.yamli wklej następujący przykładowy manifest:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azureblob-nfs-premium
    provisioner: blob.csi.azure.com
    parameters:
      protocol: nfs
      tags: environment=Development
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - nconnect=4
    
  2. Utwórz klasę pamięci za pomocą polecenia kubectl apply

    kubectl apply -f blob-nfs-sc.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    storageclass.storage.k8s.io/blob-nfs-premium created
    

Instalowanie systemu plików NFS lub blobFuse PV

W tej sekcji zainstalujesz sieć PV przy użyciu protokołu NFS lub programu BlobFuse.

Instalowanie magazynu obiektów blob przy użyciu protokołu NFS w wersji 3 nie jest uwierzytelniane przy użyciu klucza konta. Klaster AKS musi znajdować się w tej samej lub równorzędnej sieci wirtualnej co węzeł agenta. Jedynym sposobem zabezpieczenia danych na koncie przechowywania jest użycie sieci wirtualnej i innych ustawień zabezpieczeń sieci. Aby uzyskać więcej informacji na temat konfigurowania dostępu systemu plików NFS do konta magazynu, zobacz Instalowanie usługi Blob Storage przy użyciu protokołu sieciowego systemu plików (NFS) 3.0.

W poniższym przykładzie pokazano, jak zainstalować kontener usługi Blob Storage jako wolumin trwały przy użyciu protokołu NFS.

  1. Utwórz plik o nazwie pv-blob-nfs.yaml i skopiuj go w następującym języku YAML. W obszarze storageClass, zaktualizuj resourceGroup, storageAccount, i containerName.

    Uwaga / Notatka

    Wartość volumeHandle w pliku YAML powinna być unikatowym identyfikatorem woluminu dla każdego kontenera obiektów blob, który jest identyczny w klastrze.

    Znaki # i / są zastrzeżone do użytku wewnętrznego i nie można ich używać.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: blob.csi.azure.com
      name: pv-blob
    spec:
      capacity:
        storage: 1Pi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain  # If set as "Delete" container would be removed after pvc deletion
      storageClassName: azureblob-nfs-premium
      mountOptions:
        - nconnect=4
      csi:
        driver: blob.csi.azure.com
        # make sure volumeid is unique for every identical storage blob container in the cluster
        # character `#` and `/` are reserved for internal use and cannot be used in volumehandle
        volumeHandle: account-name_container-name
        volumeAttributes:
          resourceGroup: resourceGroupName
          storageAccount: storageAccountName
          containerName: containerName
          protocol: nfs
    

    Uwaga / Notatka

    Chociaż atrybut pojemnościinterfejsu API platformy Kubernetes jest obowiązkowy, ta wartość nie jest używana przez sterownik CSI usługi Azure Blob Storage, ponieważ można elastycznie zapisywać dane do momentu osiągnięcia limitu pojemności konta magazynu. Wartość atrybutu capacity jest używana tylko do dopasowywania rozmiaru między PVs i PVCs. Zalecamy użycie fikcyjnej wysokiej wartości. Pod widzi zamontowany wolumin o fikcyjnym rozmiarze 5 Petabajtów.

  2. Uruchom następujące polecenie, aby utworzyć wolumin trwały przy użyciu polecenia kubectl create odwołującego się do utworzonego wcześniej pliku YAML:

    kubectl create -f pv-blob-nfs.yaml
    
  3. pvc-blob-nfs.yaml Utwórz plik za pomocą elementu PersistentVolumeClaim. Przykład:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Uruchom następujące polecenie, aby utworzyć żądanie trwałego woluminu używając polecenia kubectl create, odwołując się do wcześniej utworzonego pliku YAML.

    kubectl create -f pvc-blob-nfs.yaml
    

Utwórz zasobnik

Poniższy kod YAML tworzy zbiornik, który używa wcześniej utworzonego PV lub PVC o nazwie pvc-blob, aby zamontować magazyn Azure Blob w ścieżce /mnt/blob.

  1. Utwórz plik o nazwie nginx-pod-blob.yamli skopiuj go w następującym pliku YAML. Upewnij się, że claimName jest zgodny z elementem PVC utworzonym w poprzednim kroku podczas tworzenia PV dla NFS lub BlobFuse.

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-blob
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
          name: nginx-blob
          volumeMounts:
            - name: blob01
              mountPath: "/mnt/blob"
              readOnly: false
      volumes:
        - name: blob01
          persistentVolumeClaim:
            claimName: pvc-blob
    
  2. Uruchom następujące polecenie, aby utworzyć poda i zamontować PVC przy użyciu polecenia kubectl create:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Uruchom następujące polecenie, aby utworzyć interaktywną sesję powłoki z pod, aby sprawdzić, czy magazyn blob jest zamontowany.

    kubectl exec -it nginx-blob -- df -h
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    Filesystem      Size  Used Avail Use% Mounted on
    ...
    blobfuse         14G   41M   13G   1% /mnt/blob
    ...
    

Utwórz zestaw stanowy

Aby upewnić się, że obciążenie robocze zachowuje swoją objętość pamięci pomimo ponownego uruchamiania lub wymiany zasobników, użyj StatefulSet. StatefulSets upraszczają proces kojarzenia trwałej pamięci z zasobnikami, dzięki czemu nowe zasobniki utworzone w celu zastąpienia tych, które zakończyły się niepowodzeniem, mogą automatycznie uzyskiwać dostęp do tych samych woluminów. W poniższych przykładach pokazano, jak skonfigurować zestaw stanowy dla usługi Blob Storage przy użyciu narzędzia BlobFuse lub protokołu NFS.

  1. Utwórz plik o nazwie azure-blob-nfs-ss.yaml i skopiuj go w następującym języku YAML.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/azurelinux/base/nginx:1.25
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Utwórz element StatefulSet za pomocą polecenia kubectl create.

    kubectl create -f azure-blob-nfs-ss.yaml
    

Dynamiczne parametry klasy przechowywania PVC

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania niestandardowej klasy magazynu dynamicznego PVC.

Name Description Example Mandatory Wartość domyślna
skuName Określ typ konta usługi Azure Storage (alias: storageAccountType). Standard_LRS, , Premium_LRS, , Standard_GRSStandard_RAGRS Nie. Standard_LRS
lokalizacja Określ lokalizację platformy Azure. eastus Nie. Jeśli jest pusty, sterownik używa tej samej nazwy lokalizacji co bieżący klaster.
resourceGroup Określ nazwę grupy zasobów platformy Azure. myResourceGroup Nie. Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster.
storageAccount Określ nazwę konta usługi Azure Storage. nazwaKontaPrzechowywania Nie. Jeśli określona nazwa konta magazynu nie zostanie podana, sterownik szuka odpowiedniego konta magazynu zgodnego z ustawieniami konta w tej samej grupie zasobów. Jeśli nie można odnaleźć pasującego konta przechowywania, zostanie utworzone nowe. Jeśli jednak zostanie określona nazwa konta magazynu, konto magazynu musi już istnieć.
networkEndpointType 1 Określ typ punktu końcowego sieci dla konta magazynu utworzonego przez sterownik. Jeśli określono prywatny punkt końcowy, dla konta magazynowego zostanie utworzony prywatny punkt końcowy. W innych przypadkach punkt końcowy usługi jest tworzony dla protokołu NFS. privateEndpoint Nie. W przypadku klastra AKS dodaj nazwę klastra AKS do roli Współtwórca w grupie zasobów hostującej sieć wirtualną.
protokół Określ metodę montowania BlobFuse lub NFSv3. fuse, nfs Nie. fuse
containerName Określ istniejącą nazwę kontenera (katalogu). kontener Nie. Jeśli jest pusty, sterownik tworzy nową nazwę kontenera, zaczynając od pvc-fuse dla programu BlobFuse lub pvc-nfs NFS w wersji 3.
containerNamePrefix Określ prefiks katalogu usługi Azure Storage utworzony przez sterownik. mój Nie. Może zawierać tylko małe litery, cyfry, łączniki i długość powinny być mniejsze niż 21 znaków.
serwer Określ nazwę domeny konta usługi Azure Storage. Istniejąca nazwa domeny DNS konta magazynu, na przykład <storage-account>.blob.core.windows.net. Nie. Jeśli jest pusty, sterownik używa domyślnej <storage-account>.blob.core.windows.net lub innej suwerennej nazwy domeny DNS konta magazynu w chmurze.
allowBlobPublicAccess Zezwól lub odmów publicznego dostępu do wszystkich obiektów blob lub kontenerów dla konta magazynowego utworzonego przez sterownik. true,false Nie. false
storageEndpointSuffix Określ sufiks punktu końcowego usługi Azure Storage. core.windows.net Nie. Jeśli jest pusty, sterownik używa domyślnego sufiksu punktu końcowego przechowywania zgodnie ze środowiskiem chmury.
tags [Tagi][az-tags] zostaną utworzone na nowym koncie magazynowym. Format tagu: "foo=aaa,bar=bbb" Nie. ""
matchTags Dopasuj tagi, gdy sterownik próbuje znaleźć odpowiednie konto magazynu. true,false Nie. false

1 Jeśli konto magazynu jest tworzone przez sterownik, wystarczy określić networkEndpointType: privateEndpoint parametr w klasie magazynu. Sterownik CSI tworzy prywatny punkt końcowy i prywatną strefę DNS (o nazwie privatelink.blob.core.windows.net) wraz z kontem. Jeśli używasz własnego konta magazynu, musisz utworzyć prywatny punkt końcowy dla konta magazynu. Jeśli używasz usługi Azure Blob Storage w izolowanym klastrze sieciowym, musisz utworzyć niestandardową klasę magazynu za pomocą polecenia networkEndpointType: privateEndpoint.

Statyczne parametry przydziału PV

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania statycznego PV.

Name Description Example Mandatory Wartość domyślna
volumeHandle Określ wartość, która może być używana przez sterownik do unikatowego identyfikowania kontenera obiektów blob magazynu w klastrze. Zalecanym sposobem utworzenia unikatowej wartości jest połączenie globalnie unikatowej nazwy konta magazynu i nazwy kontenera: {account-name}_{container-name}.

Znaki # i / są zarezerwowane do użytku wewnętrznego i nie mogą być używane w uchwycie woluminu.
Tak
volumeAttributes.resourceGroup Określ nazwę grupy zasobów platformy Azure. myResourceGroup Nie. Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster.
volumeAttributes.storageAccount Określ istniejącą nazwę konta usługi Azure Storage. nazwaKontaPrzechowywania Tak
volumeAttributes.containerName Określ istniejącą nazwę kontenera. kontener Tak
volumeAttributes.protocol Określ montowanie BlobFuse lub montowanie NFS v3. fuse, nfs Nie. fuse

Tworzenie dysków trwałych Azure przy użyciu wbudowanych klas magazynowania

Klasa magazynu służy do definiowania sposobu dynamicznego tworzenia jednostki magazynu za pomocą pv. Aby uzyskać więcej informacji na temat klas magazynu Kubernetes, zobacz Klasy magazynu Kubernetes.

Jeśli używasz sterownika Azure Disk CSI w usłudze AKS, są jeszcze dwa wbudowane moduły, które korzystają ze sterownika magazynu Azure Disk CSI. Inne klasy magazynu CSI są tworzone obok klas magazynu domyślnie wbudowanych w klaster.

  • managed-csi: tworzy dyski zarządzane przy użyciu dysków SSD w warstwie Standardowa platformy Azure z magazynem lokalnie nadmiarowym (LRS). W przypadku wersji 1.29 Kubernetes dla klastrów AKS wdrożonych w wielu strefach dostępności, ta klasa magazynu używa Azure Standard SSD z magazynem strefowo nadmiarowym (ZRS) do tworzenia zarządzanych dysków.

  • managed-csi-premium: Tworzy dyski zarządzane przy użyciu Azure Premium LRS. Począwszy od platformy Kubernetes w wersji 1.29, w przypadku klastrów usługi AKS obejmujących wiele stref dostępności ta klasa magazynu automatycznie używa usługi Azure Premium ZRS do tworzenia dysków zarządzanych.

Począwszy od platformy Kubernetes w wersji 1.29, podczas wdrażania klastrów usługi Azure Kubernetes Service (AKS) w wielu strefach dostępności usługa AKS używa teraz magazynu strefowo nadmiarowego (ZRS) do tworzenia dysków zarządzanych w wbudowanych klasach magazynu.

  • ZRS zapewnia synchroniczną replikację zarządzanych dysków Azure w wielu strefach dostępności w wybranym regionie. Ta strategia nadmiarowości zwiększa odporność aplikacji i zabezpiecza dane przed awariami centrum danych.

  • Należy jednak pamiętać, że magazyn strefowo nadmiarowy (ZRS) jest bardziej kosztowny w porównaniu z magazynem lokalnie nadmiarowym (LRS). Jeśli optymalizacja kosztów jest priorytetem, możesz utworzyć nową klasę magazynu z parametrem nazwy jednostki SKU LRS i użyć jej w trwałym oświadczeniu woluminu.

Zmniejszenie rozmiaru PVC nie jest obsługiwane z powodu ryzyka utraty danych. Istniejącą klasę magazynu można edytować przy użyciu kubectl edit sc polecenia lub utworzyć własną niestandardową klasę magazynu. Jeśli na przykład chcesz użyć dysku o rozmiarze 4 TiB, musisz utworzyć klasę magazynu, która definiuje cachingmode: None , ponieważ [buforowanie dysku nie jest obsługiwane dla dysków 4 TiB i większych][disk-host-cache-setting]. Aby uzyskać więcej informacji na temat klas magazynu i tworzenia własnej klasy magazynu, zobacz Opcje magazynu dla aplikacji w usłudze AKS.

Zasady odzyskiwania w obu klasach magazynowych zapewniają, że bazowe dyski Azure zostaną usunięte po usunięciu odpowiedniego PV. Klasy przechowywania konfigurują również woluminy PV, aby można je było rozszerzać. Wystarczy edytować PVC do nowego rozmiaru.

Aby użyć tych klas magazynowania, utwórz PVC oraz odpowiedni pod, który je wykorzystuje. PVC służy do automatycznego przydzielania pamięci na podstawie klasy pamięci. Dla utworzenia dysku zarządzanego platformy Azure dla żądanej jednostki SKU i rozmiaru, PVC może użyć jednej z predefiniowanych klas magazynu lub klasy magazynu zdefiniowanej przez użytkownika. Podczas tworzenia definicji zasobnika określa się PVC w celu zażądania żądanej przestrzeni dyskowej.

Uwaga / Notatka

Żądania wolumenów trwałych są określone w GiB, ale dyski zarządzane platformy Azure są rozliczane na podstawie SKU dla konkretnego rozmiaru. Te jednostki SKU wahają się od 32GiB dla dysków S4 lub P4 do 32TiB dla dysków S80 lub P80 (w wersji zapoznawczej). Wydajność przepływności i liczby operacji we/wy na sekundę dysku zarządzanego w warstwie Premium zależy zarówno od jednostki SKU, jak i rozmiaru wystąpienia węzłów w klastrze usługi AKS. Aby uzyskać więcej informacji, zobacz Cennik i wydajność dysków zarządzanych.

Za pomocą kubectl get sc polecenia można wyświetlić wstępnie utworzone klasy magazynu. W poniższym przykładzie przedstawiono wstępnie utworzone klasy magazynu dostępne w klastrze usługi AKS:

kubectl get sc

Dane wyjściowe polecenia przypominają następujący przykład:

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

PVC automatycznie przydziela pamięć masową na podstawie klasy pamięci masowej. W takim przypadku PVC może użyć jednej ze wstępnie utworzonych klas magazynu do utworzenia dysku zarządzanego platformy Azure w warstwie Standardowa lub Premium.

  1. Utwórz plik o nazwie azure-pvc.yaml i skopiuj go w następującym manifeście. Oświadczenie żąda dysku o nazwie azure-managed-disk o rozmiarze 5 GB z dostępem ReadWriteOnce. Klasa przechowywania managed-csi jest określona jako klasa przechowywania.

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

    Wskazówka

    Aby utworzyć dysk korzystający z magazynu w warstwie Premium, użyj storageClassName: managed-csi-premium zamiast managed-csi.

  2. Utwórz żądanie trwałego woluminu za pomocą polecenia kubectl apply i określ plik azure-pvc.yaml.

    kubectl apply -f azure-pvc.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/azure-managed-disk created
    

Zastosowanie PVC do poda

Po utworzeniu żądania trwałego woluminu należy upewnić się, że ma on stan Pending. Stan Pending wskazuje, że jest gotowy do użycia przez zasobnik.

  1. Zweryfikuj status PVC za pomocą polecenia kubectl describe pvc.

    kubectl describe pvc azure-managed-disk
    

    Dane wyjściowe polecenia przypominają następujący skrócony przykład:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Utwórz plik o nazwie azure-pvc-disk.yaml i skopiuj go w następującym manifeście. Ten manifest tworzy podstawowy pod NGINX, który używa żądania trwałego woluminu o nazwie azure-managed-disk do zamontowania dysku Azure na ścieżce /mnt/azure. W przypadku kontenerów systemu Windows Server określ konwencję mountPath ścieżki systemu Windows, taką jak "D:".

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: "/mnt/azure"
              name: volume
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  3. Utwórz pod przy użyciu polecenia kubectl apply.

    kubectl apply -f azure-pvc-disk.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    pod/mypod created
    
  4. Masz teraz uruchomiony zasobnik z zamontowanym dyskiem /mnt/azure Azure w katalogu. Sprawdź konfigurację zasobnika za pomocą polecenia kubectl describe.

    kubectl describe pod mypod
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
       default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
     Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

Dynamiczne parametry klasy magazynu dla kontrolerów PVC

Poniższa tabela zawiera parametry, których możesz użyć do zdefiniowania niestandardowej klasy pamięci masowej dla Twoich PVC.

Name Meaning Dostępna wartość Mandatory Wartość domyślna
skuName Typ konta magazynowania usługi Azure Disks (alias: storageAccountType) Standard_LRS, Premium_LRS, , StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS Nie. StandardSSD_LRS
fsType Typ systemu plików ext4, ext3, , ext2xfs, btrfs dla systemu Linux, ntfs dla systemu Windows Nie. ext4 dla systemu Linux, ntfs dla systemu Windows
cachingMode [Ustawienie pamięci podręcznej hosta dysku danych platformy Azure][disk-host-cache-setting](PremiumV2_LRS i UltraSSD_LRS obsługują None tylko tryb buforowania) None, ReadOnlyReadWrite Nie. ReadOnly
resourceGroup Określanie grupy zasobów dla dysków platformy Azure Nazwa istniejącej grupy zasobów Nie. Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster usługi AKS
DiskIOPSReadWrite [Dysk UltraSSD][ultra-ssd-disks] lub [Dysk SSD w warstwie Premium v2][premiumv2_lrs_disks] możliwości IOPS (minimum: 2 IOPS/GiB) 100~160000 Nie. 500
DiskMBpsReadWrite [UltraSSD][ultra-ssd-disks] lub [Premium SSD v2][premiumv2_lrs_disks] Przepustowość (minimum: 0,032/GiB) 1~2000 Nie. 100
Rozmiar logicznego sektora Rozmiar sektora logicznego w bajtach dla dysku ultra. Obsługiwane wartości to 512 ad 4096. Wartość domyślna to 4096. 512, 4096 Nie. 4096
tags Dysk Azure [tagi][azure-tags] Format tagu: key1=val1,key2=val2 Nie. ""
diskEncryptionSetID ResourceId zestawu szyfrowania dysku do użycia w celu [włączenia szyfrowania danych w spoczynku][szyfrowanie dysków] Formacie: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} Nie. ""
typ szyfrowania dysku Typ szyfrowania zestawu szyfrowania dysku. EncryptionAtRestWithCustomerKey (domyślnie), EncryptionAtRestWithPlatformAndCustomerKeys Nie. ""
przyspieszaczZapisuWłączony [Akcelerator zapisu na dyskach platformy Azure][azure-disk-write-accelerator] true, false Nie. ""
polityka dostępu do sieci Właściwość NetworkAccessPolicy, której celem jest zapobieganie utworzeniu sygnatury dostępu współdzielonego (SAS) identyfikatora URI dla dysku lub migawki. AllowAll, DenyAllAllowPrivate Nie. AllowAll
ID dostępu do dysku Identyfikator zasobu DiskAccess platformy Azure do korzystania z prywatnych punktów końcowych na dyskach Nie. ``
Włączanie Bursting [Włącz skalowanie na żądanie][on-demand-bursting] poza aprowizowany cel wydajności dysku. Skalowanie na żądanie powinno być stosowane tylko do dysku w warstwie Premium i rozmiaru dysku > 512 GB. Dyski Ultra i udostępniane nie są obsługiwane. "Wyburzanie jest domyślnie wyłączone." true, false Nie. false
userAgent User agent służy do [przypisania użycia klienta][customer-usage-attribution] Nie. Wygenerowany agent użytkownika jest sformatowany jako driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Określ identyfikator subskrypcji platformy Azure, w którym są tworzone dyski platformy Azure. Identyfikator subskrypcji Azure Nie. Jeśli nie jest pusty, resourceGroup należy podać.

Statyczne parametry provisioningu dla PV

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania pv.

Name Meaning Dostępna wartość Mandatory Wartość domyślna
volumeHandle URI dysku Azure /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Tak N/A
volumeAttributes.fsType Typ systemu plików ext4, ext3, , ext2xfs, btrfs dla systemu Linux, ntfs dla systemu Windows Nie. ext4 dla systemu Linux, ntfs dla systemu Windows
volumeAttributes.partition Numer partycji istniejącego dysku (obsługiwany tylko w systemie Linux) 1, 23 Nie. Puste (bez partycji)
— upewnij się, że format partycji jest podobny -part1
volumeAttributes.cachingMode (atrybuty wolumenu: tryb buforowania) [Ustawienie pamięci podręcznej hosta dysku][disk-host-cache-setting] None, ReadOnlyReadWrite Nie. ReadOnly

Tworzenie niestandardowej klasy magazynowania dysku platformy Azure

Domyślne klasy magazynu są odpowiednie dla najbardziej typowych scenariuszy. W niektórych przypadkach możesz chcieć dostosować klasę przechowywania do swoich preferencji, używając własnych parametrów. Na przykład możesz zmienić klasę volumeBindingMode .

Można użyć volumeBindingMode: Immediate klasy, która gwarantuje, że jej działanie zachodzi natychmiast po utworzeniu żądania trwałego wolumenu (PVC). Jeśli pule węzłów są ograniczone topologią, na przykład w przypadku korzystania ze stref dostępności, woluminy PV będą powiązane lub aprowidowane bez znajomości wymagań dotyczących planowania zasobnika.

Aby rozwiązać ten scenariusz, można użyć volumeBindingMode: WaitForFirstConsumer, które opóźnia powiązanie i aprowizację PV do momentu utworzenia zasobnika korzystającego z PVC. Takie podejście gwarantuje, że wolumin trwały (PV) jest przydzielany w tej samej strefie dostępności lub topologii zgodnie z ograniczeniami harmonogramu poda. Domyślne klasy przechowywania używają klasy volumeBindingMode: WaitForFirstConsumer.

  1. Utwórz plik o nazwie sc-azuredisk-csi-waitforfirstconsumer.yaml, a następnie wklej następujący manifest. Klasa przechowywania jest taka sama jak nasza klasa managed-csi, ale z innym typem volumeBindingMode. Przykład:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: azuredisk-csi-waitforfirstconsumer
    provisioner: disk.csi.azure.com
    parameters:
      skuname: StandardSSD_LRS
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    
  2. Utwórz klasę pamięci, uruchamiając polecenie kubectl apply i określ sc-azuredisk-csi-waitforfirstconsumer.yaml plik konfiguracyjny:

    kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
    

Dowiedz się więcej o migawkach woluminów

Sterownik CSI dysku platformy Azure obsługuje migawki woluminów, umożliwiając przechwytywanie stanu woluminów trwałych w określonych punktach w czasie na potrzeby operacji tworzenia kopii zapasowych i przywracania. Migawki woluminów umożliwiają tworzenie kopii migawkowej danych trwałych w konkretnym momencie bez przerywania działania aplikacji. Tych migawek można użyć do utworzenia nowych woluminów lub przywrócenia istniejących do poprzedniego stanu.

Można utworzyć dwa typy migawek:

  • Pełne migawki: przechwyć pełny stan dysku.

  • Migawki przyrostowe: Przechwytywanie tylko zmian od ostatniej migawki, oferujące lepszą efektywność przechowywania i oszczędności kosztów. Migawki przyrostowe są domyślnym zachowaniem, gdy parametr incremental jest ustawiony na true w Twojej VolumeSnapshotClass.

Poniższa tabela zawiera szczegółowe informacje dotyczące tych parametrów.

Name Meaning Dostępna wartość Mandatory Wartość domyślna
resourceGroup Grupa zasobów do przechowywania zdjęć migawek ISTNIEJĄCA GRUPA ZASOBÓW Nie. Jeśli nie zostaną określone, migawki są przechowywane w tej samej grupie zasobów co źródłowe dyski Azure
przyrostowa Tworzenie pełnej lub przyrostowej migawki true, false Nie. true
tags Tagi usługi Azure Disks Format tagu: "key1=val1,key2=val2" Nie. ""
userAgent Agent użytkownika używany do przypisywania użycia przez klienta Nie. Sformatowany user-agent wygenerowany driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Określanie identyfikatora subskrypcji platformy Azure, w którym są tworzone dyski platformy Azure Identyfikator subskrypcji Azure Nie. Jeśli nie jest puste, resourceGroup należy podać wartość , incremental należy ustawić jako false

Migawki woluminów obsługują następujące scenariusze:

  • Tworzenie kopii zapasowych i przywracanie: Utwórz kopie zapasowe danych aplikacji stanowych w konkretnym momencie i przywracaj je w razie potrzeby.
  • Klonowanie danych: Klonuj istniejące woluminy, aby utworzyć nowe woluminy trwałe z tymi samymi danymi.
  • Odzyskiwanie po awarii: szybkie odzyskiwanie po utracie lub uszkodzeniu danych.

Utwórz migawkę woluminu

Uwaga / Notatka

Przed kontynuowaniem upewnij się, że aplikacja nie zapisuje danych na dysku źródłowym.

  1. Aby uzyskać przykład tej możliwości, utwórz klasę migawki woluminu za pomocą polecenia kubectl apply :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
    
  2. Utwórz migawkę woluminu z PVC utworzonego wcześniej w artykule.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
    
  3. Aby sprawdzić, czy migawka została utworzona poprawnie, uruchom następujące polecenie:

    kubectl describe volumesnapshot azuredisk-volume-snapshot
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    Name:         azuredisk-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T05:27:58Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  714582
      Self Link:         /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
      UID:               dd953ab5-6c24-42d4-ad4a-f33180e0ef87
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azuredisk
      Volume Snapshot Class Name:      csi-azuredisk-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-dd953ab5-6c24-42d4-ad4a-f33180e0ef87
      Creation Time:                       2020-08-31T05:27:59Z
      Ready To Use:                        true
      Restore Size:                        10Gi
    Events:                                <none>
    

Tworzenie nowego PVC na podstawie migawki woluminu

Możesz utworzyć nowy element PVC na podstawie migawki woluminu.

  1. Użyj migawki utworzonej w poprzednim kroku, a następnie utwórz nowy element PVC i nowy zasobnik , aby go wykorzystać:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    pod/nginx-restored created
    
  2. Aby upewnić się, że jest to ten sam element PVC utworzony wcześniej, sprawdź zawartość, uruchamiając następujące polecenie:

    kubectl exec nginx-restored -- ls /mnt/azuredisk
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    lost+found
    outfile
    test.txt
    

Nadal możemy zobaczyć nasz wcześniej utworzony plik test.txt zgodnie z oczekiwaniami.

Klonowanie woluminów

Sklonowany wolumin jest definiowany jako duplikat istniejącego woluminu Kubernetes. Aby uzyskać więcej informacji na temat klonowania woluminów na platformie Kubernetes, zobacz klonowanie woluminów.

  1. Utwórz sklonowany wolumin z utworzonego wcześniejazuredisk-pvc oraz nowy zasobnik do jego wykorzystania.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/pvc-azuredisk-cloning created
    pod/nginx-restored-cloning created
    
  2. Zawartość sklonowanego woluminu można sprawdzić, uruchamiając następujące polecenie i potwierdzając utworzenie pliku test.txt :

    kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    lost+found
    outfile
    test.txt
    

Zmienianie rozmiaru trwałego dysku w Azure bez przestoju

Możesz zażądać większego woluminu dla obiektu PVC. Edytuj obiekt PVC i określ większy rozmiar. Ta zmiana wyzwala rozszerzenie woluminu bazowego, który wspiera PV.

Uwaga / Notatka

Nowy PV nigdy nie jest tworzony w celu spełnienia roszczenia. Zamiast tego zmieniany jest rozmiar istniejącego woluminu.

W usłudze AKS wbudowana managed-csi klasa magazynu już umożliwia rozszerzanie, więc użyj wcześniej utworzonego. PVC zażądał 10-GiB trwałego wolumenu. Możesz to potwierdzić, uruchamiając następujące polecenie:

kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk

Dane wyjściowe polecenia przypominają następujący przykład:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        9.8G   42M  9.8G   1% /mnt/azuredisk
  1. Rozwiń PVC, zwiększając spec.resources.requests.storage pole, uruchamiając następujące polecenie:

    kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
    

    Uwaga / Notatka

    Zmniejszanie woluminów fizycznych nie jest obecnie obsługiwane. Próba zastosowania istniejącego pvc o mniejszym rozmiarze niż bieżący prowadzi do następującego komunikatu o błędzie:

    The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/pvc-azuredisk patched
    
  2. Uruchom następujące polecenie, aby potwierdzić zwiększenie rozmiaru woluminu:

    kubectl get pv
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
    pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            Delete           Bound    default/pvc-azuredisk     managed-csi             2d2h
    (...)
    
  3. A po kilku minutach uruchom następujące polecenia, aby potwierdzić rozmiar PVC:

    kubectl get pvc pvc-azuredisk
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            managed-csi    2d2h
    
  4. Uruchom następujące polecenie, aby potwierdzić rozmiar dysku wewnątrz zasobnika:

    kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc         15G   46M   15G   1% /mnt/azuredisk
    

Jeśli zasobnik ma wiele kontenerów, możesz określić kontener, uruchamiając następujące polecenie:

kubectl exec -it nginx-azuredisk -c <ContainerName> -- df -h /mnt/azuredisk

Kontenery systemu Windows

Sterownik CSI dysku platformy Azure obsługuje węzły i kontenery systemu Windows. Jeśli chcesz używać kontenerów systemu Windows, postępuj zgodnie z Szybkim przewodnikiem kontenerów Windows, aby dodać pulę węzłów systemu Windows.

  1. Po utworzeniu puli węzłów systemu Windows można teraz używać wbudowanych klas magazynu, takich jak managed-csi. Możesz wdrożyć przykładowy zestaw stanowy oparty na systemie Windows , który zapisuje znaczniki czasu w pliku data.txt , uruchamiając następujące polecenie kubectl apply :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    statefulset.apps/busybox-azuredisk created
    
  2. Aby zweryfikować zawartość woluminu, uruchom następujące polecenie:

    kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    2020-08-27 08:13:41Z
    2020-08-27 08:13:42Z
    2020-08-27 08:13:44Z
    (...)
    

Elastyczne przydzielanie zasobów na żądanie

Model rozszerzania dysków na żądanie umożliwia dyski działające w trybie przyspieszonym, gdy zapotrzebowanie na nie przekracza ich obecną pojemność. Model ten generuje dodatkowe opłaty za każdym razem, gdy dysk przekroczy swoje limity. Elastyczne zwiększanie wydajności na żądanie jest dostępne tylko dla dysków SSD wielkości Premium większej niż 512 GiB. Aby uzyskać więcej informacji na temat aprowizowanych IOPS i przepustowości na dysk w dyskach SSD warstwy Premium, zobacz Rozmiar SSD w warstwie Premium. Alternatywnie, wybuch oparty na kredytach jest możliwy tylko wtedy, gdy dysk zgromadził kredyty w swoim pojemniku kredytowym. Skalowanie oparte na kredytach nie generuje dodatkowych opłat, gdy dysk pęka. Skalowanie oparte na kredytach jest dostępne tylko dla dysków SSD w warstwie Premium 512 GiB i mniejszych oraz dysków SSD w warstwie 1024 GiB i mniejszych. Aby uzyskać więcej informacji na temat przerywania na żądanie, zobacz sekcję Przerywanie na żądanie.

Ważne

Domyślna managed-csi-premium klasa magazynu ma wyłączone dynamiczne przydzielanie zasobów i używa działania opartego na kredytach. Każdy dysk SSD w warstwie Premium dynamicznie tworzony na żądanie przez roszczenie trwałego woluminu na podstawie domyślnej managed-csi-premium klasy magazynu ma również wyłączone funkcje burstingu na żądanie.

Aby utworzyć trwały wolumin SSD w warstwie Premium z włączoną funkcją burstingu na żądanie, możesz utworzyć nową klasę magazynu z parametrem enableBursting ustawionym na true zgodnie z poniższym szablonem YAML. Aby uzyskać więcej informacji na temat włączania skalowania na żądanie, zobacz On-demand bursting. Aby uzyskać więcej informacji na temat tworzenia własnej klasy magazynu z włączoną obsługą nagłego zwiększania mocy na żądanie, zobacz Tworzenie zarządzanej klasy magazynu Premium CSI z możliwością burstu.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
  skuname: Premium_LRS
  enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Uprzątnij zasoby

Gdy skończysz z zasobami utworzonymi w tym artykule, możesz je usunąć przy użyciu kubectl delete polecenia .

# Remove the pod
kubectl delete -f azure-pvc-disk.yaml

# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml

Udostępnij zasoby trwałe Azure Files

Usługa Azure Files obsługuje udziały plików usługi Azure Premium. Minimalna pojemność współdzielonego zasobu plików to 100 GiB. Zalecamy używanie udziałów plików Azure Premium zamiast udziałów plików Standard, ponieważ udziały Premium oferują większą wydajność i dyski z niskimi opóźnieniami dla obciążeń intensywnych pod względem operacji we/wy. W przypadku udziałów Azure Files nie ma limitu liczby udziałów, które można zamontować w węźle. Aby uzyskać więcej informacji na temat woluminów Kubernetes, zapoznaj się z Opcjami magazynowania dla aplikacji w usłudze AKS.

W przypadku używania sterowników CSI magazynu w usłudze AKS istnieją jeszcze dwa wbudowane StorageClasses sterowniki magazynu usługi Azure Files CSI. Inne klasy magazynu CSI są tworzone obok klas magazynu domyślnie wbudowanych w klaster.

  • azurefile-csi: Używa usługi Azure Standard Storage do utworzenia udziału plików platformy Azure.

  • azurefile-csi-premium: używa usługi Azure Premium Storage do utworzenia udziału plików platformy Azure.

Zasady odzyskiwania w obu klasach magazynowania zapewniają, że udział plików Azure zostanie usunięty, gdy odpowiedni PV zostanie usunięty. Ponieważ klasy pamięci konfigurują również udziały plików, aby można je było rozszerzać, wystarczy edytować PVC przy użyciu nowego rozmiaru.

Uwaga / Notatka

Aby uzyskać najlepsze środowisko pracy z usługą Azure Files, postępuj zgodnie z tymi najlepszymi rozwiązaniami. Lokalizacja konfigurowania opcji instalacji (mountOptions) zależy od tego, czy aprowizujesz dynamiczne lub statyczne woluminy trwałe.

  • Jeśli dynamicznie tworzysz wolumin za pomocą klasy pamięci, określ opcje montowania w obiekcie klasy pamięci (rodzaj: StorageClass).
  • Jeśli statycznie przydzielasz wolumin, określ opcje montażu w obiekcie PersistentVolume (rodzaj: PersistentVolume).
  • Jeśli instalujesz udział plików jako wolumin wbudowany, określ opcje montowania w obiekcie Pod (rodzaj: Pod).

Zalecamy FIO podczas uruchamiania testów porównawczych. Aby uzyskać więcej informacji, zobacz Narzędzia i testy porównawcze.

Klasa przechowywania służy do definiowania sposobu tworzenia udziału plików w usłudze Azure. Konto magazynowe jest tworzone automatycznie w grupie zasobów węzła do wykorzystania z klasą magazynową do przechowywania zasobu plików Azure. Wybierz jedną z następujących opcji SKU dla redundancji Azure Storage dla skuName:

  • Standard_LRS: Standardowa lokalna nadmiarowość przechowywania
  • Standard_GRS: Standardowa pamięć geograficznie z nadmiarową dostępnością
  • Standard_ZRS: magazyn strefowy redundantny Standard
  • Standard_RAGRS: magazyn geograficznie nadmiarowy z dostępem do odczytu w warstwie Standardowa
  • Standard_RAGZRS: standardowy geograficznie nadmiarowy magazyn z dostępem tylko do odczytu
  • Premium_LRS: magazyn lokalnie nadmiarowy w warstwie Premium
  • Premium_ZRS: strefowo nadmiarowa pamięć Premium

Aby uzyskać więcej informacji na temat klas magazynu kubernetes dla usługi Azure Files, zobacz Klasy magazynu Kubernetes.

  1. Utwórz plik o nazwie azure-file-sc.yaml i skopiuj w poniższym przykładowym manifeście. Aby uzyskać więcej informacji na temat mountOptionsprogramu , zobacz sekcję Opcje instalacji .

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: my-azurefile
    provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
    allowVolumeExpansion: true
    mountOptions:
     - dir_mode=0777
     - file_mode=0777
     - uid=0
     - gid=0
     - mfsymlinks
     - cache=strict
     - actimeo=30
     - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    parameters:
      skuName: Premium_LRS
    
  2. Utwórz klasę magazynu przy użyciu polecenia kubectl apply.

    kubectl apply -f azure-file-sc.yaml
    

Utwórz PVC

PVC używa obiektu klasy magazynu do dynamicznego aprowizowania udziału plików w usłudze Azure. Możesz użyć następującego kodu YAML, aby utworzyć PVC o rozmiarze 100 GB z dostępem ReadWriteMany. Aby uzyskać więcej informacji na temat trybów dostępu, zobacz Kubernetes trwały wolumin.

  1. Utwórz plik o nazwie azure-file-pvc.yaml i skopiuj go w następującym języku YAML. Upewnij się, że storageClassName odpowiada klasie magazynu utworzonej w poprzednim kroku.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: my-azurefile
      resources:
        requests:
          storage: 100Gi
    

    Uwaga / Notatka

    Jeśli używasz Premium_LRS SKU dla klasy przechowywania, minimalną wartością storage powinna być 100Gi.

  2. Utwórz PVC przy użyciu kubectl apply polecenia.

    kubectl apply -f azure-file-pvc.yaml
    

    Po zakończeniu zostanie utworzone udostępnianie plików. Zostanie również utworzony sekret Kubernetes, który zawiera informacje o połączeniu i poświadczenia. Możesz użyć kubectl get polecenia , aby wyświetlić stan PCV:

    kubectl get pvc my-azurefile
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    my-azurefile   Bound     pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477   100Gi       RWX           my-azurefile      5m
    

Zamontuj PCV

Poniższy kod YAML tworzy zasobnik, który używa pliku my-azurefile PVC do zainstalowania udziału plików usługi Azure Files w ścieżce /mnt/azure . W przypadku kontenerów systemu Windows Server podaj ścieżkę używając konwencji ścieżki systemu Windows, na przykład "D:".

  1. Utwórz plik o nazwie azure-pvc-files.yamli skopiuj go w następującym pliku YAML. Upewnij się, że element claimName odpowiada elementowi PVC utworzonemu w poprzednim kroku.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: /mnt/azure
              name: volume
              readOnly: false
      volumes:
       - name: volume
         persistentVolumeClaim:
           claimName: my-azurefile
    
  2. Utwórz pod przy użyciu polecenia kubectl apply.

    kubectl apply -f azure-pvc-files.yaml
    

    Masz teraz uruchomiony zasobnik z udziałem plików usługi Azure Files zainstalowanym w katalogu /mnt/azure . Tę konfigurację można zobaczyć podczas inspekcji zasobnika przy użyciu polecenia kubectl describe. Następujące skrócone przykładowe dane wyjściowe pokazują wolumin zainstalowany w kontenerze.

    Containers:
      mypod:
        Container ID:   docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e
        Image:          mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        Image ID:       docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        State:          Running
          Started:      Fri, 01 Mar 2019 23:56:16 +0000
        Ready:          True
        Mounts:
          /mnt/azure from volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro)
    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  my-azurefile
        ReadOnly:   false
    [...]
    

Opcje montowania

W przypadku platformy Kubernetes w wersji 1.13.0 lub nowszej wartości domyślne dla fileMode i dirMode to 0777. Podczas dynamicznego przydzielania trwałych woluminów przy użyciu klasy magazynu można zdefiniować opcje montowania bezpośrednio w manifeście klasy magazynu. Aby uzyskać szczegółowe informacje, zobacz Opcje instalacji. W poniższym przykładzie pokazano ustawienie tych uprawnień na :0777

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
  skuName: Premium_LRS

Parametry klasy magazynu dla woluminów dynamicznych

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania niestandardowej klasy przechowywania dla twojego PVC.

Name Meaning Dostępna wartość Mandatory Wartość domyślna
accountAccessTier Warstwa dostępu dla konta magazynowego Konto standardowe może wybrać Hot lub Cool, a konto Premium może wybrać tylko pozycję Premium. Nie. Empty. Użyj ustawienia domyślnego dla różnych typów kont przechowywania.
accountQuota Ogranicza limit przydziału dla konta. Możesz określić maksymalny limit przydziału w GB (domyślnie 102 400 GB). Jeśli konto przekroczy określony limit przydziału, sterownik pomija wybranie konta. Nie. 102400
allowBlobPublicAccess Zezwól lub odmów publicznego dostępu do wszystkich obiektów blob lub kontenerów dla konta magazynowego utworzonego przez sterownik. true lub false Nie. false
disableDeleteRetentionPolicy Określ, czy należy wyłączyć zasadę DeleteRetentionPolicy dla konta pamięci masowej utworzonego przez sterownik. true lub false Nie. false
folderName Określ nazwę folderu w udziale plików platformy Azure. Istniejąca nazwa folderu w udziale plików platformy Azure. Nie. Jeśli nazwa folderu nie istnieje w udziale plików, instalacja zakończy się niepowodzeniem.
getLatestAccount Określa, czy uzyskać najnowszy klucz konta na podstawie czasu utworzenia. Ten sterownik domyślnie pobiera pierwszy klucz. true lub false Nie. false
lokalizacja Określ region świadczenia usługi Azure Storage. Na przykład eastus. Nie. Jeśli jest pusty, sterownik używa tej samej nazwy lokalizacji co bieżący klaster usługi AKS.
matchTags Dopasuj tagi, gdy sterownik próbuje znaleźć odpowiednie konto magazynu. true lub false Nie. false
networkEndpointType 1 Określ typ punktu końcowego sieci dla konta magazynu utworzonego przez sterownik. Jeśli privateEndpoint zostanie określony, dla konta przechowywania utworzony zostanie prywatny punkt końcowy. W innych przypadkach punkt końcowy usługi jest tworzony domyślnie. "",privateEndpoint Nie. ""
protokół Określ protokół udostępniania plików. smb, nfs Nie. smb
requireInfraEncryption Określ, czy usługa stosuje dodatkową warstwę szyfrowania z kluczami zarządzanymi przez platformę dla danych magazynowanych na koncie magazynu, które zostało utworzone przez sterownik. true lub false Nie. false
resourceGroup Określ grupę zasobów dla dysków platformy Azure. Nazwa istniejącej grupy zasobów Nie. Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster usługi AKS.
selectRandomMatchingAccount Określa, czy losowo wybrać zgodne konto. Domyślnie sterownik zawsze wybiera pierwsze zgodne konto w kolejności alfabetycznej (Uwaga: ten sterownik używa pamięci podręcznej wyszukiwania kont, co powoduje nierównomierną dystrybucję tworzenia plików na wielu kontach). true lub false Nie. false
serwer Określ adres serwera konta usługi Azure Storage. Istniejący adres serwera, na przykład accountname.privatelink.file.core.windows.net. Nie. Jeśli jest pusty, sterownik używa domyślnego accountname.file.core.windows.net lub innego adresu konta suwerennej chmury.
shareAccessTier Warstwa dostępu dla udostępniania plików Konto ogólnego przeznaczenia w wersji 2 może wybierać między TransactionOptimized (ustawieniem domyślnym), Hoti Cool. Typ konta przechowywania premium tylko dla udziałów plikowych. Nie. Empty. Użyj ustawienia domyślnego dla różnych typów kont przechowywania.
shareName Określ nazwę udziału plików w usłudze Azure. Istniejąca lub nowa nazwa udziału plików Azure. Nie. Jeśli jest pusty, sterownik generuje nazwę udziału plików platformy Azure.
shareNamePrefix Określ prefiks nazwy udziału plików w Azure, który został utworzony przez sterownik. Nazwa udziału może zawierać tylko małe litery, cyfry, łączniki i długość powinna być mniejsza niż 21 znaków. Nie.
skuName Typ konta magazynu usługi Azure Files (alias: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS, Premium_LRS, Premium_ZRS, StandardV2_LRS, StandardV2_ZRS, StandardV2_GRS, StandardV2_GZRS, PremiumV2_LRS, PremiumV2_ZRS Nie. Standard_LRS
Minimalny rozmiar udziału plików dla typu konta Premium wynosi 100 GB.
Typ konta ZRS jest obsługiwany tylko w niektórych regionach.
Udział plików NFS obsługuje tylko typ konta Premium.
Standardowe nazwy jednostek SKU w wersji 2 są przeznaczone dla modelu aprowizowania usługi Azure Files w wersji 2.
storageAccount Określ nazwę konta usługi Azure Storage. nazwaKontaPrzechowywania -Nie Jeśli określona nazwa konta magazynu nie zostanie podana, sterownik szuka odpowiedniego konta magazynu zgodnego z ustawieniami konta w tej samej grupie zasobów. Jeśli nie można odnaleźć pasującego konta przechowywania, zostanie utworzone nowe. Jeśli jednak zostanie określona nazwa konta magazynu, konto magazynu musi już istnieć.
storageEndpointSuffix Określ sufiks punktu końcowego usługi Azure Storage. core.windows.net, core.chinacloudapi.cn, itp. Nie. Jeśli jest pusty, sterownik używa domyślnego sufiksu punktu końcowego przechowywania zgodnie ze środowiskiem chmury. Na przykład core.windows.net.
tags Tagi są tworzone na nowym koncie magazynu. Format tagu: "foo=aaa,bar=bbb" Nie. ""

1 Jeśli konto magazynu jest tworzone przez sterownik, wystarczy określić networkEndpointType: privateEndpoint parametr w klasie magazynu. Sterownik CSI tworzy prywatny punkt końcowy i prywatną strefę DNS (o nazwie privatelink.file.core.windows.net) wraz z kontem. Jeśli używasz własnego konta magazynu, musisz utworzyć prywatny punkt końcowy dla konta magazynu. Jeśli używasz usługi Azure Files w izolowanym klastrze sieciowym, musisz utworzyć niestandardową klasę magazynu z parametrem "networkEndpointType: privateEndpoint". Możesz skorzystać z tego przykładu w celu uzyskania informacji referencyjnych:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
  networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777  # modify this permission if you want to enhance the security
  - file_mode=0777
  - mfsymlinks
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduce probability of reconnect race
  - actimeo=30  # reduce latency for metadata-heavy workload
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Statyczne parametry przydziału dla trwałych woluminów

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania pv.

Name Meaning Dostępna wartość Mandatory Wartość domyślna
volumeAttributes.resourceGroup Określ nazwę grupy zasobów platformy Azure. myResourceGroup Nie. Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster.
volumeAttributes.storageAccount Określ istniejącą nazwę konta usługi Azure Storage. nazwaKontaPrzechowywania Tak
volumeAttributes.shareName Określ nazwę udostępniania plików Azure. fileShareName Tak
volumeAttributes.folderName Określ nazwę folderu w udziale plików platformy Azure. folderName Nie. Jeśli nazwa folderu nie istnieje w udziale plików, instalacja zakończy się niepowodzeniem.
volumeAttributes.protocol Określ protokół udostępniania plików. smb, nfs Nie. smb
volumeAttributes.server Określanie adresu serwera konta usługi Azure Storage Istniejący adres serwera, na przykład accountname.privatelink.file.core.windows.net. Nie. Jeśli jest pusty, sterownik używa domyślnego accountname.file.core.windows.net lub innego adresu konta suwerennej chmury.

Utwórz klasę migawek PV

Sterownik CSI usługi Azure Files obsługuje tworzenie migawek trwałych woluminów oraz związanych z nimi udziałów plikowych.

  1. Utwórz klasę migawki woluminu za pomocą polecenia kubectl apply :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc created
    
  2. Utwórz migawkę woluminu na podstawie utworzonego wcześniej pliku PVC (pvc-azurefile).

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot created
    
  3. Sprawdź, czy migawka została utworzona poprawnie, uruchamiając następujące polecenie:

    kubectl describe volumesnapshot azurefile-volume-snapshot
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    Name:         azurefile-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1beta1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T22:37:41Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  955091
      Self Link:         /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot
      UID:               c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azurefile
      Volume Snapshot Class Name:      csi-azurefile-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
      Ready To Use:                        false
    Events:                                <none>
    

Zmiana rozmiaru Azure Files PV

Możesz zażądać większego woluminu dla obiektu PVC. Edytuj obiekt PVC i określ większy rozmiar. Ta zmiana wyzwala rozszerzenie woluminu bazowego, który wspiera PV.

Uwaga / Notatka

Nowy PV nigdy nie jest tworzony w celu spełnienia roszczenia. Zamiast tego zmieniany jest rozmiar istniejącego woluminu. Zmniejszanie woluminów trwałych nie jest obecnie obsługiwane.

W usłudze AKS wbudowana azurefile-csi klasa pamięci obsługuje już rozszerzenie, więc użyj wstępnie utworzonego woluminu PVC z tą klasą pamięci. PVC zażądało zasobu plików o pojemności 100 GiB. Możemy to potwierdzić, uruchamiając polecenie:

kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile

Dane wyjściowe polecenia przypominają następujący przykład:

Filesystem                                                                                Size  Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  100G  128K  100G   1% /mnt/azurefile
  1. Rozwiń PVC, zwiększając pole spec.resources.requests.storage.

    kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/pvc-azurefile patched
    
  2. Sprawdź, czy zarówno PCW, jak i system plików w zasobniku mają nowy rozmiar:

    kubectl get pvc pvc-azurefile
    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
    pvc-azurefile   Bound    pvc-5e5d9980-da38-492b-8581-17e3cad01770   200Gi      RWX            azurefile-csi   64m
    
    kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
    Filesystem                                                                                Size  Used Avail Use% Mounted on
    //f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  200G  128K  200G   1% /mnt/azurefile
    

Użyj PV z prywatnym magazynem Azure Files (prywatnym punktem końcowym)

Jeśli zasoby usługi Azure Files są chronione za pomocą prywatnego punktu końcowego, musisz utworzyć własną klasę magazynu. Pamiętaj, aby skonfigurować ustawienia DNS, aby rozwiązać prywatny adres IP punktu końcowego zgodnie z FQDN w ciągu połączenia.

Dostosuj następujące parametry:

  • resourceGroup: grupa zasobów, w której wdrażane jest konto magazynu.

  • storageAccount: nazwa konta magazynowego.

  • server: FQDN prywatnego punktu końcowego konta magazynu.

  1. Utwórz plik o nazwie private-azure-file-sc.yaml, a następnie wklej następujący przykładowy manifest w pliku. Zastąp wartości dla <resourceGroup> i <storageAccountName>. Przykład:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: private-azurefile-csi
    provisioner: file.csi.azure.com
    allowVolumeExpansion: true
    parameters:
      resourceGroup: <resourceGroup>
      storageAccount: <storageAccountName>
      server: <storageAccountName>.file.core.windows.net
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict  # https://linux.die.net/man/8/mount.cifs
      - nosharesock  # reduce probability of reconnect race
      - actimeo=30  # reduce latency for metadata-heavy workload
    
  2. Użyj polecenia kubectl apply, aby utworzyć klasę magazynu.

    kubectl apply -f private-azure-file-sc.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    storageclass.storage.k8s.io/private-azurefile-csi created
    
  3. Utwórz plik o nazwie private-pvc.yaml, a następnie wklej następujący przykładowy manifest w pliku:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: private-azurefile-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: private-azurefile-csi
      resources:
        requests:
          storage: 100Gi
    
  4. Utwórz element PVC przy użyciu polecenia kubectl apply :

    kubectl apply -f private-pvc.yaml
    

Uzyskiwanie dostępu do usługi Azure Files Storage (wersja zapoznawcza) przy użyciu tożsamości zarządzanej

Usługa Azure Files obsługuje teraz uwierzytelnianie oparte na tożsamości zarządzanej na potrzeby dostępu za pomocą protokołu SMB. Dzięki tej funkcji aplikacje działające w usłudze AKS mogą bezpiecznie uzyskiwać dostęp do udziałów usługi Azure Files bez konieczności przechowywania kluczy lub poświadczeń konta magazynu ani zarządzania nimi. Tożsamości zarządzane zapewniają usprawniony i bezpieczny mechanizm uwierzytelniania, upraszczając zarządzanie dostępem i zmniejszając ryzyko związane z ujawnieniem poświadczeń. Możesz utworzyć wolumin dynamiczny lub wolumin statyczny.

Uwaga / Notatka

Obsługa tożsamości zarządzanej dla Azure Files w AKS jest dostępna w wersji zapoznawczej, począwszy od wersji AKS 1.34 na węzłach Linux.

Aby włączyć tożsamość zarządzaną dla dynamicznie aprowizowanych woluminów, wykonaj następujące kroki:

  1. Utwórz klasę magazynu z włączoną tożsamością zarządzaną przy użyciu pliku YAML, azurefile-csi-managed-identity.yaml z następującą zawartością przykładową. Ustaw mountWithManagedIdentity: "true" w obszarze parameters:

     apiVersion: storage.k8s.io/v1
     kind: StorageClass
     metadata:
       name: azurefile-csi
     provisioner: file.csi.azure.com
     parameters:
       resourceGroup: EXISTING_RESOURCE_GROUP_NAME   # optional, node resource group by default if it's not provided
       storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided
       mountWithManagedIdentity: "true"
       # optional, clientID of the managed identity, kubelet identity would be used by default if it's not provided
       clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx"
     reclaimPolicy: Delete
     volumeBindingMode: Immediate
     allowVolumeExpansion: true
     mountOptions:
      - dir_mode=0777  # modify this permission if you want to enhance the security
      - file_mode=0777
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict  # https://linux.die.net/man/8/mount.cifs
      - nosharesock  # reduce probability of reconnect race
      - actimeo=30  # reduce latency for metadata-heavy workload
      - nobrl  # disable sending byte range lock requests to the server
    
  2. Zastosuj tę klasę magazynu, uruchamiając następujące polecenie:

    kubectl apply -f azurefile-csi-managed-identity.yaml
    
  3. Wdróż StatefulSet lub obciążenie przy użyciu nowej klasy pamięci, która odwołuje się do tego PVC, aby upewnić się, że wolumin jest aprowizowany przy użyciu uwierzytelniania tożsamości zarządzanej. W manifeście PVC ustaw wartość storageClassName: azurefile-csi-managed-identity. Przykład:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile-managed-identity-pvc
    spec:
      accessModes:
       - ReadWriteMany
      storageClassName: azurefile-csi-managed-identity
      resources:
       requests:
        storage: 100Gi
    

Dowiedz się więcej o systemie plików NFS usługi Azure Files

Usługa Azure Files obsługuje protokół NFS w wersji 4.1. Obsługa NFS w wersji 4.1 dla Azure Files zapewnia w pełni zarządzany system NFS jako usługę, zbudowany na wysoce dostępnej, wysoce trwałej i rozproszonej platformie magazynowej odpornej na awarie.

Ta opcja jest zoptymalizowana pod kątem obciążeń dostępu losowego z aktualizacjami danych w miejscu i zapewnia pełną obsługę systemu plików POSIX. W tej sekcji pokazano, jak używać udziałów NFS z dostawcą Azure File CSI w klastrze AKS.

Uwaga / Notatka

Możesz użyć prywatnego punktu końcowego zamiast zezwalać na dostęp do wybranej sieci wirtualnej.

W tej sekcji wyjaśniono, jak zmaksymalizować wydajność i bezpieczeństwo podczas korzystania z usługi Azure Files NFS 4.1 z usługą AKS. Dowiedz się, jak:

  • Optymalizowanie ustawień rozmiaru odczytu i zapisu systemu plików NFS

  • Tworzenie i konfigurowanie klasy magazynu NFS

  • Wdrażanie obciążeń korzystających z woluminów opartych na systemie plików NFS

  • Włącz szyfrowanie podczas przesyłania (EiT), aby chronić dane podczas przechodzenia między klastrem AKS a usługą Azure Files.

Ta sekcja zawiera informacje na temat podejścia do dostrajania wydajności NFS za pomocą sterownika CSI usługi Azure Files z opcjami rsize (rozmiar odczytu) i wsize (rozmiar zapisu). Opcje rsize i wsize ustawiają maksymalny rozmiar transferu operacji NFS. Jeśli rsize ani wsize nie są określone podczas montowania, klient i serwer negocjują największy rozmiar obsługiwany przez oba. Obecnie zarówno usługa Azure Files, jak i nowoczesne dystrybucje systemu Linux obsługują rozmiary odczytu i zapisu tak duże, jak 1 048 576 bajtów (1 MiB).

Optymalna wydajność jest oparta na wydajnej komunikacji między klientem a serwerem. Zwiększenie lub zmniejszenie wartości rozmiaru opcji odczytu i zapisu instalacji może poprawić wydajność systemu plików NFS. Domyślny rozmiar pakietów odczytu/zapisu przesyłanych między klientem a serwerem to 8 KB dla systemu plików NFS w wersji 2 i 32 KB dla systemu plików NFS w wersji 3 i 4. Te wartości domyślne mogą być zbyt duże lub za małe. Zmniejszenie rsize i wsize może poprawić wydajność NFS w zatłoczonej sieci poprzez wysyłanie mniejszych pakietów dla każdej odpowiedzi na odczyt i żądania zapisu w systemie NFS. Jednak zmniejszenie to może zwiększyć liczbę pakietów potrzebnych do wysyłania danych w sieci, zwiększając całkowity ruch sieciowy i wykorzystanie procesora CPU na kliencie i serwerze.

Ważne jest, aby przeprowadzić testy, aby znaleźć element rsize i wsize który utrzymuje wydajny transfer pakietów, gdzie nie zmniejsza przepływności i zwiększa opóźnienie.

Na przykład, aby skonfigurować maksymalną rsize i wsize 256-KiB, skonfiguruj klasę pamięci masowej mountOptions w następujący sposób:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30
  - rsize=262144
  - wsize=262144

Inne przykłady klas magazynu

Zalecane opcje montowania udziałów SMB są podane w poniższym przykładzie klasy pamięci masowej.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777  # modify this permission if you want to enhance the security
  - file_mode=0777 # modify this permission if you want to enhance the security
  - mfsymlinks    # support symbolic links
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduces probability of reconnect race
  - actimeo=30  # reduces latency for metadata-heavy workload
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Jeśli korzystasz z udziałów plików w warstwie Premium (SSD), a obciążenie jest duże, zarejestruj się, aby użyć funkcji buforowania metadanych w celu zwiększenia wydajności.

Aby uzyskać więcej informacji, zobacz Poprawa wydajności udziałów plików SMB na platformie Azure.

Kontenery systemu Windows

Sterownik CSI usługi Azure Files obsługuje również węzły i kontenery systemu Windows. Aby użyć kontenerów systemu Windows, postępuj zgodnie z przewodnikiem szybkiego startu kontenerów systemu Windows, aby dodać pulę węzłów systemu Windows.

  1. Po utworzeniu puli węzłów Windows użyj wbudowanych klas pamięci masowej, takich jak azurefile-csi, lub utwórz niestandardowe. Możesz wdrożyć przykładowy zestaw stanowy oparty na systemie Windows , który zapisuje znaczniki czasu w pliku data.txt , uruchamiając polecenie kubectl apply :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    statefulset.apps/busybox-azurefile created
    
  2. Zweryfikuj zawartość woluminu, uruchamiając następujące polecenie kubectl exec:

    kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux or MacOS Bash
    kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell or CMD
    

    Dane wyjściowe poleceń przypominają następujący przykład:

    2020-08-27 22:11:01Z
    2020-08-27 22:11:02Z
    2020-08-27 22:11:04Z
    (...)
    

Dalsze kroki