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 du vill skapa ett ADLS-konto med drivrutinen i dynamisk etablering anger du
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
- Som standard finns blobfuse-cachen
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_GRS Standard_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 0 instä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 .
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
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".
Skapa en fil med namnet
blob-nfs-pv
och 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
Skapa podden med kommandot kubectl apply :
kubectl apply -f blob-nfs-pv.yaml
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
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 .
Skapa en fil med namnet
blob-nfs-sc.yaml
och 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
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 .
Skapa en fil med namnet
blobfuse-sc.yaml
och 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.
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 , , MSI SPN |
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.
Skapa en fil med namnet
pv-blob-nfs.yaml
och kopiera i följande YAML. UnderstorageClass
, uppdateraresourceGroup
,storageAccount
ochcontainerName
.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.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
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
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.
Skapa en fil med namnet
nginx-pod-blob.yaml
och 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
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
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
- Information om hur du använder CSI-drivrutin för Azure Blob Storage finns i Använda Azure Blob Storage med CSI-drivrutin.
- För tillhörande metodtips, se Metodtips för lagring och säkerhetskopior i AKS.
Azure Kubernetes Service