Twórz i zarządzaj woluminami trwałymi (PVs) z wykorzystaniem Azure Blob Storage w usłudze Azure Kubernetes Service (AKS).

Jeśli wiele podów wymaga współbieżnego dostępu do tego samego woluminu magazynu, możesz użyć Azure Blob Storage do połączenia z systemem plików blobfuse lub sieciowym systemem plików (NFS).

W tym artykule pokazano, jak dynamicznie i statycznie tworzyć kontenery usługi Azure Blob Storage do użycia przez wiele zasobników w klastrze usługi Azure Kubernetes Service (AKS).

Wymagania wstępne

  • Włączono sterownik CSI Azure Blob Storage w Twoim klastrze AKS.

  • Konto magazynowe z włączonym systemem plików NFS w wersji 3, co pozwala na zamontowanie woluminu trwałego przy użyciu protokołu NFS. Nie można włączyć NFS v3 dla istniejącego konta magazynu. Aby uzyskać więcej informacji, zobacz Tworzenie konta NFS w wersji 3.

  • Aby obsługiwać konto Azure Data Lake Storage podczas korzystania z instalacji blobfuse, wykonaj następujące zadania:

    • Aby utworzyć konto Data Lake Storage przy użyciu sterownika w dynamicznej aprowizacji, określ isHnsEnabled: "true" w parametrach klasy magazynu.
    • Aby włączyć dostęp blobfuse do konta Data Lake Storage w statycznej aprowizacji, określ opcję --use-adls=true instalacji w woluminie trwałym.
    • Jeśli zamierzasz włączyć konto magazynu z hierarchiczną przestrzenią nazw, istniejące woluminy trwałe 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, /mnt katalog jest instalowany na dysku tymczasowym. Jeśli jednak jednostka SKU maszyny wirtualnej nie oferuje dysku tymczasowego, katalog /mnt jest montowany na dysku systemu operacyjnego, możesz ustawić opcję montowania --tmp-path=, aby określić inny katalog pamięci podręcznej.

Użyj wbudowanych klas magazynowych do tworzenia dynamicznych dysków trwałych w usłudze Azure Blob Storage

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. W przypadku stosowania sterowników CSI magazynu w usłudze AKS istnieją dwie dodatkowe wbudowane funkcjonalności korzystające ze sterownika CSI usługi Azure Blob Storage.

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.

Możesz wybrać jedną z następujących jednostek SKU nadmiarowości magazynu platformy Azure dla parametru skuname w definicji klasy magazynu:

  • Standard_LRS: Standardowa lokalna nadmiarowość przechowywania
  • Premium_LRS: magazyn lokalnie nadmiarowy w warstwie Premium
  • Standard_ZRS: standardowa strefowa pamięć nadmiarowa
  • 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

Tworzenie niestandardowych klas pamięci dla dynamicznych dysków wirtualnych za pomocą usługi Azure Blob Storage

Domyślne klasy magazynu są odpowiednie dla większości scenariuszy. W niektórych przypadkach możesz chcieć dostosować własną klasę przechowywania z własnymi parametrami. W tej sekcji przedstawiono dwa przykłady: jeden przy użyciu protokołu NFS i jeden przy użyciu systemu plików blobfuse.

Przykład niestandardowej klasy magazynu przy użyciu protokołu NFS

Manifest w tym przykładzie montuje kontener magazynu danych blob przy użyciu protokołu NFS. Można go użyć do dodania parametru tags .

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

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-nfs
    provisioner: blob.csi.azure.com
    parameters:
      protocol: nfs
      tags: environment=Development
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    
  2. Utwórz klasę magazynu przy użyciu kubectl apply polecenia :

    kubectl apply -f blob-nfs-sc.yaml
    

    Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:

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

Przykład niestandardowej klasy przechowywania przy użyciu blobfuse

Manifest w tym przykładzie używa narzędzia blobfuse i instaluje kontener usługi Blob Storage. Można go użyć do zaktualizowania parametru skuName .

  1. Utwórz plik o nazwie blobfuse-sc.yaml i wklej następujący przykładowy manifest:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-fuse
    provisioner: blob.csi.azure.com
    parameters:
      skuName: Standard_GRS  # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS
    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 that.
    
  2. Utwórz klasę magazynu przy użyciu kubectl apply polecenia :

    kubectl apply -f blobfuse-sc.yaml
    

    Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:

    storageclass.storage.k8s.io/blob-fuse created
    

Parametry klasy magazynu dla dynamicznych telewizorów z usługą Azure Blob Storage

Użyj następujących grup parametrów, aby zdefiniować niestandardową klasę magazynu dla oświadczeń trwałych woluminów (PVC) za pomocą usługi Azure Blob Storage:

  • Konto magazynu: skuName, locationsubscriptionIDnetworkEndpointTypeaccessTierallowBlobPublicAccessstorageAccountresourceGrouprequireInfraEncryptionpublicNetworkAccessallowSharedKeyAccesstagsi .matchTags
  • Kontener i punkt końcowy: protocol, , serveruseDataPlaneAPIcontainerNamestorageEndpointSuffixsoftDeleteBlobscontainerNamePrefixsoftDeleteContainers, i .enableBlobVersioning
  • BlobFuse: storeAccountKey, , secretNamegetLatestAccountKey, secretNamespacei isHnsEnabled.
  • NFS: mountPermissions i fsGroupChangePolicy.
  • Sieć wirtualna: vnetResourceGroup, , vnetNamesubnetNamei vnetLinkName.

Konfigurowanie parametrów konta magazynu dla dynamicznych telewizorów z usługą Azure Blob Storage

Użyj następujących parametrów, aby skonfigurować konto magazynu Azure dla dynamicznie aprowizowania pv:

Name Meaning Dostępne wartości Wymagane Wartość domyślna
skuName Określ typ konta usługi Azure Storage (alias: storageAccountType). Standard_LRS, , Premium_LRS, Standard_GRS, Standard_RAGRS, , Standard_ZRSPremium_ZRS Nie. Standard_LRS
location 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.
subscriptionID Określ identyfikator subskrypcji platformy Azure, w którym jest tworzony katalog usługi Blob Storage. Identyfikator subskrypcji Azure Nie. Jeśli nie jest pusty, resourceGroup należy podać.
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 Określ typ punktu końcowego sieci dla konta magazynu utworzonego przez sterownik. Jeśli określisz privateEndpointwartość , sterownik utworzy prywatny punkt końcowy dla konta magazynu. W innych przypadkach sterownik tworzy punkt końcowy usługi dla protokołu NFS. "", privateEndpoint Nie. "". W przypadku klastra usługi AKS dodaj nazwę klastra usługi AKS do roli Współautora w grupie zasobów hostującej sieć wirtualną.
accessTier Określ warstwę dostępu dla konta magazynu. Hot, , CoolPremium Nie. Używa warstwy domyślnej dla wybranego typu konta magazynu. Konta Premium obsługują tylko Premiumusługę .
allowBlobPublicAccess Zezwalaj lub nie zezwalaj na publiczny dostęp do wszystkich obiektów blob lub kontenerów dla konta magazynu utworzonego przez sterownik. true, false Nie. false
allowSharedKeyAccess Zezwalaj lub nie zezwalaj na dostęp do klucza współdzielonego dla konta magazynu utworzonego przez sterownik. Ten parametr dotyczy instalacji systemu plików NFS i instalacji blobFuse korzystających z tożsamości zarządzanej. true, false Nie. true
requireInfraEncryption Wymagaj dodatkowej warstwy szyfrowania zarządzanego przez platformę dla danych magazynowanych na koncie magazynu utworzonym przez sterownik. true, false Nie. false
publicNetworkAccess Ustaw właściwość dostępu do sieci publicznej dla konta magazynu utworzonego przez sterownik. Enabled, , DisabledSecuredByPerimeter Nie. Używa wartości domyślnej Azure Storage.
tags Utwórz tagi na nowym koncie magazynu. Format tagu: foo=aaa,bar=bbb Nie. ""
matchTags Dopasuj tagi, gdy sterownik wyszukuje odpowiednie konto magazynu. true, false Nie. false

Konfigurowanie parametrów kontenera i punktu końcowego dla dynamicznych telewizorów przy użyciu usługi Azure Blob Storage

Użyj następujących parametrów, aby skonfigurować kontener, protokół instalacji, punkt końcowy magazynu i tagi dynamicznie aprowizowania pv:

Name Opis Dostępne wartości Wymagane Wartość domyślna
protocol Określ obiekty BlobFuse, BlobFuse2 lub NFS w wersji 3. fuse, , fuse2nfs 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 systemu plików blobfuse lub pvc-nfs NFS w wersji 3.
containerNamePrefix Określ prefiks katalogu usługi Azure Storage utworzony przez sterownik. Może zawierać tylko małe litery, cyfry i łączniki oraz musi zawierać mniej niż 21 znaków. Nie.
server 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.
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.
useDataPlaneAPI Użyj interfejsu API płaszczyzny danych Azure Storage, aby utworzyć i usunąć kontenery. Ta opcja może uniknąć ograniczania dostawcy zasobów magazynu, ale kończy się niepowodzeniem, gdy zapora konta magazynu lub reguły sieci wirtualnej blokują dostęp do płaszczyzny danych. true, false Nie. false
softDeleteBlobs Włącz usuwanie nietrwałe dla obiektów blob i określ okres przechowywania w dniach. Okres przechowywania, na przykład 7 Nie. Wyłączony
softDeleteContainers Włącz usuwanie nietrwałe dla kontenerów i określ okres przechowywania w dniach. Okres przechowywania, na przykład 7 Nie. Wyłączony
enableBlobVersioning Włącz przechowywanie wersji obiektów blob. Nie można włączyć przechowywania wersji, gdy protocol jest lub nfsisHnsEnabled ma wartość true. true, false Nie. false

Konfigurowanie parametrów blobFuse dla dynamicznych telewizorów przy użyciu usługi Azure Blob Storage

Następujące parametry mają zastosowanie tylko wtedy, gdy używasz obiektu BlobFuse dla dynamicznie aprowizowania pv:

Name Opis Dostępne wartości Wymagane Wartość domyślna
storeAccountKey Określ klucz dostępu konta magazynu jako sekret w Kubernetes.

Uwaga:
false oznacza, że sterownik używa tożsamości kubeleta do uzyskania klucza konta.
true,false Nie. true
getLatestAccountKey Pobierz najnowszy klucz konta magazynu na podstawie czasu jego utworzenia zamiast używania pierwszego klucza. true, false Nie. false
secretName Określ nazwę sekretu do przechowywania klucza konta. Nie.
secretNamespace Określ nazwę przestrzeni sekretnych do przechowywania klucza konta. default,kube-system itp. Nie. Przestrzeń nazw PVC
isHnsEnabled Włącz Hierarchical namespace dla konta Azure Data Lake Storage. true,false Nie. false

Konfigurowanie parametrów systemu plików NFS dla dynamicznych telewizorów przy użyciu usługi Azure Blob Storage

Następujący parametr ma zastosowanie tylko w przypadku korzystania z systemu plików NFS dla dynamicznie aprowizowanej sieci PV:

Name Opis Dostępne wartości Wymagane Wartość domyślna
mountPermissions Określ uprawnienia do zamontowanego folderu. Wartość domyślna to 0777. Jeśli ustawiono wartość 0, sterownik nie będzie wykonywać chmod po zamontowaniu. Nie. 0777
fsGroupChangePolicy Określ sposób zmiany własności woluminu przez sterownik. Sterownik ignoruje securityContext.fsGroupChangePolicy specyfikację zasobnika. OnRootMismatch, , AlwaysNone Nie. OnRootMismatch

Konfigurowanie parametrów sieci wirtualnej dla dynamicznych woluminów wirtualnych przy użyciu usługi Azure Blob Storage

Użyj następujących parametrów, gdy sterownik konfiguruje dostęp do sieci wirtualnej dla dynamicznie aprowizowanej sieci PV:

Name Opis Dostępne wartości Wymagane Wartość domyślna
vnetResourceGroup Określ grupę zasobów zawierającą sieć wirtualną. Nazwa istniejącej grupy zasobów Nie. vnetResourceGroup Używa wartości w konfiguracji chmury Azure.
vnetName Określ nazwę sieci wirtualnej. Istniejąca nazwa sieci wirtualnej Nie. vnetName Używa wartości w konfiguracji chmury Azure.
subnetName Określ co najmniej jedną istniejącą podsieci węzła usługi AKS. Oddzielaj wiele nazw podsieci przecinkami. Istniejące nazwy podsieci Nie. Aktualizuje wszystkie podsieci w sieci wirtualnej klastra.
vnetLinkName Określ łącze sieci wirtualnej skojarzone z prywatną strefą DNS. Nazwa łącza istniejącej lub nowej sieci wirtualnej Nie. <vnetName>-vnetlink

Konfigurowanie prywatnych punktów końcowych dla dynamicznych telewizorów z usługą Azure Blob Storage

Uwaga / Notatka

Jeśli konto magazynu jest tworzone przez sterownik, wystarczy określić parametr networkEndpointType: privateEndpoint 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 z parametrem "networkEndpointType: privateEndpoint". Możesz użyć następującego przykładowego manifestu jako odwołania:

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

Tworzenie pcV na potrzeby dynamicznej aprowizacji

Element PVC używa obiektu klasy magazynu do dynamicznego aprowizowania usługi Azure Blob Storage. W tej sekcji możesz użyć przykładowego manifestu YAML, aby utworzyć plik PVC o rozmiarze 5 GB z dostępem ReadWriteMany . Aby uzyskać więcej informacji na temat trybów dostępu, zobacz Tryby dostępu PV w Kubernetes.

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Utwórz PVC przy użyciu polecenia kubectl create:

    kubectl create -f blob-nfs-pvc.yaml
    
  3. Wyświetl stan PVC poleceniem kubectl get.

    kubectl get pvc azure-blob-storage
    

    Twoje dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe, które pokazują, że PVC jest w stanie Bound:

    NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    azure-blob-storage   Bound    pvc-aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb   5Gi        RWX            azureblob-nfs-premium       92m
    

Instalowanie dynamicznie aprowizowanego woluminu magazynu obiektów blob w zasobniku

Poniższy kod YAML tworzy zasobnik, który używa żądania trwałego wolumenu azure-blob-storage do zamontowania usługi Azure Blob Storage w ścieżce /mnt/blob.

  1. Utwórz plik o nazwie blob-nfs-pv i wklej następujący manifest YAML. Upewnij się, że element jest zgodny z claimName utworzonym wcześniej elementem PVC (azure-blob-storage).

    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 zasobnik za pomocą polecenia kubectl apply

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Po pomyślnym uruchomieniu zasobnika utwórz nowy plik o nazwie test.txt przy użyciu następującego polecenia:

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Sprawdź, czy dysk jest poprawnie zainstalowany przy użyciu następującego polecenia, aby wyświetlić listę plików w zainstalowanym katalogu:

    kubectl exec mypod -- ls /mnt/blob
    

    Twoje dane wyjściowe powinny przypominać następujący przykład, który pokazuje plik test.txt utworzony w zamontowanym magazynie obiektów blob Azure.

    test.txt
    

Używanie zestawu statefulSet do zarządzania cyklem życia woluminu za pomocą usługi Azure Blob Storage

Aby zapewnić utrzymanie wolumenu danych dla obciążenia, możesz użyć elementu StatefulSet. Ten stan ułatwia dopasowanie istniejących woluminów do nowych zasobników, które zastępują te, które uległy awarii. W poniższych przykładach pokazano, jak skonfigurować element StatefulSet dla usługi Blob Storage przy użyciu protokołu NFS lub systemu Blobfuse.

Uwaga / Notatka

Jeśli używasz protokołu NFS, tożsamość warstwy sterowania klastra AKS (nazwa klastra AKS) musi zostać dodana do roli Udzielający wkładu w wirtualnej sieci oraz w grupie zabezpieczeń sieciowych.

  1. Utwórz plik o nazwie azure-blob-nfs-ss.yaml i wklej następujący manifest 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 przy użyciu kubectl create polecenia :

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

Tworzenie statycznego pv za pomocą usługi Azure Blob Storage

W poniższych sekcjach znajdziesz instrukcje dotyczące tworzenia statycznego PV w usłudze magazynowej Azure Blob Storage. Statyczny pv jest woluminem trwałym tworzonym ręcznie przez administratora. Ten serwer PV jest dostępny do użycia przez zasobniki w klastrze. Aby użyć statycznego PV, należy utworzyć PVC, który odwołuje się do PV, a następnie utworzyć pod odwołujący się do PVC.

Parametry woluminu CSI dla statycznych woluminów publicznych z usługą Azure Blob Storage

W poniższej tabeli wymieniono parametry, których można użyć w źródle woluminu CSI dla statycznego pv z usługą Azure Blob Storage:

Name Meaning Dostępne wartości Wymagane 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}.
Uwaga: znaki #, / są zarezerwowane do użytku wewnętrznego i nie mogą być używane w uchwycie woluminu.
Tak
volumeAttributes.subscriptionID Określ identyfikator subskrypcji Azure, w którym znajduje się konto magazynu. Identyfikator subskrypcji Azure Nie. Jeśli nie jest pusty, volumeAttributes.resourceGroup należy podać.
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 obiekty BlobFuse, BlobFuse2 lub NFS w wersji 3. fuse, , fuse2nfs Nie. fuse
volumeAttributes.server Określ adres serwera konta usługi Azure Storage. Istniejący adres serwera, na przykład <storage-account>.blob.core.windows.net Nie. Używa domyślnego adresu serwera dla bieżącego środowiska chmury.
volumeAttributes.storageEndpointSuffix Określ sufiks punktu końcowego magazynu Azure. core.windows.netlub sufiks dla innej chmury Azure Nie. Używa sufiksu domyślnego dla bieżącego środowiska chmury.
--- Następujące parametry dotyczą tylko systemu blobfuse --- --- ---
volumeAttributes.secretName Nazwa sekretu, która przechowuje nazwę i klucz konta magazynu (dotyczy tylko protokołu SMB). Nie.
volumeAttributes.secretNamespace Określ przestrzeń nazw sekretu do przechowywania klucza konta. default Nie. Przestrzeń nazw PVC
volumeAttributes.getLatestAccountKey Pobierz najnowszy klucz konta magazynu na podstawie czasu jego utworzenia zamiast używania pierwszego klucza. true, false Nie. false
nodeStageSecretRef.name Określ nazwę wpisu tajnego kubernetes zawierającego poświadczenia do przemieszczania woluminu. Istniejąca nazwa wpisu tajnego kubernetes. Wpis tajny musi zawierać jeden z następujących kluczy: azurestorageaccountkey, , msisecretazurestorageaccountsastokenlub azurestoragespnclientsecret. Nie.
nodeStageSecretRef.namespace Określ przestrzeń nazw dla sekretu. Przestrzeń nazw platformy Kubernetes Tak
--- Następujące parametry dotyczą tylko protokołu NFS --- --- ---
volumeAttributes.mountPermissions Określ uprawnienia do zamontowanego folderu. 0777 Nie.
volumeAttributes.fsGroupChangePolicy Określ sposób zmiany własności woluminu przez sterownik. Sterownik ignoruje securityContext.fsGroupChangePolicy specyfikację zasobnika. OnRootMismatch, , AlwaysNone Nie. OnRootMismatch
--- Następujące parametry są przeznaczone tylko dla funkcji: blobfuse
Uwierzytelnianie tożsamości zarządzanej i nazwy głównej usługi
--- --- ---
volumeAttributes.AzureStorageAuthType Określ typ uwierzytelniania. Key, , SAS, , MSISPN Nie. Key
volumeAttributes.AzureStorageIdentityClientID Określ identyfikator klienta tożsamości. Nie.
volumeAttributes.AzureStorageIdentityObjectID Określ identyfikator obiektu tożsamości. Ten parametr jest przestarzały. Nie.
volumeAttributes.AzureStorageIdentityResourceID Określ ID zasobu tożsamości. Nie.
volumeAttributes.MSIEndpoint Określ punkt końcowy MSI. Nie.
volumeAttributes.AzureStorageSPNClientID Określ identyfikator klienta usługi Azure Service Principal Name (SPN). Nie.
volumeAttributes.AzureStorageSPNTenantID Określ identyfikator dzierżawy usługi Azure SPN. Nie.
volumeAttributes.AzureStorageAADEndpoint Określ punkt końcowy Microsoft Entra. Nie.
--- Następujące parametry dotyczą tylko uwierzytelniania tożsamości obciążenia blobfuse --- --- ---
volumeAttributes.ClientID Określ identyfikator klienta tożsamości zarządzanej używanej do uwierzytelniania tożsamości obciążenia. Identyfikator klienta tożsamości zarządzanej Nie.
volumeAttributes.mountWithWorkloadIdentityToken Zainstaluj obiekt BlobFuse przy użyciu tokenu tożsamości obciążenia. Ta funkcja jest oferowana w wersji zapoznawczej. Określ wartość jako ciąg. "true", "false" Nie. "false"
--- Następujące parametry są przeznaczone tylko dla funkcji: odczyt klucza konta Blobfuse lub tokenu SAS z magazynu kluczy --- --- ---
volumeAttributes.keyVaultURL Określ nazwę DNS usługi Azure Key Vault. {vault-name}.vault.azure.net Nie.
volumeAttributes.keyVaultSecretName Określ nazwę tajemnicy Azure Key Vault. Istniejąca nazwa tajemnicy w Azure Key Vault. Nie.
volumeAttributes.keyVaultSecretVersion Wersja tajemnicy w usłudze Azure Key Vault. Istniejąca wersja Nie. Jeśli jest pusty, sterownik używa bieżącej wersji.

Utwórz kontener przechowywania Blob

Podczas tworzenia zasobu usługi Azure Blob Storage do użycia z usługą AKS można utworzyć zasób w grupie zasobów węzła. Takie podejście umożliwia klastrowi usługi AKS uzyskiwanie dostępu do zasobu magazynu obiektów Blob i zarządzanie tym zasobem.

  1. Pobierz nazwę grupy zasobów węzła klastra usługi AKS przy użyciu polecenia az aks show z parametrem --query nodeResourceGroup.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

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

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Jeśli utworzysz konto magazynu w grupie zasobów węzła, użyj nazwy grupy zasobów węzła zwróconej w poprzednim kroku (na przykład MC_myResourceGroup_myAKSCluster_eastus). Następnie wykonaj kroki opisane w temacie Zarządzanie magazynem obiektów blob , aby autoryzować dostęp i utworzyć kontener na tym koncie magazynu.

Montaż woluminu

W tej sekcji zainstalujesz wolumin trwały przy użyciu protokołu NFS lub Blobfuse.

Konto magazynu musi mieć włączoną przestrzeń nazw NFS w wersji 3 i hierarchiczną. Instalowanie usługi Blob Storage przy użyciu protokołu NFS w wersji 3 nie jest uwierzytelniane przy użyciu klucza konta. Podsieć węzła usługi AKS musi mieć dostęp sieciowy do konta magazynu z obsługą systemu plików NFS za pośrednictwem wybranej sieci wirtualnej lub prywatnego punktu końcowego. Upewnij się, że sieciowe grupy zabezpieczeń zezwalają na ruch NFS na portach 111 i 2048. Aby uzyskać więcej informacji na temat konfigurowania dostępu systemu plików NFS do konta magazynu, zobacz Instalowanie 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 wklej następujący kod YAML. W obszarze spec.csi.volumeAttributes, zaktualizuj resourceGroup, storageAccount, i containerName.

    Uwaga / Notatka

    volumeHandle wartość powinna być unikatowym identyfikatorem woluminu dla każdego kontenera magazynu z identycznymi obiektami blob w klastrze. Znak # i / są zarezerwowane do użytku wewnętrznego i nie można go 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
      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, sterownik CSI usługi Blob Storage Azure nie używa tej wartości, ponieważ można elastycznie zapisywać dane do momentu osiągnięcia limitu pojemności konta magazynu. Wartość jest używana tylko do dopasowywania rozmiaru między telewizorami i komputerami PVC. W przykładzie użyto fikcyjnej wartości 1Pi; ta wartość nie ustawia pojemności kontenera usługi Blob Storage.

  2. Użyj polecenia kubectl create, aby utworzyć PV

    kubectl create -f pv-blob-nfs.yaml
    
  3. Utwórz plik o nazwie pvc-blob-nfs.yaml i wklej następujący kod YAML. W obszarze volumeNamezaktualizuj wartość, aby była zgodna z nazwą pv utworzonej w poprzednim kroku.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Utwórz PVC przy użyciu polecenia kubectl create:

    kubectl create -f pvc-blob-nfs.yaml
    

Użyj woluminu trwałego

Poniższy kod YAML tworzy zasobnik, który używa obiektu PV lub PVC o nazwie pvc-blob utworzonego wcześniej w celu zainstalowania magazynu obiektów blob platformy Azure w ścieżce /mnt/blob .

  1. Utwórz plik o nazwie nginx-pod-blob.yaml i wklej następujący manifest YAML. Upewnij się, że element jest zgodny z claimName utworzonym wcześniej elementem PVC (pvc-blob).

    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. Utwórz zasobnik i zamontuj PVC przy użyciu polecenia kubectl create:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Utwórz interaktywną sesję powłoki z zasobnikiem przy użyciu następującego kubectl exec polecenia, aby sprawdzić, czy Blob Storage jest poprawnie zamontowana.

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

    Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe, które pokazują, że usługa Blob Storage jest instalowana w ścieżce /mnt/blob :

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