Permanente volumes (V's) maken en beheren met Azure Blob Storage in Azure Kubernetes Service (AKS)

Als meerdere pods gelijktijdige toegang tot hetzelfde opslagvolume nodig hebben, kunt u Azure Blob Storage gebruiken om verbinding te maken via blobfuse of Network File System (NFS).

In dit artikel leest u hoe u dynamisch en statisch Azure Blob Storage-containers kunt maken voor gebruik door meerdere pods in een AKS-cluster (Azure Kubernetes Service).

Vereiste voorwaarden

  • Het CSI-stuurprogramma voor Azure Blob Storage ingeschakeld op uw AKS-cluster.

  • Een opslagaccount waarvoor NFS v3 is ingeschakeld, zodat u een permanent volume kunt koppelen met behulp van het NFS-protocol. U kunt NFS v3 niet inschakelen voor een bestaand opslagaccount. Zie Een NFS v3-account maken voor meer informatie.

  • Voer de volgende taken uit om een Azure Data Lake Storage-account te ondersteunen bij het gebruik van blobfuse-koppeling:

    • Als u een Data Lake Storage-account wilt maken met behulp van het stuurprogramma voor dynamische inrichting, geeft u isHnsEnabled: "true" op in de parameters van de opslagklasse.
    • Als u blobfuse-toegang tot een Data Lake Storage-account in statische inrichting wilt inschakelen, geeft u de koppelingsoptie --use-adls=true op in het permanente volume.
    • Als u een opslagaccount met hiërarchische naamruimte wilt inschakelen, moeten bestaande permanente volumes opnieuw worden gekoppeld met --use-adls=true de koppelingsoptie.
  • De blobfuse-cache bevindt zich standaard in de /mnt map. Als de VM-SKU een tijdelijke schijf biedt, wordt de /mnt map gekoppeld op de tijdelijke schijf. Als de VM-SKU echter geen tijdelijke schijf biedt, wordt de /mnt map gekoppeld op de besturingssysteemschijf, kunt u de koppelingsoptie instellen om een andere cachemap op te geven --tmp-path= .

Gebruik ingebouwde opslagklassen om dynamische PV's te maken met Azure Blob Storage

Er wordt een opslagklasse gebruikt om te definiëren hoe een Azure Blob Storage-container wordt gemaakt. Er wordt automatisch een opslagaccount gemaakt in de knooppuntresourcegroep voor gebruik met de opslagklasse voor het opslaan van de Azure Blob Storage-container. Wanneer u CSI-stuurprogramma's voor opslag in AKS gebruikt, zijn er twee extra ingebouwde stuurprogramma's die gebruikmaken van het CSI-stuurprogramma StorageClasses voor Azure Blob Storage.

Het terugneembeleid voor beide opslagklassen zorgt ervoor dat de onderliggende Azure Blob-opslag wordt verwijderd wanneer het respectieve PV wordt verwijderd. De opslagklassen configureren de container ook zodat deze standaard kan worden uitgebreid, omdat de set allowVolumeExpansion parameter is ingesteld op waar.

Opmerking

Het verkleinen van permanente volumes wordt niet ondersteund.

U kunt een van de volgende Azure Storage-redundantie-SKU's selecteren voor de skuname parameter in de definitie van de opslagklasse:

  • Standard_LRS: Lokaal redundante standaardopslag
  • Premium_LRS: Premium lokaal redundante opslag
  • Standard_ZRS: Standaard zone-redundante opslag
  • Premium_ZRS: Premium-zone-redundante opslag
  • Standard_GRS: Standaard geografisch redundante opslag
  • Standard_RAGRS: Georedundante opslag met leestoegang

Aangepaste opslagklassen maken voor dynamische tv's met Azure Blob Storage

De standaardopslagklassen zijn geschikt voor de meeste scenario's. In sommige gevallen wilt u mogelijk uw eigen opslagklasse aanpassen met uw eigen parameters. In deze sectie geven we twee voorbeelden: één met het NFS-protocol en één met behulp van blobfuse.

Voorbeeld van aangepaste opslagklasse met behulp van het NFS-protocol

Het manifest in dit voorbeeld koppelt een Blob Storage-container met behulp van het NFS-protocol. U kunt deze gebruiken om de tags parameter toe te voegen.

  1. Maak een bestand met de naam blob-nfs-sc.yaml en plak het volgende voorbeeldmanifest:

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

    kubectl apply -f blob-nfs-sc.yaml
    

    De uitvoer zou ongeveer moeten lijken op de volgende voorbeelduitvoer:

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

Voorbeeld van aangepaste opslagklasse met behulp van blobfuse

Het manifest in dit voorbeeld maakt gebruik van blobfuse en koppelt een Blob Storage-container. U kunt deze gebruiken om de skuName parameter bij te werken.

  1. Maak een bestand met de naam blobfuse-sc.yaml en plak het volgende voorbeeldmanifest:

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

    kubectl apply -f blobfuse-sc.yaml
    

    De uitvoer zou ongeveer moeten lijken op de volgende voorbeelduitvoer:

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

Parameters van Opslagklasse voor dynamische PV's met Azure Blob Storage

Gebruik de volgende parametergroepen om een aangepaste opslagklasse te definiëren voor uw permanente volumeclaims (PVC's) met Azure Blob Storage:

  • Opslagaccount: skuName, location, resourceGroup, subscriptionID, , storageAccount, accessTiernetworkEndpointType, , allowBlobPublicAccess, allowSharedKeyAccess, requireInfraEncryption, publicNetworkAccess, en matchTagstags.
  • Container en eindpunt: protocol, , containerName, containerNamePrefix, server, storageEndpointSuffix, useDataPlaneAPI, , softDeleteBlobs, , en softDeleteContainersenableBlobVersioning.
  • BlobFuse: storeAccountKey, getLatestAccountKey, secretName, en secretNamespaceisHnsEnabled.
  • NFS: mountPermissions en fsGroupChangePolicy.
  • Virtueel netwerk: vnetResourceGroup, vnetName, en subnetNamevnetLinkName.

Parameters voor opslagaccounts configureren voor dynamische tv's met Azure Blob-opslag

Gebruik de volgende parameters om het Azure opslagaccount te configureren voor een dynamisch ingerichte HW:

Naam Meaning Beschikbare waarden Verplicht Standaardwaarde
skuName Geef een Azure Storage-accounttype (alias: storageAccountType) op. Standard_LRS, , Premium_LRSStandard_GRS, Standard_RAGRS, , , Standard_ZRSPremium_ZRS Nee. Standard_LRS
location Geef een Azure-locatie op. eastus Nee. Als de invoer voor de locatie leeg is, gebruikt het stuurprogramma dezelfde locatienaam als het huidige cluster.
resourceGroup Geef een Azure-resourcegroepnaam op. myResourceGroup Nee. Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige cluster.
subscriptionID Geef de Azure-abonnements-id op waarin de blobopslagmap wordt gemaakt. Azure-abonnements-id Nee. Indien niet leeg, resourceGroup moet worden opgegeven.
storageAccount Geef een Azure Storage-accountnaam op. storageAccountName Nee. Wanneer er geen specifieke opslagaccountnaam wordt opgegeven, zoekt het stuurprogramma naar een geschikt opslagaccount dat overeenkomt met de accountinstellingen binnen dezelfde resourcegroep. Als er geen overeenkomend opslagaccount kan worden gevonden, wordt er een nieuw opslagaccount gemaakt. Als er echter een naam voor een opslagaccount is opgegeven, moet het opslagaccount al bestaan.
networkEndpointType Geef het type netwerkeindpunt op voor het opslagaccount dat door het stuurprogramma is gemaakt. Als u opgeeft privateEndpoint, maakt het stuurprogramma een privé-eindpunt voor het opslagaccount. In andere gevallen maakt het stuurprogramma een service-eindpunt voor het NFS-protocol. "", privateEndpoint Nee. "". Voor een AKS-cluster voegt u de naam van het AKS-cluster toe aan de rol Inzender in de resourcegroep die als host fungeert voor het virtuele netwerk.
accessTier Geef de toegangslaag voor het opslagaccount op. Hot, , CoolPremium Nee. Gebruikt de standaardlaag voor het geselecteerde opslagaccounttype. Premium-accounts ondersteunen alleen Premium.
allowBlobPublicAccess Openbare toegang tot alle blobs of containers toestaan of toestaan voor een opslagaccount dat door het stuurprogramma is gemaakt. true, false Nee. false
allowSharedKeyAccess Toegang tot gedeelde sleutels toestaan of weigeren voor een opslagaccount dat door het stuurprogramma is gemaakt. Deze parameter is van toepassing op NFS-koppelingen en BlobFuse-koppelingen die gebruikmaken van beheerde identiteit. true, false Nee. true
requireInfraEncryption Een secundaire laag van door het platform beheerde versleuteling vereisen voor data-at-rest in een opslagaccount dat door het stuurprogramma is gemaakt. true, false Nee. false
publicNetworkAccess Stel de eigenschap openbare netwerktoegang in voor een opslagaccount dat door het stuurprogramma is gemaakt. Enabled, , DisabledSecuredByPerimeter Nee. Maakt gebruik van de Azure Storage standaardinstelling.
tags Tags maken in een nieuw opslagaccount. Tagindeling: foo=aaa,bar=bbb Nee. ""
matchTags Koppel tags wanneer het stuurprogramma zoekt naar een geschikt opslagaccount. true, false Nee. false

Container- en eindpuntparameters configureren voor dynamische TV's met Azure Blob Storage

Gebruik de volgende parameters voor het configureren van de container, het koppelingsprotocol, het opslageindpunt en tags voor een dynamisch ingerichte HW:

Naam Description Beschikbare waarden Verplicht Standaardwaarde
protocol Geef blobFuse, BlobFuse2 of NFS v3-koppeling op. fuse, , fuse2nfs Nee. fuse
containerName Geef de naam van de bestaande container (map) op. container Nee. Als dit leeg is, maakt de driver een nieuwe containernaam aan, beginnend met pvc-fuse voor blobfuse of pvc-nfs voor NFS v3.
containerNamePrefix Geef het voorvoegsel van de Azure Storage-map op, aangemaakt door de driver. Mag alleen kleine letters, cijfers en afbreekstreepjes bevatten en mag uit minder dan 21 tekens bestaan. Nee.
server Geef de domeinnaam van het Azure-opslagaccount op. Bestaande DNS-domeinnaam van opslagaccount, bijvoorbeeld <storage-account>.blob.core.windows.net. Nee. Als het stuurprogramma leeg is, wordt standaard <storage-account>.blob.core.windows.net of een andere DNS-domeinnaam voor het soevereine cloudopslagaccount gebruikt.
storageEndpointSuffix Geef het achtervoegsel van het Azure-opslageindpunt op. core.windows.net Nee. Als het stuurprogramma leeg is, wordt het standaardachtervoegsel voor het opslageindpunt gebruikt volgens de cloudomgeving.
useDataPlaneAPI Gebruik de Azure Storage gegevensvlak-API om containers te maken en te verwijderen. Deze optie kan beperking van de opslagresourceprovider voorkomen, maar mislukt wanneer de firewall van het opslagaccount of regels voor virtuele netwerken de toegang tot het gegevensvlak blokkeren. true, false Nee. false
softDeleteBlobs Schakel voorlopig verwijderen in voor blobs en geef de bewaarperiode in dagen op. Een bewaarperiode, bijvoorbeeld 7 Nee. Uitgeschakeld
softDeleteContainers Schakel voorlopig verwijderen in voor containers en geef de bewaarperiode op in dagen. Een bewaarperiode, bijvoorbeeld 7 Nee. Uitgeschakeld
enableBlobVersioning Blob-versiebeheer inschakelen. U kunt versiebeheer niet inschakelen wanneer protocol dat wel nfs of isHnsEnabled niet is true. true, false Nee. false

BlobFuse-parameters configureren voor dynamische tv's met Azure Blob Storage

De volgende parameters zijn alleen van toepassing wanneer u BlobFuse gebruikt voor een dynamisch ingerichte HW:

Naam Description Beschikbare waarden Verplicht Standaardwaarde
storeAccountKey Geef de sleutel van het archiefaccount op in het Kubernetes-geheim.

Opmerking:
false betekent dat het stuurprogramma de kubelet identity gebruikt om de account key op te halen.
true,false Nee. true
getLatestAccountKey Haal de meest recente sleutel van het opslagaccount op op basis van de aanmaaktijd in plaats van de eerste sleutel te gebruiken. true, false Nee. false
secretName 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. default,kube-system, enz. Nee. PVC-naamruimte
isHnsEnabled Schakel Hierarchical namespace een Azure Data Lake Storage-account in. true,false Nee. false

NFS-parameters configureren voor dynamische TV's met Azure Blob Storage

De volgende parameter is alleen van toepassing wanneer u NFS gebruikt voor een dynamisch ingerichte HW:

Naam Description Beschikbare waarden Verplicht Standaardwaarde
mountPermissions Geef gekoppelde mapmachtigingen op. De standaardwaarde is 0777. Als 0 is ingesteld, voert de driver chmod niet uit na het mounten. Nee. 0777
fsGroupChangePolicy Geef op hoe het stuurprogramma het volumeeigendom wijzigt. Het stuurprogramma negeert securityContext.fsGroupChangePolicy in de podspecificatie. OnRootMismatch, , AlwaysNone Nee. OnRootMismatch

Parameters voor virtuele netwerken configureren voor dynamischeV's met Azure Blob Storage

Gebruik de volgende parameters wanneer het stuurprogramma de toegang tot een virtueel netwerk configureert voor een dynamisch ingerichte HW:

Naam Description Beschikbare waarden Verplicht Standaardwaarde
vnetResourceGroup Geef de resourcegroep op die het virtuele netwerk bevat. Naam van bestaande resourcegroep Nee. Gebruikt de vnetResourceGroup waarde in de Azure cloudconfiguratie.
vnetName Geef de naam van het virtuele netwerk op. Naam van bestaand virtueel netwerk Nee. Gebruikt de vnetName waarde in de Azure cloudconfiguratie.
subnetName Geef een of meer bestaande AKS-knooppuntsubnetten op. Scheid meerdere subnetnamen met komma's. Bestaande subnetnamen Nee. Hiermee worden alle subnetten in het virtuele clusternetwerk bijgewerkt.
vnetLinkName Geef de virtuele netwerkkoppeling op die is gekoppeld aan de privé-DNS-zone. Naam van bestaande of nieuwe virtuele netwerkkoppeling Nee. <vnetName>-vnetlink

Privé-eindpunten configureren voor dynamische tv's met Azure Blob-opslag

Opmerking

Als het opslagaccount door het stuurprogramma wordt gemaakt, hoeft u alleen de parameter op te geven networkEndpointType: privateEndpoint in de opslagklasse. Het CSI-stuurprogramma maakt het privé-eindpunt en de privé-DNS-zone (genaamd privatelink.blob.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 Blob Storage in een geïsoleerd netwerkcluster gebruikt, moet u een aangepaste opslagklasse maken met networkEndpointType: privateEndpoint. U kunt het volgende voorbeeldmanifest gebruiken als referentie:

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.

Een PVC maken voor dynamische inrichting

Een PVC maakt gebruik van het opslagklasseobject om een Azure Blob-opslag dynamisch in te richten. U kunt het YAML-voorbeeldmanifest in deze sectie gebruiken om een PVC te maken dat 5 GB groot is met ReadWriteMany-toegang . Zie Kubernetes PV-toegangsmodi voor meer informatie over toegangsmodi.

  1. Maak een bestand met de naam blob-nfs-pvc.yaml en plak het volgende YAML-manifest:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Maak het PVC met behulp van de kubectl create opdracht:

    kubectl create -f blob-nfs-pvc.yaml
    
  3. Bekijk de status van het PVC met de kubectl get opdracht:

    kubectl get pvc azure-blob-storage
    

    De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer, waarin wordt aangegeven dat het PVC zich in een Bound status bevindt:

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

Een dynamisch ingericht blob-opslagvolume in een pod koppelen

Met de volgende YAML maakt u een pod die gebruikmaakt van de permanente volumeclaim azure-blob-storage om de Azure Blob-opslag aan het /mnt/blob pad te koppelen.

  1. Maak een bestand met de naam blob-nfs-pv en plak het volgende YAML-manifest. Zorg ervoor dat de claimName PVC overeenkomt met het PVC dat u eerder hebt gemaakt (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. Maak de pod met behulp van de kubectl apply opdracht:

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Zodra de pod met succes draait, maakt u een nieuw bestand met de naam test.txt met behulp van de volgende opdracht:

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Controleer of de schijf correct is gekoppeld met behulp van de volgende opdracht om de bestanden in de gekoppelde map weer te geven:

    kubectl exec mypod -- ls /mnt/blob
    

    Uw uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer, waarin het test.txt bestand wordt weergegeven dat u hebt gemaakt in de gekoppelde Azure Blob-opslag:

    test.txt
    

Een StatefulSet gebruiken om de levenscyclus van een volume te beheren met Azure Blob Storage

Als u een opslagvolume wilt behouden voor uw workload, kunt u een StatefulSet gebruiken. Deze status maakt het gemakkelijker om bestaande volumes te koppelen aan nieuwe pods die eventuele mislukte pods vervangen. In de volgende voorbeelden ziet u hoe u een StatefulSet instelt voor Blob Storage met behulp van het NFS-protocol of Blobfuse.

Opmerking

Als u het NFS-protocol gebruikt, moet de identiteit van het AKS-clusterbesturingsvlak (de naam van uw AKS-cluster) worden toegevoegd aan de rol Inzender in het virtuele netwerk en de netwerkbeveiligingsgroep.

  1. Maak een bestand met de naam azure-blob-nfs-ss.yaml en plak het volgende YAML-manifest:

    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. Maak de StatefulSet met behulp van de kubectl create opdracht:

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

Een statische PV maken met Azure Blob storage

De volgende secties bevatten instructies voor het maken van een statische PV met Azure Blob storage. Een statische PV is een permanent volume dat een beheerder handmatig maakt. Deze PV is beschikbaar voor gebruik van pods in het cluster. Als u een statische PV wilt gebruiken, maakt u een PVC dat verwijst naar de PV en maakt u vervolgens een pod die verwijst naar het PVC.

CSI-volumeparameters voor statische tv's met Azure Blob Storage

De volgende tabel bevat parameters die u kunt gebruiken in de CSI-volumebron voor een statische HW met Azure Blob Storage:

Naam Meaning Beschikbare waarden Verplicht Standaardwaarde
volumeHandle Geef een waarde op die het stuurprogramma kan gebruiken om de opslagblobcontainer in het cluster uniek te identificeren. Een aanbevolen manier om een unieke waarde te produceren, is door de wereldwijd unieke opslagaccountnaam en containernaam te combineren: {account-name}_{container-name}.
Opmerking: De #/ tekens zijn gereserveerd voor intern gebruik en kunnen niet worden gebruikt in een volumehandle.
Ja
volumeAttributes.subscriptionID Geef de Azure abonnements-id op waar het opslagaccount zich bevindt. Azure-abonnements-id Nee. Indien niet leeg, volumeAttributes.resourceGroup moet worden opgegeven.
volumeAttributes.resourceGroup Geef de naam van de Azure-resourcegroep op. myResourceGroup Nee. Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige cluster.
volumeAttributes.storageAccount Geef een bestaande azure-opslagaccountnaam op. storageAccountName Ja
volumeAttributes.containerName Geef de bestaande containernaam op. container Ja
volumeAttributes.protocol Geef blobFuse, BlobFuse2 of NFS v3-koppeling op. fuse, , fuse2nfs Nee. fuse
volumeAttributes.server Geef het serveradres van het Azure-opslagaccount op. Bestaand serveradres, bijvoorbeeld <storage-account>.blob.core.windows.net Nee. Gebruikt het standaardserveradres voor de huidige cloudomgeving.
volumeAttributes.storageEndpointSuffix Geef het achtervoegsel Azure opslageindpunt op. core.windows.netof het achtervoegsel voor een andere Azure cloud Nee. Gebruikt het standaardachtervoegsel voor de huidige cloudomgeving.
--- De volgende parameters zijn alleen voor blobfuse --- --- ---
volumeAttributes.secretName Geheime naam waarin de naam en sleutel van het opslagaccount worden opgeslagen (alleen van toepassing op SMB). Nee.
volumeAttributes.secretNamespace Geef de naamruimte van het geheim op om de accountsleutel op te slaan. default Nee. PVC-naamruimte
volumeAttributes.getLatestAccountKey Haal de meest recente sleutel van het opslagaccount op op basis van de aanmaaktijd in plaats van de eerste sleutel te gebruiken. true, false Nee. false
nodeStageSecretRef.name Geef de naam op van het Kubernetes-geheim dat referenties bevat voor het faseren van het volume. Bestaande kubernetes-geheime naam. Het geheim moet een van de volgende sleutels bevatten: azurestorageaccountkey, azurestorageaccountsastoken, msisecretof azurestoragespnclientsecret. Nee.
nodeStageSecretRef.namespace Geef de naamruimte van het geheim op. Kubernetes-naamruimte Ja
--- De volgende parameters zijn alleen voor het NFS-protocol --- --- ---
volumeAttributes.mountPermissions Geef gekoppelde mapmachtigingen op. 0777 Nee.
volumeAttributes.fsGroupChangePolicy Geef op hoe het stuurprogramma het volumeeigendom wijzigt. Het stuurprogramma negeert securityContext.fsGroupChangePolicy in de podspecificatie. OnRootMismatch, , AlwaysNone Nee. OnRootMismatch
--- De volgende parameters zijn alleen voor functie: blobfuse
Verificatie van beheerde identiteit en service-principalnaam
--- --- ---
volumeAttributes.AzureStorageAuthType Geef het verificatietype op. Key,SAS,MSI,SPN Nee. Key
volumeAttributes.AzureStorageIdentityClientID Geef de Identity Client-ID op. Nee.
volumeAttributes.AzureStorageIdentityObjectID Geef de id van het identiteitsobject op. Deze parameter is afgeschaft. Nee.
volumeAttributes.AzureStorageIdentityResourceID Geef de ID van de identiteitsresource op. Nee.
volumeAttributes.MSIEndpoint Geef het MSI-eindpunt op. Nee.
volumeAttributes.AzureStorageSPNClientID Geef de SPN-client-id (Azure Service Principal Name) op. Nee.
volumeAttributes.AzureStorageSPNTenantID Geef de Azure SPN-tenant-id op. Nee.
volumeAttributes.AzureStorageAADEndpoint Geef het Microsoft Entra-eindpunt op. Nee.
--- De volgende parameters zijn alleen bedoeld voor identiteitsverificatie voor blobfuse-workloads --- --- ---
volumeAttributes.ClientID Geef de client-id op van de beheerde identiteit die wordt gebruikt voor verificatie van de workloadidentiteit. Client-ID van beheerde identiteit Nee.
volumeAttributes.mountWithWorkloadIdentityToken Koppel BlobFuse met een id-token voor workloads. Deze functionaliteit is momenteel beschikbaar als preview. Geef de waarde op als een tekenreeks. "true", "false" Nee. "false"
--- De volgende parameters zijn alleen bedoeld voor de functie: blobfuse leesaccountsleutel of SAS-token uit de sleutelkluis --- --- ---
volumeAttributes.keyVaultURL Geef de DNS-naam van Azure Key Vault op. {vault-name}.vault.azure.net Nee.
volumeAttributes.keyVaultSecretName Geef de geheime naam van Azure Key Vault op. De naam van het bestaande Azure Key Vault-geheim. Nee.
volumeAttributes.keyVaultSecretVersion Geheime versie van Azure Key Vault. Bestaande versie Nee. Als de parameter leeg is, gebruikt de driver de huidige versie.

Een Blob Storage-container maken

Wanneer u een Azure Blob Storage-resource maakt voor gebruik met AKS, kunt u de resource maken in de knooppuntresourcegroep. Met deze methode kan het AKS-cluster toegang krijgen tot de blobopslagresource en deze beheren.

  1. Haal de naam van de knooppuntresourcegroep van uw AKS-cluster 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. Als u het opslagaccount in de knooppuntresourcegroep maakt, gebruikt u de naam van de knooppuntresourcegroep die in de vorige stap is geretourneerd (bijvoorbeeld MC_myResourceGroup_myAKSCluster_eastus). Volg vervolgens de stappen in Blob Storage beheren om toegang te verlenen en een container in dat opslagaccount te maken.

Volume koppelen

In deze sectie koppelt u het permanente volume met behulp van het NFS-protocol of Blobfuse.

Voor het opslagaccount moeten NFS v3 en hiërarchische naamruimte zijn ingeschakeld. Het koppelen van Blob Storage met behulp van het NFS v3-protocol wordt niet geverifieerd met behulp van een accountsleutel. Het subnet van het AKS-knooppunt moet netwerktoegang hebben tot het opslagaccount met NFS-functionaliteit via een geselecteerd virtueel netwerk of privé-eindpunt. Zorg ervoor dat netwerkbeveiligingsgroepen NFS-verkeer toestaan op poort 111 en 2048. Zie Koppelen Blob Storage met behulp van het NFS 3.0-protocol (Network File System) 3.0 voor meer informatie over het instellen van NFS-toegang tot uw opslagaccount.

In het volgende voorbeeld ziet u hoe u een Blob Storage-container koppelt als een permanent volume met behulp van het NFS-protocol.

  1. Maak een bestand met de naam pv-blob-nfs.yaml en plak de volgende YAML. Onder spec.csi.volumeAttributes, werk resourceGroup, storageAccount, en containerName bij.

    Opmerking

    volumeHandle de waarde moet een unieke volume-id zijn voor elke identieke opslagblobcontainer in het cluster. Het teken # en / zijn gereserveerd voor intern gebruik en kunnen niet worden gebruikt.

    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
    

    Opmerking

    Hoewel het kubernetesAPI-capaciteitskenmerk verplicht is, gebruikt het CSI-stuurprogramma voor Azure Blob Storage deze waarde niet, omdat u flexibel gegevens kunt schrijven totdat u de capaciteitslimiet van uw opslagaccount hebt bereikt. De waarde wordt alleen gebruikt voor het aanpassen van de grootte tussen pc's en PVC's. In het voorbeeld wordt een fictieve waarde gebruikt van 1Pi; deze waarde stelt de capaciteit van de Blob Storage-container niet in.

  2. Maak de PV met de kubectl create commando:

    kubectl create -f pv-blob-nfs.yaml
    
  3. Maak een bestand met de naam pvc-blob-nfs.yaml en plak deze in de volgende YAML. Werk onder volumeName de waarde bij zodat deze overeenkomt met de naam van de PV die in de vorige stap is gemaakt.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Maak het PVC met behulp van de kubectl create opdracht:

    kubectl create -f pvc-blob-nfs.yaml
    

Het permanente volume gebruiken

Met de volgende YAML maakt u een pod die gebruikmaakt van de PV of PVC met de naam pvc-blob die u eerder hebt gemaakt om de Azure Blob-opslag aan het /mnt/blob pad te koppelen.

  1. Maak een bestand met de naam nginx-pod-blob.yaml en plak het volgende YAML-manifest. Zorg ervoor dat de claimName pvc die eerder is gemaakt (pvc-blob) overeenkomt.

    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. Maak de pod en koppel het PVC met behulp van de kubectl create opdracht:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Maak een interactieve shellsessie met de pod om te controleren of de Blob-opslag correct is gekoppeld met behulp van de volgende kubectl exec opdracht:

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

    Uw uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer, waarin wordt weergegeven dat de Blob-opslag is gekoppeld aan het /mnt/blob pad:

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