Delen via


Een volume maken en gebruiken met Azure Files in Azure Kubernetes Service (AKS)

Een permanent volume vertegenwoordigt een stukje opslag dat is ingericht voor gebruik met Kubernetes-pods. U kunt een permanent volume met een of veel pods gebruiken en het kan dynamisch of statisch worden ingericht. Als meerdere pods gelijktijdige toegang tot hetzelfde opslagvolume nodig hebben, kunt u Azure Files gebruiken om verbinding te maken met behulp van het SMB-protocol (Server Message Block). In dit artikel leest u hoe u dynamisch een Azure-bestandsshare maakt voor gebruik door meerdere pods in een AKS-cluster (Azure Kubernetes Service).

Dit artikel laat het volgende zien:

  • Werk met een dynamisch persistent volume (PV) door eerst het CSI-stuurprogramma (Container Storage Interface) te installeren en vervolgens dynamisch een of meer Azure-bestandsshares te creëren om aan een pod te koppelen.
  • Werk met een statische PV door een of meer Azure-bestandsshares te maken of gebruik een bestaande share en koppel deze aan een pod.

Zie Opslagopties voor toepassingen in AKS voor meer informatie over Kubernetes-volumes.

Voordat u begint

  • U hebt een Azure-opslagaccount nodig.
  • Zorg ervoor dat Azure CLI versie 2.0.59 of hoger is geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren.
  • Wanneer u kiest tussen standard- en Premium-bestandsshares, is het belangrijk dat u het inrichtingsmodel en de vereisten begrijpt van het verwachte gebruikspatroon dat u wilt uitvoeren in Azure Files. Zie Een Azure Files-prestatielaag kiezen op basis van gebruikspatronen voor meer informatie.

Een volume dynamisch inrichten

Deze sectie bevat richtlijnen voor clusterbeheerders die een of meer permanente volumes willen inrichten met details van een of meer shares in Azure Files. Een permanente volumeclaim (PVC) maakt gebruik van het opslagklasseobject om een Azure Files-bestandsshare dynamisch in te richten.

Parameters van opslagklasse voor dynamische PersistentVolumes

De volgende tabel bevat parameters die u kunt gebruiken om een aangepaste opslagklasse te definiëren voor uw PersistentVolumeClaim.

Naam Betekenis Beschikbare waarde Verplicht Standaardwaarde
accounttoegangslaag Toegangslaag voor opslagaccount Standaardaccount kan kiezen Hot of Cool, en Premium-account kan alleen kiezen Premium. Nee Leeg. Gebruik de standaardinstelling voor verschillende typen opslagaccounts.
accountQuota Hiermee beperkt u het quotum voor een account. U kunt een maximumquotum opgeven in GB (standaard 102400 GB). Als het account het opgegeven quotum overschrijdt, slaat het stuurprogramma het selecteren van het account over. Nee 102400
staBlobOpenbareToegangToe Openbare toegang tot alle blobs of containers toestaan of weigeren voor het opslagaccount dat door de driver is gemaakt. true of false Nee false
verwijderingsbeleid voor bewaarbeleid uitschakelen Geef op of DeleteRetentionPolicy moet worden uitgeschakeld voor het opslagaccount dat is gemaakt door het stuurprogramma. true of false Nee false
folderName Geef de mapnaam op in de Azure-bestandsshare. Bestaande mapnaam in Azure-bestandsshare. Nee Als de mapnaam niet bestaat in de bestandsshare, mislukt de koppeling.
krijgLaatsteAccount Hiermee bepaalt u of u de meest recente accountsleutel wilt ophalen op basis van de aanmaaktijd. Dit stuurprogramma krijgt standaard de eerste sleutel. true of false Nee false
locatie Geef de Azure-regio van het Azure-opslagaccount op. Bijvoorbeeld: eastus. Nee Als leeg, gebruikt het stuurprogramma dezelfde locatienaam als het huidige AKS-cluster.
matchTags Koppel tags wanneer de bestuurder probeert een geschikte opslagaccount te vinden. true of false Nee false
netwerk-eindpunttype Geef het type netwerkeindpunt op voor het opslagaccount dat door het stuurprogramma is gemaakt. Als privateEndpoint dit is opgegeven, wordt er een privé-eindpunt gemaakt voor het opslagaccount. In andere gevallen wordt standaard een service-eindpunt gemaakt. "",privateEndpoint Nee ""
protocol Geef het protocol voor bestandsshares op. smb, nfs Nee smb
requireInfraEncryption Geef op of de service een secundaire versleutelingslaag toepast met door het platform beheerde sleutels voor data-at-rest voor het opslagaccount dat door het stuurprogramma is gemaakt. true of false Nee false
resourcegroep Geef de resourcegroep voor de Azure-schijven op. Naam van bestaande resourcegroep Nee Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige AKS-cluster.
selecteerWillekeurigOvereenkomendeAccount Bepaalt of een overeenkomend account willekeurig moet worden geselecteerd. Standaard selecteert het stuurprogramma altijd het eerste overeenkomende account in alfabetische volgorde (Opmerking: dit stuurprogramma maakt gebruik van de zoekcache voor accounts, wat resulteert in ongelijke verdeling van het maken van bestanden in meerdere accounts). true of false Nee false
bedieningscomputer Geef het serveradres van het Azure-opslagaccount op. Bestaand serveradres, bijvoorbeeld accountname.privatelink.file.core.windows.net. Nee Als het stuurprogramma leeg is, gebruikt het stuurprogramma het standaardadres accountname.file.core.windows.net of een ander soevereine cloudaccountadres.
shareAccessTier Toegangslaag voor bestandsshare Account voor algemeen gebruik v2 kan kiezen tussen TransactionOptimized (standaard), Hoten Cool. Premium-opslagaccounttype alleen voor bestandsshares. Nee Leeg. Gebruik de standaardinstelling voor verschillende typen opslagaccounts.
deelnaam Geef de naam van de Azure-bestandsshare op. Naam van bestaande of nieuwe Azure-bestandsshare. Nee Als dit leeg is, genereert het stuurprogramma een Azure-bestandssharenaam.
delenNaamVoorvoegsel Geef het voorvoegsel voor de naam van de Azure-bestandsshare op dat door het stuurprogramma is gemaakt. De naam van de share mag alleen kleine letters, cijfers, afbreekstreepjes en lengte bevatten, mag uit minder dan 21 tekens bestaan. Nee
SKU-naam Azure Files-opslagaccounttype (alias: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS, Premium_LRS, Premium_ZRS Nee Standard_LRS
De minimale bestandsgrootte voor het Premium-accounttype is 100 GB.
Het ZRS-accounttype wordt ondersteund in beperkte regio's.
NFS-bestandsshare ondersteunt alleen het Premium-accounttype.
opslagaccount Geef een Azure Storage-accountnaam op. naam van opslagaccount -Nee Wanneer er geen specifieke opslagaccountnaam is opgegeven, zoekt het stuurprogramma naar een geschikt opslagaccount dat overeenkomt met de accountinstellingen binnen dezelfde resourcegroep. Als er geen overeenkomend opslagaccount wordt gevonden, wordt er een nieuw opslagaccount gemaakt. Als er echter een naam voor een opslagaccount is opgegeven, moet het opslagaccount al bestaan.
storageEndpointSuffix Geef het achtervoegsel van het Azure-opslageindpunt op. core.windows.net, core.chinacloudapi.cn, enz. Nee Als het stuurprogramma leeg is, wordt het standaardachtervoegsel voor het opslageindpunt gebruikt volgens de cloudomgeving. Bijvoorbeeld: core.windows.net.
etiketten Tags worden gemaakt in een nieuw opslagaccount. Tag-indeling: 'foo=aaa,bar=bbb' Nee ""
--- De volgende parameters zijn alleen voor het SMB-protocol --- ---
abonnementID Geef de Azure-abonnements-id op waarin de Azure-bestandsshare wordt gemaakt. Azure-abonnements-id Nee Indien niet leeg, resourceGroup moet worden opgegeven.
winkelAccountSleutel Geef op of de accountsleutel moet worden opgeslagen in een Kubernetes-geheim. true of false
false betekent dat het stuurprogramma de kubelet identity gebruikt om de account key op te halen.
Nee true
geheimeNaam Geef de geheime naam op om de accountsleutel op te slaan. Nee
secretNamespace Geef de naamruimte van het geheim op om de accountsleutel op te slaan.

Notitie:
Als secretNamespace niet is opgegeven, wordt het geheim aangemaakt in dezelfde naamruimte als de pod.
default,kube-system, enz. Nee PVC-naamruimte, bijvoorbeeld csi.storage.k8s.io/pvc/namespace
useDataPlaneAPI Geef op of de GEGEVENSVLAK-API moet worden gebruikt voor het maken/verwijderen/verkleinen van bestandsshares, waardoor het probleem met de beperking van de SRP-API kan worden opgelost omdat de gegevensvlak-API bijna geen limiet heeft, terwijl deze mislukt wanneer er firewall- of Vnet-instellingen in het opslagaccount zijn. true of false Nee false
--- De volgende parameters zijn alleen voor het NFS-protocol --- ---
mountPermissions Machtigingen voor gekoppelde mappen. De standaardwaarde is 0777. Als 0 is ingesteld, voert het stuurprogramma chmod niet uit na het koppelen. 0777 Nee
rootSquashType Geef het gedrag van root-squashing op voor de gedeelde map. De standaardwaarde is NoRootSquash AllSquash, , NoRootSquashRootSquash Nee
--- De volgende parameters zijn alleen bedoeld voor de VNet-instelling. Bijvoorbeeld NFS, privé-eindpunt --- ---
fsGroupChangePolicy Geeft aan hoe het stuurprogramma het eigendom van het volume wijzigt. Pod securityContext.fsGroupChangePolicy wordt genegeerd. OnRootMismatch (standaard), Always, None Nee OnRootMismatch
subnetNaam Subnetnaam Bestaande subnetnaam van het agentknooppunt. Nee Als het stuurprogramma leeg is, wordt de waarde gebruikt in het configuratiebestand van de subnetName Azure-cloud.
vnetName Naam van virtueel netwerk Naam van bestaand virtueel netwerk. Nee als het stuurprogramma leeg is, worden alle subnetten onder het virtuele clusternetwerk bijgewerkt.
vnetResourceGroup Geef de VNet-resourcegroep op waarin het virtuele netwerk is gedefinieerd. Naam van bestaande resourcegroep. Nee Als het stuurprogramma leeg is, wordt de waarde gebruikt in het configuratiebestand van de vnetResourceGroup Azure-cloud.

1 Als het opslagaccount door het stuurprogramma wordt gemaakt, hoeft u alleen de parameter in de opslagklasse op te geven networkEndpointType: privateEndpoint . Het CSI-stuurprogramma maakt het privé-eindpunt en de privé-DNS-zone (genaamd privatelink.file.core.windows.net) samen met de account. Als u uw eigen opslagaccount gebruikt, moet u het privé-eindpunt voor het opslagaccount maken. Als u Azure Files-opslag in een geïsoleerd netwerkcluster gebruikt, moet u een aangepaste opslagklasse maken met networkEndpointType: privateEndpoint. U kunt het onderstaande voorbeeld volgen ter referentie.

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

Een opslagklasse maken

In opslagklassen wordt gedefinieerd hoe u een Azure-bestandsshare maakt. Er wordt automatisch een opslagaccount gemaakt in de knooppuntresourcegroep voor gebruik met de opslagklasse voor het opslaan van de Azure Files-bestandsshare. Kies voor de volgende Azure Storage-redundantie-SKU'sskuName:

  • Standard_LRS: Standaard lokaal redundante opslag (LRS)
  • Standard_GRS: Standaard geografisch redundante opslag (GRS)
  • Standard_ZRS: Standaard zone-redundante opslag (ZRS)
  • Standard_RAGRS: Standaard geografisch redundante opslag met leestoegang (RA-GRS)
  • Premium_LRS: Premium lokaal redundante opslag (LRS)
  • Premium_ZRS: Premium zone redundante opslag (ZRS)

Notitie

De minimale Premium-bestandsshare is 100 GB.

Zie Kubernetes Storage-klassen voor meer informatie over Kubernetes-opslagklassen voor Azure Files.

  1. Maak een bestand met de naam azure-file-sc.yaml en kopieer dit in het volgende voorbeeldmanifest. Zie de sectie mountOptions voor meer informatie.

    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. Maak de opslagklasse met behulp van de kubectl apply opdracht.

    kubectl apply -f azure-file-sc.yaml
    

Een permanente volumeclaim maken

Een permanente volumeclaim (PVC) maakt gebruik van het opslagklasseobject om een Azure-bestandsshare dynamisch in te richten. U kunt de volgende YAML gebruiken om een permanente volumeclaim van 100 GB te maken met ReadWriteMany-toegang . Zie Kubernetes permanent volume voor meer informatie over toegangsmodi.

  1. Maak een bestand met de naam azure-file-pvc.yaml en kopieer dit in de volgende YAML. Zorg ervoor dat de storageClassName opslagklasse overeenkomt met de opslagklasse die u in de vorige stap hebt gemaakt.

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

    Notitie

    Als u de Premium_LRS SKU voor uw opslagklasse gebruikt, moet de minimumwaarde zijnstorage100Gi.

  2. Maak de permanente volumeclaim met behulp van de kubectl apply opdracht.

    kubectl apply -f azure-file-pvc.yaml
    

    Zodra het voltooien is, wordt de bestandsshare gemaakt. Er wordt ook een Kubernetes-geheim gemaakt dat verbindingsgegevens en referenties bevat. U kunt de kubectl get opdracht gebruiken om de status van het PVC weer te geven:

    kubectl get pvc my-azurefile
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

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

Het permanente volume gebruiken

De volgende YAML maakt een pod die gebruikmaakt van de persistent volume claim my-azurefile om de Azure Files-bestandsshare op het pad /mnt/azure te koppelen. Geef voor Windows Server-containers een mountPath op met de Windows-padconventie, zoals 'D:'.

  1. Maak een bestand met de naam azure-pvc-files.yamlen kopieer het in de volgende YAML. Zorg ervoor dat de claimName overeenkomt met de PVC die u in de vorige stap hebt gemaakt.

    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. Maak de pod met behulp van de kubectl apply opdracht.

    kubectl apply -f azure-pvc-files.yaml
    

    U hebt nu een draaiende pod met uw Azure Files-bestandsshare die is aangekoppeld aan de map /mnt/azure. Deze configuratie kan worden weergegeven bij het inspecteren van uw pod met behulp van de kubectl describe opdracht. In de volgende samengevatte voorbeelduitvoer ziet u het volume dat in de container is gemonteerd.

    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
    [...]
    

Koppelingsopties

De standaardwaarde voor fileMode en dirMode is 0777 voor Kubernetes-versies 1.13.0 en hoger. Als u het permanente volume dynamisch maakt met een opslagklasse, kunt u koppelopties opgeven voor het opslagklasseobject. Zie Koppelingsopties voor meer informatie. In het volgende voorbeeld wordt 0777 ingesteld:

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

Notitie

De locatie voor het configureren van koppelopties (mountOptions) is afhankelijk van of u dynamische of statische permanente volumes inricht. Als u een volume dynamisch inricht met een opslagklasse, geeft u de koppelingsopties op voor het opslagklasseobject (soort: StorageClass). Als u een volume statisch inricht, geeft u de koppelingsopties op voor het object PersistentVolume (soort: PersistentVolume). Als u de bestandsshare koppelt als een inlinevolume, geeft u de koppelingsopties op voor het Pod-object (soort: Pod).

Azure-tags gebruiken

Zie Azure-tags gebruiken in Azure Kubernetes Service (AKS) voor meer informatie over het gebruik van Azure-tags.

Statisch een volume inrichten

Deze sectie bevat richtlijnen voor clusterbeheerders die een of meer permanente volumes willen maken die details bevatten van een bestaande Azure Files-share voor gebruik met een workload.

Statische inrichtingsparameters voor PersistentVolume

De volgende tabel bevat parameters die u kunt gebruiken om een PersistentVolume te definiëren.

Naam Betekenis Beschikbare waarde Verplicht Standaardwaarde
volumeAttributes.resourceGroup Geef een Azure-resourcegroepnaam op. myResourceGroup (mijnHulpbronnenGroep) Nee Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige cluster.
volume-attributen.opslagaccount Geef een bestaande azure-opslagaccountnaam op. naam van opslagaccount Ja
volume-attributen.deelnaam Geef een Azure-bestandssharenaam op. bestandsdelingsnaam Ja
volumeAttributes.folderName Geef een mapnaam op in de Azure-bestandsshare. folderName Nee Als de mapnaam niet in de bestandsshare bestaat, mislukt de koppeling.
volume-attributen.protocol Geef het protocol voor bestandsshares op. smb, nfs Nee smb
volumeAttributes.server Serveradres voor Azure-opslagaccount opgeven Bestaand serveradres, bijvoorbeeld accountname.privatelink.file.core.windows.net. Nee Als het stuurprogramma leeg is, gebruikt het stuurprogramma het standaardadres accountname.file.core.windows.net of een ander soevereine cloudaccountadres.
--- De volgende parameters zijn alleen voor het SMB-protocol --- --- ---
volumeAttributes.secretName Geef een geheime naam op waarin de naam en sleutel van het opslagaccount worden opgeslagen. Nee
volumeAttributes.secretNamespace Geef een geheime naamruimte op. default,kube-system, enz. Nee PVC-naamruimte (csi.storage.k8s.io/pvc/namespace)
nodeStageSecretRef.name Geef een geheime naam op waarin de naam en sleutel van het opslagaccount worden opgeslagen. Bestaande geheime naam. Nee Als er niets is ingevuld, gebruikt de driver de kubelet-identiteit om de accountsleutel op te halen.
nodeStageSecretRef.namespace Geef een geheime naamruimte op. Kubernetes-naamruimte Nee
--- De volgende parameters zijn alleen voor het NFS-protocol --- --- ---
volumeAttriburen.fsGroepsVeranderingsbeleid Geeft aan hoe het besturingssysteem het eigendom van een volume wijzigt. Pod securityContext.fsGroupChangePolicy wordt genegeerd. OnRootMismatch (standaard), Always, None Nee OnRootMismatch
volume-attributen.koppelbevoegdheden Geef gekoppelde mapmachtigingen op. De standaardwaarde is 0777 Nee

Een Azure-bestandsshare maken

Voordat u een Azure Files-bestandsshare als Kubernetes-volume kunt gebruiken, moet u een Azure Storage-account en de bestandsshare maken.

  1. Haal de naam van de resourcegroep op met behulp van de az aks show opdracht met de --query nodeResourceGroup parameter.

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

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Maak een opslagaccount met behulp van de az storage account create opdracht met de --sku parameter. Met de volgende opdracht maakt u een opslagaccount met behulp van de Standard_LRS SKU. Zorg ervoor dat u de volgende tijdelijke aanduidingen vervangt:

    • myAKSStorageAccount met de naam van het opslagaccount
    • nodeResourceGroupName met de naam van de resourcegroep waarin de AKS-clusterknooppunten worden gehost
    • location met de naam van de regio waarin u de resource wilt maken. Dit moet dezelfde regio zijn als de AKS-clusterknooppunten.
    az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
    
  3. Exporteer de verbindingsreeks als een omgevingsvariabele met behulp van de volgende opdracht, die u gebruikt om de bestandsshare te maken.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
    
  4. Maak de bestandsshare met behulp van de az storage share create opdracht. Zorg ervoor dat u shareName vervangt door de share naam.

    az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. Exporteer de sleutel van het opslagaccount als een omgevingsvariabele met behulp van de volgende opdracht.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. Echo de naam en sleutel van het opslagaccount met behulp van de volgende opdracht. Kopieer deze informatie, omdat u deze waarden nodig hebt bij het maken van het Kubernetes-volume.

    echo Storage account key: $STORAGE_KEY
    

Een Kubernetes-geheim maken

Kubernetes heeft referenties nodig voor toegang tot de bestandsshare die in de vorige stap is gemaakt. Deze referenties worden opgeslagen in een Kubernetes-geheim, waarnaar wordt verwezen wanneer u een Kubernetes-pod maakt.

  1. Maak het geheim met behulp van de kubectl create secret opdracht. In het volgende voorbeeld wordt een geheim gemaakt met de naam azure-secret en wordt de azurestorageaccountname en azurestorageaccountkey uit de vorige stap ingevuld. Als u een bestaand Azure-opslagaccount wilt gebruiken, geeft u de accountnaam en -sleutel op.

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

Bestandsdeling koppelen als een persistent volume

  1. Maak een nieuw bestand met de naam azurefiles-pv.yaml en kopieer de volgende inhoud hierin. Onder csi, werk resourceGroup, volumeHandle, en shareName bij. Voor koppelopties is de standaardwaarde fileModedirMode0777.

    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. Maak het permanente volume met behulp van de kubectl create opdracht.

    kubectl create -f azurefiles-pv.yaml
    
  3. Maak een nieuw bestand met de naam azurefiles-mount-options-pvc.yaml en kopieer de volgende inhoud.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. Maak de PersistentVolumeClaim met behulp van de kubectl apply opdracht.

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. Controleer of uw PersistentVolumeClaim is gemaakt en gebonden aan het PersistentVolume met behulp van de kubectl get opdracht.

    kubectl get pvc azurefile
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. Werk de containerspecificatie bij om te verwijzen naar uw PersistentVolumeClaim en uw pod in het YAML-bestand. Voorbeeld:

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. Een podspecificatie kan niet worden bijgewerkt, dus verwijder de pod met behulp van de kubectl delete opdracht en maak deze opnieuw met behulp van de kubectl apply opdracht.

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

Bestandsdeling koppelen als een inline-volume

Notitie

Om prestatieproblemen te voorkomen, raden we u aan een permanent volume te gebruiken in plaats van een inline volume wanneer meerdere pods toegang hebben tot dezelfde bestandsshare. Inlinevolume heeft alleen toegang tot geheimen in dezelfde naamruimte als de pod. Als u een andere geheime naamruimte wilt opgeven, gebruikt u een permanent volume.

Als u de Azure Files-bestandsshare wilt koppelen aan uw pod, configureert u het volume in de containerspecificatie.

  1. Maak een nieuw bestand met de naam azure-files-pod.yaml en kopieer de volgende inhoud hierin. Als u de naam van de bestandsshare of de naam van het geheim hebt gewijzigd, werkt u de shareName en secretName bij. U kunt ook het mountPathpad, waarin de bestandsshare in de pod is gekoppeld, bijwerken. Geef voor Windows Server-containers een mountPath op met de Windows-padconventie, zoals '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. Maak de pod met behulp van de kubectl apply opdracht.

    kubectl apply -f azure-files-pod.yaml
    

    U hebt nu een actieve pod met een Azure Files-bestandsshare die is gekoppeld aan /mnt/azure. U kunt controleren of de share succesvol is gekoppeld met behulp van de kubectl describe opdracht.

    kubectl describe pod mypod
    

Beste praktijken

Als u de beste ervaring met Azure Files wilt hebben, volgt u deze aanbevolen procedures:

SMB-shares

  • Aanbevolen koppelingsopties voor SMB-shares zijn beschikbaar in het volgende voorbeeld van de opslagklasse:

    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
    
  • Als u Premium-bestandsshares (SSD) gebruikt en uw workload veel metagegevens bevat, moet u zich inschrijven om de functie voor het opslaan van metagegevens te gebruiken om de prestaties te verbeteren.

Zie Prestaties verbeteren voor SMB Azure-bestandsshares voor meer informatie.

NFS-delen

  • Aanbevolen mount-opties voor NFS-shares zijn beschikbaar in de volgende voorbeelden van opslagklassen:

    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
    
  • Verhoog de leesvoorloopgrootte om de leesdoorvoer te verbeteren.

  • Hoewel Azure Files ondersteuning biedt voor het instellen van nconnect tot de maximale stand van 16, raden we u aan om de mountopties te configureren met de optimale instelling nconnect=4. Momenteel zijn er geen voordelen meer dan vier kanalen voor de Azure Files-implementatie van nconnect.

Zie Prestaties verbeteren voor NFS Azure-bestandsshares voor meer informatie.

Volgende stappen

Zie CSI-stuurprogrammaparameters voor Azure Files.

Zie Best practices voor opslag en back-ups in AKS voor de bijbehorende aanbevolen procedures.