Dela via


Skapa och använda en volym med Azure Blob Storage i Azure Kubernetes Service (AKS)

Containerbaserade program behöver ofta komma åt och spara data i en extern datavolym. Om flera poddar behöver samtidig åtkomst till samma lagringsvolym kan du använda Azure Blob Storage för att ansluta med hjälp av blobfuse eller NFS (Network File System ).

Den här artikeln visar hur du gör följande:

  • Arbeta med en dynamisk beständig volym (PV) genom att installera CSI-drivrutinen (Container Storage Interface) och dynamiskt skapa en Azure Blob Storage-container som ska anslutas till en podd.
  • Arbeta med en statisk PV genom att skapa en Azure Blob Storage-container eller använda en befintlig och koppla den till en podd.

Mer information om Kubernetes-volymer finns i Lagringsalternativ för program i AKS.

Innan du börjar

  • Aktivera CSI-drivrutinen för Blob Storage i ditt AKS-kluster.

  • Om du vill ha stöd för ett Azure DataLake Gen2-lagringskonto när du använder blobfuse-monteringen måste du göra följande:

    • Om du vill skapa ett ADLS-konto med drivrutinen i dynamisk etablering anger du isHnsEnabled: "true" i parametrarna för lagringsklassen.
    • Om du vill aktivera blobfuse-åtkomst till ett ADLS-konto i statisk etablering anger du monteringsalternativet --use-adls=true på den beständiga volymen.
    • Om du ska aktivera ett lagringskonto med hierarkiskt namnområde bör befintliga beständiga volymer monteras på nytt med --use-adls=true monteringsalternativet.
  • Om blobfuse cache

    • Som standard finns blobfuse-cachen /mnt i katalogen. Om den virtuella datorns SKU tillhandahåller en tillfällig disk /mnt monteras katalogen på den tillfälliga disken. Men om den virtuella dator-SKU:n inte tillhandahåller en tillfällig disk monteras /mnt katalogen på OS-disken. Du kan ange --tmp-path= monteringsalternativet för att ange en annan cachekatalog

Etablera en volym dynamiskt

Det här avsnittet innehåller vägledning för klusteradministratörer som vill etablera en eller flera beständiga volymer som innehåller information om Blob Storage för användning av en arbetsbelastning. Ett beständiga volymanspråk (PVC) använder lagringsklassobjektet för att dynamiskt etablera en Azure Blob Storage-container.

Lagringsklassparametrar för dynamiska beständiga volymer

Följande tabell innehåller parametrar som du kan använda för att definiera en anpassad lagringsklass för ditt beständiga volymanspråk.

Name Beskrivning Exempel Obligatorisk Default value
skuName Ange en Azure Storage-kontotyp (alias: storageAccountType). Standard_LRS, Premium_LRS, , Standard_GRSStandard_RAGRS Nej Standard_LRS
plats Ange en Azure-plats. eastus Nej Om den är tom använder drivrutinen samma platsnamn som det aktuella klustret.
resourceGroup Ange ett Namn på Azure-resursgrupp. myResourceGroup Nej Om den är tom använder drivrutinen samma resursgruppsnamn som det aktuella klustret.
storageAccount Ange ett Azure Storage-kontonamn. storageAccountName -Nej När ett specifikt lagringskontonamn inte anges letar drivrutinen efter ett lämpligt lagringskonto som matchar kontoinställningarna i samma resursgrupp. Om det inte går att hitta ett matchande lagringskonto skapas ett nytt. Men om ett lagringskontonamn anges måste lagringskontot redan finnas.
networkEndpointType Ange nätverksslutpunktstyp för lagringskontot som skapats av drivrutinen. Om privateEndpoint anges skapas en privat slutpunkt för lagringskontot. I andra fall skapas en tjänstslutpunkt för NFS-protokollet.1 privateEndpoint Nej För ett AKS-kluster lägger du till AKS-klusternamnet i rollen Deltagare i resursgruppen som är värd för det virtuella nätverket.
protokoll Ange blobfuse-montering eller NFSv3-montering. fuse, nfs Nej fuse
containerName Ange det befintliga containernamnet (katalogen). container Nej Om den är tom skapar drivrutinen ett nytt containernamn, från och med pvc-fuse för blobfuse eller pvc-nfs för NFS v3.
containerNamePrefix Ange Azure Storage-katalogprefix som skapats av drivrutinen. min Får endast innehålla gemener, siffror, bindestreck och längd ska vara färre än 21 tecken. Nej
server Ange domännamnet för Azure Storage-kontot. Befintligt DNS-domännamn för lagringskontot, till exempel <storage-account>.privatelink.blob.core.windows.net. Nej Om det är tomt använder drivrutinen standard <storage-account>.blob.core.windows.net - eller annat DNS-domännamn för det nationella molnlagringskontot.
allowBlobPublicAccess Tillåt eller tillåt inte offentlig åtkomst till alla blobar eller containrar för lagringskonto som skapats av drivrutinen. true,false Nej false
storageEndpointSuffix Ange Azure Storage-slutpunktssuffix. core.windows.net Nej Om den är tom använder drivrutinen standardsuffixet för lagringsslutpunkter enligt molnmiljön.
taggar Taggar skapas i ett nytt lagringskonto. Taggformat: 'foo=aaa,bar=bbb' Nej ""
matchTags Matcha taggar när drivrutinen försöker hitta ett lämpligt lagringskonto. true,false Nej false
--- Följande parametrar är endast för blobfuse --- --- ---
subscriptionID Ange azure-prenumerations-ID där bloblagringskatalogen ska skapas. Azure-prenumerations-ID Nej Om den inte är tom resourceGroup måste den anges.
storeAccountKey Ange lagringskontonyckel till Kubernetes-hemlighet.

Not:
false innebär att drivrutinen använder kubelet-identitet för att hämta kontonyckeln.
true,false Nej true
secretName Ange hemligt namn för att lagra kontonyckeln. Nej
secretNamespace Ange namnområdet för hemligheten för att lagra kontonyckeln. default,kube-system osv. Nej pvc-namnrymd
isHnsEnabled Aktivera Hierarchical namespace för Azure Data Lake-lagringskonto. true,false Nej false
--- Följande parametrar gäller endast för NFS-protokoll --- --- ---
mountPermissions Ange behörigheter för monterade mappar. Standardvärdet är 0777. Om värdet är 0inställt på utförs chmod inte drivrutinen efter monteringen. 0777 Nej

1 Om lagringskontot skapas av drivrutinen behöver du bara ange networkEndpointType: privateEndpoint parametern i lagringsklassen. CSI-drivrutinen skapar den privata slutpunkten tillsammans med kontot. Om du tar med ditt eget lagringskonto måste du skapa den privata slutpunkten för lagringskontot.

Skapa ett beständigt volymanspråk med inbyggd lagringsklass

Ett beständiga volymanspråk (PVC) använder lagringsklassobjektet för att dynamiskt etablera en Azure Blob Storage-container. Följande YAML kan användas för att skapa ett beständigt volymanspråk på 5 GB i storlek med ReadWriteMany-åtkomst med hjälp av den inbyggda lagringsklassen. Mer information om åtkomstlägen finns i dokumentationen om kubernetes-beständiga volymer .

  1. Skapa en fil med namnet blob-nfs-pvc.yaml och kopiera i följande YAML.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Skapa det beständiga volymanspråket med kommandot kubectl create :

    kubectl create -f blob-nfs-pvc.yaml
    

När den är klar skapas Blob Storage-containern. Du kan använda kommandot kubectl get för att visa status för PVC:

kubectl get pvc azure-blob-storage

Kommandots utdata liknar följande exempel:

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

Använda det beständiga volymanspråket

Följande YAML skapar en podd som använder det beständiga volymanspråket azure-blob-storage för att montera Azure Blob Storage på sökvägen "/mnt/blob".

  1. Skapa en fil med namnet blob-nfs-pvoch kopiera i följande YAML. Kontrollera att claimName matchar DEN PVC som skapades i föregående steg.

    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. Skapa podden med kommandot kubectl apply :

    kubectl apply -f blob-nfs-pv.yaml
    
  3. När podden är i körningstillståndet kör du följande kommando för att skapa en ny fil med namnet test.txt.

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Kontrollera att disken är korrekt monterad genom att köra följande kommando och kontrollera att filen visas test.txt i utdata:

    kubectl exec mypod -- ls /mnt/blob
    

    Kommandots utdata liknar följande exempel:

    test.txt
    

Skapa en anpassad lagringsklass

Standardlagringsklasserna passar de vanligaste scenarierna, men inte alla. I vissa fall kanske du vill att din egen lagringsklass ska anpassas med dina egna parametrar. I det här avsnittet ger vi två exempel. Den första använder NFS-protokollet och det andra använder blobfuse.

Lagringsklass med NFS-protokoll

I det här exemplet konfigurerar följande manifest montering av en Blob Storage-container med hjälp av NFS-protokollet. Använd den för att lägga till parametern taggar .

  1. Skapa en fil med namnet blob-nfs-sc.yamloch klistra in följande exempelmanifest:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azureblob-nfs-premium
    provisioner: blob.csi.azure.com
    parameters:
      protocol: nfs
      tags: environment=Development
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - nconnect=4
    
  2. Skapa lagringsklassen med kommandot kubectl apply :

    kubectl apply -f blob-nfs-sc.yaml
    

    Kommandots utdata liknar följande exempel:

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

Lagringsklass med blobfuse

I det här exemplet konfigurerar följande manifest med blobfuse och monterar en Blob Storage-container. Använd den för att uppdatera parametern skuName .

  1. Skapa en fil med namnet blobfuse-sc.yamloch klistra in följande exempelmanifest:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azureblob-fuse-premium
    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. Skapa lagringsklassen med kommandot kubectl apply :

    kubectl apply -f blobfuse-sc.yaml
    

    Kommandots utdata liknar följande exempel:

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

Statiskt etablera en volym

Det här avsnittet innehåller vägledning för klusteradministratörer som vill skapa en eller flera beständiga volymer som innehåller information om Blob Storage för användning av en arbetsbelastning.

Statiska etableringsparametrar för beständiga volymer

Följande tabell innehåller parametrar som du kan använda för att definiera en beständig volym.

Name Beskrivning Exempel Obligatorisk Default value
volumeHandle Ange ett värde som drivrutinen kan använda för att unikt identifiera lagringsblobcontainern i klustret. Ett rekommenderat sätt att skapa ett unikt värde är att kombinera det globalt unika lagringskontonamnet och containernamnet: {account-name}_{container-name}.
Obs! Tecknet #, / är reserverat för intern användning och kan inte användas i ett volymhandtag.
Ja
volumeAttributes.resourceGroup Ange Namnet på Azure-resursgruppen. myResourceGroup Nej Om den är tom använder drivrutinen samma resursgruppsnamn som det aktuella klustret.
volumeAttributes.storageAccount Ange ett befintligt Azure Storage-kontonamn. storageAccountName Ja
volumeAttributes.containerName Ange befintligt containernamn. container Ja
volumeAttributes.protocol Ange blobfuse-montering eller NFS v3-montering. fuse, nfs Nej fuse
--- Följande parametrar är endast för blobfuse --- --- ---
volumeAttributes.secretName Hemligt namn som lagrar lagringskontots namn och nyckel (gäller endast för SMB). Nej
volumeAttributes.secretNamespace Ange namnområdet för hemligheten för att lagra kontonyckeln. default Nej Pvc-namnområde
nodeStageSecretRef.name Ange ett hemligt namn som lagrar något av följande:
azurestorageaccountkey
azurestorageaccountsastoken
msisecret
azurestoragespnclientsecret.
Nej Befintligt Namn på Kubernetes-hemlighet
nodeStageSecretRef.namespace Ange hemlighetens namnområde. Kubernetes-namnområde Ja
--- Följande parametrar gäller endast för NFS-protokoll --- --- ---
volumeAttributes.mountPermissions Ange behörigheter för monterade mappar. 0777 Nej
--- Följande parametrar gäller endast för NFS VNet-inställning --- --- ---
vnetResourceGroup Ange en VNet-resursgrupp som är värd för det virtuella nätverket. myResourceGroup Nej Om det är tomt använder drivrutinen det vnetResourceGroup värde som anges i Azure-molnkonfigurationsfilen.
vnetName Ange namnet på det virtuella nätverket. aksVNet Nej Om det är tomt använder drivrutinen det vnetName värde som anges i Azure-molnkonfigurationsfilen.
subnetName Ange agentnodens befintliga undernätsnamn. aksSubnet Nej Om den är tom använder subnetName drivrutinen värdet i Azure Cloud-konfigurationsfilen.
--- Följande parametrar är endast för funktionen: blobfuse
Autentisering av hanterad identitet och tjänstens huvudnamn
--- --- ---
volumeAttributes.AzureStorageAuthType Ange autentiseringstyp. Key, SAS, , MSISPN Nej Key
volumeAttributes.AzureStorageIdentityClientID Ange identitetens klient-ID. Nej
volumeAttributes.AzureStorageIdentityResourceID Ange identitetens resurs-ID. Nej
volumeAttributes.MSIEndpoint Ange MSI-slutpunkten. Nej
volumeAttributes.AzureStorageSPNClientID Ange KLIENT-ID för Azure-tjänstens huvudnamn (SPN). Nej
volumeAttributes.AzureStorageSPNTenantID Ange Klient-ID för Azure SPN. Nej
volumeAttributes.AzureStorageAADEndpoint Ange Microsoft Entra-slutpunkten. Nej
--- Följande parametrar gäller endast för funktionen: blobfuse läskontonyckel eller SAS-token från nyckelvalvet --- --- ---
volumeAttributes.keyVaultURL Ange DNS-namn för Azure Key Vault. {vault-name}.vault.azure.net Nej
volumeAttributes.keyVaultSecretName Ange hemligt namn för Azure Key Vault. Befintligt hemligt namn för Azure Key Vault. Nej
volumeAttributes.keyVaultSecretVersion Hemlig version av Azure Key Vault. Befintlig version Nej Om den är tom använder drivrutinen den aktuella versionen.

Skapa en Blob Storage-container

När du skapar en Azure Blob Storage-resurs för användning med AKS kan du skapa resursen i nodresursgruppen. Med den här metoden kan AKS-klustret komma åt och hantera bloblagringsresursen.

I den här artikeln skapar du containern i nodresursgruppen. Hämta först resursgruppens namn med kommandot az aks show och lägg till frågeparametern --query nodeResourceGroup . I följande exempel hämtas nodresursgruppen för AKS-klustret med namnet myAKSCluster i resursgruppen med namnet myResourceGroup:

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

Kommandots utdata liknar följande exempel:

MC_myResourceGroup_myAKSCluster_eastus

Skapa sedan en container för lagring av blobar genom att följa stegen i Hantera bloblagring för att auktorisera åtkomst och sedan skapa containern.

Monteringsvolym

I det här avsnittet monterar du den beständiga volymen med hjälp av NFS-protokollet eller Blobfuse.

Att montera Blob Storage med hjälp av NFS v3-protokollet autentiseras inte med hjälp av en kontonyckel. AKS-klustret måste finnas i samma eller peer-kopplade virtuella nätverk som agentnoden. Det enda sättet att skydda data i ditt lagringskonto är att använda ett virtuellt nätverk och andra nätverkssäkerhetsinställningar. Mer information om hur du konfigurerar NFS-åtkomst till ditt lagringskonto finns i Mount Blob Storage by using the Network File System (NFS) 3.0 protocol (NFS) 3.0-protokollet.

I följande exempel visas hur du monterar en Blob Storage-container som en beständig volym med hjälp av NFS-protokollet.

  1. Skapa en fil med namnet pv-blob-nfs.yaml och kopiera i följande YAML. Under storageClass, uppdatera resourceGroup, storageAccountoch containerName.

    Kommentar

    volumeHandle värdet ska vara ett unikt volumeID för varje identisk lagringsblobcontainer i klustret. Tecknet # och / är reserverade för internt bruk och kan inte användas.

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

    Kommentar

    Även om Kapacitetsattributet för Kubernetes API är obligatoriskt används inte det här värdet av CSI-drivrutinen för Azure Blob Storage eftersom du flexibelt kan skriva data förrän du når lagringskontots kapacitetsgräns. Värdet för capacity attributet används endast för storleksmatchning mellan PersistentVolumes och PersistentVolumeClaims. Vi rekommenderar att du använder ett fiktivt högt värde. Podden ser en monterad volym med en fiktiv storlek på 5 Petabyte.

  2. Kör följande kommando för att skapa den beständiga volymen med kommandot kubectl create som refererar till YAML-filen som skapades tidigare:

    kubectl create -f pv-blob-nfs.yaml
    
  3. Skapa en pvc-blob-nfs.yaml fil med en PersistentVolumeClaim. Till exempel:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Kör följande kommando för att skapa det beständiga volymanspråket med kommandot kubectl create som refererar till YAML-filen som skapades tidigare:

    kubectl create -f pvc-blob-nfs.yaml
    

Använd den beständiga volymen

Följande YAML skapar en podd som använder det beständiga volym- eller beständiga volymanspråket pvc-blob som skapades tidigare för att montera Azure Blob Storage på /mnt/blob sökvägen.

  1. Skapa en fil med namnet nginx-pod-blob.yamloch kopiera i följande YAML. Kontrollera att claimName matchar DEN PVC som skapades i föregående steg när du skapar en beständig volym för NFS eller Blobfuse.

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-blob
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
          name: nginx-blob
          volumeMounts:
            - name: blob01
              mountPath: "/mnt/blob"
              readOnly: false
      volumes:
        - name: blob01
          persistentVolumeClaim:
            claimName: pvc-blob
    
  2. Kör följande kommando för att skapa podden och montera PVC med kommandot kubectl create som refererar till YAML-filen som skapades tidigare:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Kör följande kommando för att skapa en interaktiv gränssnittssession med podden för att verifiera att Blob Storage är monterat:

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

    Utdata från kommandot liknar följande exempel:

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

Nästa steg