Udostępnij za pośrednictwem


Tworzenie i używanie woluminu z usługą Azure Files w usłudze Azure Kubernetes Service (AKS)

Wolumin trwały reprezentuje element magazynu, który został aprowizowany do użycia z zasobnikami Kubernetes. Można używać woluminu trwałego z jednym lub wieloma zasobnikami, który może być przydzielany dynamicznie lub statycznie. Jeśli wiele podów potrzebuje współbieżnego dostępu do tego samego woluminu magazynu, możesz użyć usługi Azure Files do połączenia, korzystając z protokołu SMB (Server Message Block). W tym artykule przedstawiono, jak dynamicznie utworzyć udostępniany zasób plikowy Azure do wykorzystania przez wiele podów w klastrze usługi Azure Kubernetes Service (AKS).

W tym artykule pokazano, jak wykonać następujące działania:

  • Współpracuj z dynamicznym woluminem trwałym (PV), instalując sterownik interfejsu magazynu kontenerów (CSI) i dynamicznie tworząc co najmniej jeden udział plików platformy Azure w celu dołączenia do zasobnika.
  • Pracuj ze statycznym serwerem pv, tworząc co najmniej jeden udział plików platformy Azure lub używając istniejącego i dołączając go do zasobnika.

Więcej informacji na temat woluminów Kubernetes można znaleźć w artykule Opcje magazynu dla aplikacji w usłudze AKS.

Zanim rozpoczniesz

Dynamicznie przydzielić wolumin

Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą aprowizować co najmniej jeden wolumin trwały zawierający szczegóły co najmniej jednego udziału w usłudze Azure Files. Definicja trwałego woluminu (PVC) używa obiektu klasy magazynu do dynamicznego tworzenia udziału plików Azure Files.

Parametry klasy magazynu dla dynamicznych Trwałych Wolumenów

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

Nazwa Znaczenie Dostępna wartość Obowiązkowy Wartość domyślna
Poziom dostępu konta Warstwa dostępu dla konta magazynowego Konto standardowe może wybrać Hot lub Cool, a konto Premium może wybrać tylko pozycję Premium. Nie. Pusty. 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 102400 GB). Jeśli konto przekroczy określony limit przydziału, sterownik pomija wybranie konta. Nie. 102400
zezwólNaPublicznyDostępDoBlobów 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
wyłącz politykę retencji usuwania Określ, czy należy wyłączyć zasadę DeleteRetentionPolicy dla konta pamięci masowej utworzonego przez sterownik. true lub false Nie. false
nazwaFolderu 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.
zdobądźNajnowszeKonto Określa, czy pobrać 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
typ punktu końcowego sieci 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.
wybierzLosowePasująceKonto 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.
poziom_dostępu_share 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. Pusty. Użyj ustawienia domyślnego dla różnych typów kont przechowywania.
NazwaUdostępnienia 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.
Nazwa SKU Typ konta magazynu usługi Azure Files (alias: storageAccountType) Standard_LRS, Standard_ZRSStandard_GRS, Standard_RAGRS, Standard_RAGZRSPremium_LRSPremium_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.
konto magazynu Określ nazwę konta usługi Azure Storage. storageAccountName -Nie Jeśli określona nazwa konta magazynu nie zostanie podana, sterownik wyszuka odpowiednie konto magazynu zgodne z ustawieniami konta w tej samej grupie zasobów. Jeśli nie uda się znaleźć pasującego konta magazynowego, 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.
Etykiety Tagi są tworzone na nowym koncie magazynu. Format tagu: "foo=aaa,bar=bbb" Nie. ""
--- Następujące parametry dotyczą tylko protokołu SMB --- ---
identyfikator subskrypcji Określ identyfikator subskrypcji platformy Azure, w którym jest tworzony udział plików platformy Azure. Identyfikator subskrypcji Azure Nie. Jeśli nie jest pusty, resourceGroup należy podać.
kluczKontaSklepu Określ, czy klucz konta ma być przechowywany w tajnych danych Kubernetes. true lub false
false oznacza, że sterownik używa tożsamości kubeleta do uzyskania klucza konta.
Nie. true
nazwaTajna Określ nazwę sekretu do przechowywania klucza konta. Nie.
secretNamespace Określ nazwę przestrzeni sekretnych do przechowywania klucza konta.

Uwaga:
Jeśli secretNamespace nie zostanie określony, tajemnica zostanie utworzona w tej samej przestrzeni nazw co zasobnik.
default,kube-system itp. Nie. Przestrzeń nazw PVC, na przykład csi.storage.k8s.io/pvc/namespace
useDataPlaneAPI Określ, czy używać interfejsu API płaszczyzny danych do tworzenia/usuwania/zmiany rozmiaru udziału plików, co może rozwiązać problem z ograniczaniem przepływności interfejsu API protokołu SRP, ponieważ interfejs API płaszczyzny danych nie ma prawie żadnego limitu, podczas gdy w przypadku ustawienia zapory lub sieci wirtualnej na koncie magazynu zakończy się niepowodzeniem. true lub false Nie. false
--- Następujące parametry dotyczą tylko protokołu NFS --- ---
uprawnienia montowania Zainstalowane uprawnienia folderu. Wartość domyślna to 0777. Jeśli ustawiono wartość 0, sterownik nie wykonuje operacji chmod po montażu 0777 Nie.
rootSquashType Określ zachowanie root squashing dla udziału. Wartość domyślna to NoRootSquash AllSquash, , NoRootSquashRootSquash Nie.
--- Następujące parametry dotyczą tylko ustawień sieci wirtualnej. Na przykład NFS, prywatny punkt końcowy --- ---
Polityka zmiany grupy fs Wskazuje, jak sterownik zmienia własność woluminu. Zasobnik securityContext.fsGroupChangePolicy jest ignorowany. OnRootMismatch (ustawienie domyślne), Always, None Nie. OnRootMismatch
nazwa podsieci Nazwa podsieci Istniejąca nazwa podsieci węzła agenta. Nie. Jeśli jest pusty, sterownik używa wartości subnetName w pliku konfiguracji chmury platformy Azure.
vnetName Nazwa sieci wirtualnej Istniejąca nazwa sieci wirtualnej. Nie. jeśli jest pusty, sterownik zaktualizuje wszystkie podsieci w sieci wirtualnej klastra.
vnetResourceGroup Określ grupę zasobów sieci wirtualnej, w której zdefiniowano sieć wirtualną. Istniejąca nazwa grupy zasobów. Nie. Jeśli jest pusty, sterownik używa wartości vnetResourceGroup w pliku konfiguracji chmury platformy Azure.

1 Jeśli konto storage jest tworzone przez sterownik, wystarczy określić parametr networkEndpointType: privateEndpoint w klasie storage. 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 magazynu usługi Azure Files w izolowanym klastrze sieciowym, musisz utworzyć niestandardową klasę magazynu z parametrem "networkEndpointType: privateEndpoint". Możesz kierować się poniższym przykładem jako odniesieniem.

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

Utwórz klasę magazynu

Klasy pamięci definiują sposób tworzenia udziału plików Azure. Konto magazynu jest tworzone automatycznie w grupie zasobów węzła do użycia z klasą magazynu do przechowywania udziału plików usługi Azure Files. Wybierz jedną z następujących opcji nadmiarowości magazynowania w Azure dla programu :

  • Standard_LRS: Standardowy magazyn lokalnie nadmiarowy (LRS)
  • Standard_GRS: Standardowe przechowywanie georedundantne (GRS)
  • Standard_ZRS: Strefowa nadmiarowość magazynu Standard (ZRS)
  • Standard_RAGRS: Geograficznie nadmiarowa pamięć masowa z dostępem do odczytu w stopniu standardowym (RA-GRS)
  • Premium_LRS: Magazyn lokalnie nadmiarowy w warstwie Premium (LRS)
  • Premium_ZRS: Magazyn strefowo nadmiarowy w warstwie Premium (ZRS)

Uwaga / Notatka

Minimalny udział plików w warstwie Premium wynosi 100 GB.

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 mountOptions, zobacz sekcję Opcje montowania.

    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
    

Tworzenie żądania trwałego woluminu

Żądanie trwałego wolumenu (PVC) używa obiektu klasy magazynu do dynamicznego tworzenia udziału plików platformy Azure. Poniższy kod YAML umożliwia utworzenie trwałego oświadczenia woluminu 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 żądanie utworzenia trwałego woluminu za pomocą polecenia kubectl apply.

    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
    

Korzystanie z woluminu trwałego

Poniższy kod YAML tworzy zasobnik, który używa trwałego żądania przydzielenia woluminu my-azurefile do zamontowania udziału plików usługi Azure Files w ścieżce /mnt/azure. W przypadku kontenerów systemu Windows Server określ mountPath, używając konwencji ścieżki Windows, takiej jak "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

Wartość domyślna elementu fileMode i dirMode to 0777 dla platformy Kubernetes w wersji 1.13.0 lub nowszej. Jeśli dynamicznie tworzysz wolumin trwały za pomocą klasy magazynu, możesz określić opcje instalacji w obiekcie klasy magazynu. Aby uzyskać więcej informacji, zobacz Opcje instalacji. W poniższym przykładzie ustawiono wartość 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

Uwaga / Notatka

Lokalizacja konfigurowania opcji instalacji (mountOptions) zależy od tego, czy aprowizujesz dynamiczne lub statyczne woluminy trwałe. Jeśli dynamicznie aprowizujesz wolumin za pomocą klasy pamięci masowej, określ opcje montowania w obiekcie klasy pamięci masowej (rodzaj: StorageClass). Jeśli statycznie przydzielasz wolumin, określ opcje montowania w obiekcie PersistentVolume (rodzaj: PersistentVolume). Jeśli instalujesz udział plików jako wolumin wbudowany, określ opcje instalacji w obiekcie Zasobnik (rodzaj: Zasobnik).

Korzystanie z tagów platformy Azure

Aby uzyskać więcej informacji na temat używania tagów platformy Azure, zobacz Używanie tagów platformy Azure w usłudze Azure Kubernetes Service (AKS).

Statyczne przydzielenie woluminu

Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą utworzyć co najmniej jeden wolumin trwały zawierający szczegóły istniejącego udziału usługi Azure Files do użycia z obciążeniem.

Statyczne parametry przydzielenia dla PersistentVolume

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

Nazwa Znaczenie Dostępna wartość Obowiązkowy Wartość domyślna
volumeAttributes.resourceGroup Określ nazwę grupy zasobów platformy Azure. GrupaZasobówMoja 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. storageAccountName Tak
volumeAttributes.shareName Określ nazwę udostępniania plików Azure. nazwaUdostępnianiaPlików Tak
volumeAttributes.folderName Określ nazwę folderu w udziale plików platformy Azure. nazwaFolderu 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.
--- Następujące parametry dotyczą tylko protokołu SMB --- --- ---
volumeAttributes.secretName Określ nazwę sekretu, który zawiera nazwę i klucz konta magazynu. Nie.
volumeAttributes.secretNamespace Określ przestrzeń nazw tajnych. default,kube-system itp. Nie. Przestrzeń nazw PVC (csi.storage.k8s.io/pvc/namespace)
nodeStageSecretRef.name Określ nazwę sekretu, który zawiera nazwę i klucz konta magazynu. Istniejąca nazwa tajna. Nie. Jeśli pole jest puste, sterownik używa tożsamości kubeleta do uzyskania klucza konta.
nodeStageSecretRef.namespace Określ przestrzeń nazw tajnych. Przestrzeń nazw platformy Kubernetes Nie.
--- Następujące parametry dotyczą tylko protokołu NFS --- --- ---
volumeAttributes.fsGroupChangePolicy Wskazuje, w jaki sposób sterownik zmienia właściciela wolumenu. Zasobnik securityContext.fsGroupChangePolicy jest ignorowany. OnRootMismatch (ustawienie domyślne), Always, None Nie. OnRootMismatch
atrybutyWoluminu.uprawnieniaMontowania Określ uprawnienia do zamontowanego folderu. Wartość domyślna to 0777 Nie.

Utwórz udział plików Azure

Aby można było użyć udziału plików usługi Azure Files jako woluminu Kubernetes, musisz utworzyć konto usługi Azure Storage i udział plików.

  1. Pobierz nazwę grupy zasobów 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. Utwórz konto magazynu za pomocą polecenia az storage account create z parametrem --sku. Następujące polecenie tworzy konto magazynowe przy użyciu Standard_LRS klasy SKU. Upewnij się, że zastąpisz następujące elementy zastępcze:

    • myAKSStorageAccount z nazwą konta magazynowego
    • nodeResourceGroupName z nazwą grupy zasobów, w której znajdują się węzły klastra usługi AKS
    • location z nazwą regionu, w którym ma zostać utworzony zasób. Powinien on być tym samym regionem co węzły klastra usługi AKS.
    az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
    
  3. Wyeksportuj łańcuch połączenia jako zmienną środowiskową przy użyciu następującego polecenia, jakiego użyjesz do utworzenia udziału plików.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
    
  4. Utwórz udział plików za pomocą polecenia az storage share create. Pamiętaj, aby zastąpić shareName nazwą udziału.

    az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. Wyeksportuj klucz konta magazynu jako zmienną środowiskową przy użyciu następującego polecenia.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. Wyświetl nazwę i klucz konta przechowywania przy użyciu następującego polecenia. Skopiuj te informacje, ponieważ te wartości są potrzebne podczas tworzenia woluminu Kubernetes.

    echo Storage account key: $STORAGE_KEY
    

Utwórz sekret Kubernetes

Kubernetes potrzebuje poświadczeń, aby uzyskać dostęp do zasobu plikowego utworzonego w poprzednim kroku. Te poświadczenia są przechowywane w sekrecie Kubernetes, do którego odwołujemy się podczas tworzenia poda Kubernetes.

  1. Utwórz tajemnicę za pomocą polecenia kubectl create secret. Poniższy przykład tworzy tajny o nazwie azure-secret i wypełnia azurestorageaccountname i azurestorageaccountkey z poprzedniego kroku. Aby użyć istniejącego konta usługi Azure Storage, podaj nazwę konta i klucz.

    kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
    

Montowanie udziału plików jako woluminu trwałego

  1. Utwórz nowy plik o nazwie azurefiles-pv.yaml i skopiuj do poniższej zawartości. W obszarze csi, zaktualizuj resourceGroup, volumeHandle, i shareName. W przypadku opcji montowania wartością domyślną dla fileMode i dirMode jest 0777.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
        driver: file.csi.azure.com
        volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"  # make sure this volumeid is unique for every identical share in the cluster
        volumeAttributes:
          shareName: aksshare
        nodeStageSecretRef:
          name: azure-secret
          namespace: default
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - uid=0
        - gid=0
        - mfsymlinks
        - cache=strict
        - nosharesock
        - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    
  2. Utwórz wolumin trwały przy użyciu kubectl create polecenia .

    kubectl create -f azurefiles-pv.yaml
    
  3. Utwórz nowy plik o nazwie azurefiles-mount-options-pvc.yaml i skopiuj następującą zawartość.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. Utwórz PersistentVolumeClaim, używając polecenia kubectl apply.

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. Sprawdź, czy PersistentVolumeClaim został utworzony i powiązany z PersistentVolume przy użyciu poleceniem kubectl get.

    kubectl get pvc azurefile
    

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

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. Zaktualizuj specyfikację kontenera, aby odwołać się do elementu PersistentVolumeClaim i zasobnika w pliku YAML. Przykład:

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. Nie można zaktualizować specyfikacji zasobnika, dlatego usuń zasobnik, używając polecenia kubectl delete, i utwórz go ponownie, korzystając z polecenia kubectl apply.

    kubectl delete pod mypod
    
    kubectl apply -f azure-files-pod.yaml
    

Montowanie zasobu plików jako woluminu wbudowanego

Uwaga / Notatka

Aby uniknąć problemu z wydajnością, zalecamy użycie woluminu trwałego zamiast woluminu wbudowanego, gdy wiele podów uzyskuje dostęp do tego samego współdzielonego zasobu plikowego. Wolumin wbudowany może uzyskiwać dostęp tylko do tajemnic w tej samej przestrzeni nazw co pod. Aby określić inną przestrzeń nazw dla sekretnych danych, użyj woluminu trwałego.

Aby zainstalować udział plików usługi Azure Files w zasobniku, należy skonfigurować wolumin w specyfikacji kontenera.

  1. Utwórz nowy plik o nazwie azure-files-pod.yaml i skopiuj do poniższej zawartości. Jeśli zmieniono nazwę udziału plików lub nazwę wpisu tajnego, zaktualizuj elementy shareName i secretName. Można również zaktualizować element mountPath, czyli ścieżkę, w której znajduje się dysk współdzielony Files zamontowany w podzie. W przypadku kontenerów systemu Windows Server określ mountPath, używając konwencji ścieżki Windows, takiej jak "D:".

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
        - image: 'mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine'
          name: mypod
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - name: azure
              mountPath: /mnt/azure
              readOnly: false
      volumes:
        - name: azure
          csi:
            driver: file.csi.azure.com
            volumeAttributes:
              secretName: azure-secret  # required
              shareName: aksshare  # required
              mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock,nobrl'  # optional
    
  2. Utwórz pod przy użyciu polecenia kubectl apply.

    kubectl apply -f azure-files-pod.yaml
    

    Teraz masz uruchomiony pod z udziałem plików Azure Files zamontowanym w lokalizacji /mnt/azure. Możesz zweryfikować, czy udział został pomyślnie zainstalowany, przy użyciu polecenia kubectl describe.

    kubectl describe pod mypod
    

Najlepsze rozwiązania

Aby uzyskać najlepsze środowisko pracy z usługą Azure Files, postępuj zgodnie z następującymi najlepszymi rozwiązaniami:

Udziały SMB

  • Zalecane opcje montowania udziałów SMB są dostępne w następującym przykładzie klasy pamięci:

    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.

Udziały NFS

  • Zalecane opcje montowania zasobów udostępnionych NFS są dostępne w następującym przykładzie klasy magazynu.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azurefile-csi-nfs
    provisioner: file.csi.azure.com
    parameters:
      protocol: nfs
      skuName: Premium_LRS     # available values: Premium_LRS, Premium_ZRS
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - nconnect=4  # improves performance by enabling multiple connections to share
      - noresvport  # improves availability
      - actimeo=30  # reduces latency for metadata-heavy workloads
    
  • Zwiększ rozmiar odczytu z wyprzedzeniem, aby zwiększyć przepływność odczytu.

  • Chociaż usługa Azure Files obsługuje ustawienie nconnect do maksymalnego ustawienia 16, zalecamy skonfigurowanie opcji instalacji przy użyciu optymalnego ustawienia nconnect=4. W chwili obecnej nie ma żadnych korzyści w implementacji nconnect dla usługi Azure Files poza czterema kanałami.

Aby uzyskać więcej informacji, zobacz Poprawa wydajności udostępniania plików platformy Azure NFS.

Dalsze kroki

Aby uzyskać informacje o parametrach sterownika CSI usługi Azure Files, zobacz parametry sterownika CSI.

Aby uzyskać informacje o skojarzonych najlepszych rozwiązaniach, zobacz Najlepsze rozwiązania dotyczące magazynu i tworzenia kopii zapasowych w usłudze AKS.