Vytvoření a použití svazku se službou Azure Blob Storage ve službě Azure Kubernetes Service (AKS)
Kontejnerové aplikace často potřebují přistupovat k datům a uchovávat je v externím objemu dat. Pokud více podů potřebuje souběžný přístup ke stejnému svazku úložiště, můžete se pomocí služby Azure Blob Storage připojit pomocí blobfuse nebo systému souborů NFS (Network File System ).
V tomto článku se dozvíte, jak:
- Pracujte s dynamickým trvalým svazkem (PV) instalací ovladače rozhraní služby Container Storage (CSI) a dynamickým vytvořením kontejneru úložiště objektů blob v Azure pro připojení k podu.
- S statickou pv můžete pracovat tak, že vytvoříte kontejner úložiště objektů blob v Azure nebo použijete existující kontejner a připojíte ho k podu.
Další informace o svazcích Kubernetes najdete v tématu Možnosti úložiště pro aplikace v AKS.
Než začnete
Povolte v clusteru AKS ovladač CSI služby Blob Storage.
Pokud chcete podporovat účet úložiště Azure DataLake Gen2 při použití připojení blobfuse, musíte udělat toto:
- Pokud chcete vytvořit účet ADLS pomocí ovladače při dynamickém zřizování, zadejte
isHnsEnabled: "true"
v parametrech třídy úložiště. - Pokud chcete povolit přístup blobfuse k účtu ADLS ve statickém zřizování, zadejte možnost
--use-adls=true
připojení v trvalém svazku. - Pokud povolíte účet úložiště s hierarchickým oborem názvů, stávající trvalé svazky by se měly znovu připojit s
--use-adls=true
možností připojení.
- Pokud chcete vytvořit účet ADLS pomocí ovladače při dynamickém zřizování, zadejte
Informace o mezipaměti blobfuse
- Ve výchozím nastavení se mezipaměť blobfuse nachází v
/mnt
adresáři. Pokud skladová položka virtuálního počítače poskytuje dočasný disk,/mnt
adresář se připojí na dočasný disk. Pokud ale skladová položka virtuálního počítače neposkytuje dočasný disk,/mnt
adresář se připojí k disku s operačním systémem, můžete nastavit--tmp-path=
možnost připojení pro zadání jiného adresáře mezipaměti.
- Ve výchozím nastavení se mezipaměť blobfuse nachází v
Dynamické zřizování svazku
Tato část obsahuje pokyny pro správce clusteru, kteří chtějí zřídit jeden nebo více trvalých svazků, které obsahují podrobnosti o úložišti objektů blob pro použití úlohou. Deklarace identity trvalého svazku (PVC) používá objekt třídy úložiště k dynamickému zřízení kontejneru úložiště objektů blob v Azure.
Parametry třídy úložiště pro dynamické trvalé svazky
Následující tabulka obsahuje parametry, které můžete použít k definování vlastní třídy úložiště pro vaši trvalou deklaraci identity svazku.
Název | Popis | Příklad | Povinný | Default value |
---|---|---|---|---|
skuName | Zadejte typ účtu úložiště Azure (alias: storageAccountType ). |
Standard_LRS , Premium_LRS , , Standard_GRS Standard_RAGRS |
No | Standard_LRS |
location | Zadejte umístění Azure. | eastus |
No | Pokud je ovladač prázdný, použije stejný název umístění jako aktuální cluster. |
resourceGroup | Zadejte název skupiny prostředků Azure. | myResourceGroup | No | Pokud je ovladač prázdný, použije stejný název skupiny prostředků jako aktuální cluster. |
storageAccount | Zadejte název účtu úložiště Azure. | storageAccountName | -Ne | Pokud není zadaný konkrétní název účtu úložiště, ovladač vyhledá vhodný účet úložiště, který odpovídá nastavení účtu ve stejné skupině prostředků. Pokud se nepodaří najít odpovídající účet úložiště, vytvoří nový účet. Pokud je však zadaný název účtu úložiště, účet úložiště už musí existovat. |
networkEndpointType | Zadejte typ koncového bodu sítě pro účet úložiště vytvořený ovladačem. Pokud je zadaný privátní koncový bod, vytvoří se pro účet úložiště privátní koncový bod . V jiných případech se vytvoří koncový bod služby pro protokol NFS.1 | privateEndpoint |
No | V případě clusteru AKS přidejte název clusteru AKS do role Přispěvatel ve skupině prostředků hostující virtuální síť. |
protokol | Zadejte připojení blobfuse nebo připojení NFSv3. | fuse , nfs |
No | fuse |
containerName | Zadejte název existujícího kontejneru (adresáře). | kontejner | No | Pokud je prázdný, ovladač vytvoří nový název kontejneru, počínaje objektem pvc-fuse blobfuse nebo pvc-nfs pro systém souborů NFS v3. |
containerNamePrefix | Zadejte předponu adresáře úložiště Azure vytvořenou ovladačem. | moje | Může obsahovat pouze malá písmena, číslice, pomlčky a délku musí být menší než 21 znaků. | No |
server | Zadejte název domény účtu úložiště Azure. | Název domény DNS existujícího účtu úložiště, například <storage-account>.privatelink.blob.core.windows.net . |
No | Pokud je prázdný, ovladač používá výchozí <storage-account>.blob.core.windows.net nebo jiný název domény DNS účtu úložiště suverénního cloudu. |
allowBlobPublicAccess | Povolí nebo zakáže veřejný přístup ke všem objektům blob nebo kontejnerům pro účet úložiště vytvořený ovladačem. | true ,false |
No | false |
storageEndpointSuffix | Zadejte příponu koncového bodu úložiště Azure. | core.windows.net |
No | Pokud je prázdný, ovladač použije výchozí příponu koncového bodu úložiště podle cloudového prostředí. |
značky | Značky by se vytvořily v novém účtu úložiště. | Formát značky: 'foo=aaa,bar=bbb' | No | "" |
matchTags | Porovná značky, když se ovladač pokusí najít vhodný účet úložiště. | true ,false |
No | false |
--- | Následující parametry jsou určené pouze pro objekt blobfuse. | --- | --- | --- |
subscriptionID | Zadejte ID předplatného Azure, ve kterém se vytvoří adresář úložiště objektů blob. | ID předplatného Azure | No | Pokud není prázdný, resourceGroup je nutné zadat. |
storeAccountKey | Zadejte klíč účtu úložiště do tajného kódu Kubernetes. Poznámka: false znamená, že ovladač používá k získání klíče účtu identitu kubeletu. |
true ,false |
No | true |
secretName | Zadejte název tajného kódu pro uložení klíče účtu. | No | ||
secretNamespace | Zadejte obor názvů tajného kódu pro uložení klíče účtu. | default atdkube-system . |
No | pvc – obor názvů |
isHnsEnabled | Povolení Hierarchical namespace pro účet Azure Data Lake Storage |
true ,false |
No | false |
--- | Následující parametry jsou určené pouze pro protokol NFS. | --- | --- | --- |
mountPermissions | Zadejte oprávnění připojené složky. | Výchozí hodnota je 0777 . Pokud je nastavená hodnota 0 , ovladač se po připojení neprovede chmod . |
0777 |
No |
1 Pokud je účet úložiště vytvořen ovladačem, stačí zadat networkEndpointType: privateEndpoint
parametr pouze ve třídě úložiště. Ovladač CSI vytvoří privátní koncový bod společně s účtem. Pokud používáte vlastní účet úložiště, musíte pro účet úložiště vytvořit privátní koncový bod .
Vytvoření deklarace trvalého svazku pomocí integrované třídy úložiště
Deklarace identity trvalého svazku (PVC) používá objekt třídy úložiště k dynamickému zřízení kontejneru úložiště objektů blob v Azure. Následující YAML lze použít k vytvoření trvalé deklarace identity svazku o velikosti 5 GB s přístupem ReadWriteMany pomocí integrované třídy úložiště. Další informace o režimech přístupu najdete v dokumentaci k trvalému svazku Kubernetes.
Vytvořte soubor s názvem
blob-nfs-pvc.yaml
a zkopírujte ho v následujícím jazyce YAML.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5Gi
Vytvořte trvalou deklaraci identity svazku pomocí příkazu kubectl create :
kubectl create -f blob-nfs-pvc.yaml
Po dokončení se vytvoří kontejner úložiště objektů blob. Pomocí příkazu kubectl get můžete zobrazit stav PVC:
kubectl get pvc azure-blob-storage
Výstup příkazu se podobá následujícímu příkladu:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
azure-blob-storage Bound pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68 5Gi RWX azureblob-nfs-premium 92m
Použití deklarace trvalého svazku
Následující YAML vytvoří pod, který používá trvalé deklarace identity svazku azure-blob-storage k připojení služby Azure Blob Storage v cestě /mnt/blob.
Vytvořte soubor s názvem
blob-nfs-pv
a zkopírujte ho do následujícího YAML. Ujistěte se, že název deklarace identity odpovídá PVC vytvořenému v předchozím kroku.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
Vytvořte pod pomocí příkazu kubectl apply :
kubectl apply -f blob-nfs-pv.yaml
Jakmile je pod ve spuštěném stavu, spuštěním následujícího příkazu vytvořte nový soubor s názvem
test.txt
.kubectl exec mypod -- touch /mnt/blob/test.txt
Pokud chcete ověřit, že je disk správně připojený, spusťte následující příkaz a ověřte, že se ve výstupu zobrazí
test.txt
soubor:kubectl exec mypod -- ls /mnt/blob
Výstup příkazu se podobá následujícímu příkladu:
test.txt
Vytvoření vlastní třídy úložiště
Výchozí třídy úložiště odpovídají nejběžnějším scénářům, ale ne všem. V některých případech můžete chtít mít vlastní třídu úložiště přizpůsobenou vlastními parametry. V této části uvádíme dva příklady. První používá protokol NFS a druhý používá blobfuse.
Třída úložiště s využitím protokolu NFS
V tomto příkladu následující manifest konfiguruje připojení kontejneru úložiště objektů blob pomocí protokolu NFS. Slouží k přidání parametru značek .
Vytvořte soubor s názvem
blob-nfs-sc.yaml
a vložte následující ukázkový manifest: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
Vytvořte třídu úložiště pomocí příkazu kubectl apply :
kubectl apply -f blob-nfs-sc.yaml
Výstup příkazu se podobá následujícímu příkladu:
storageclass.storage.k8s.io/blob-nfs-premium created
Třída úložiště s využitím blobfuse
V tomto příkladu následující manifest konfiguruje pomocí blobfuse a připojí kontejner úložiště objektů blob. Slouží k aktualizaci parametru skuName .
Vytvořte soubor s názvem
blobfuse-sc.yaml
a vložte následující ukázkový manifest: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.
Vytvořte třídu úložiště pomocí příkazu kubectl apply :
kubectl apply -f blobfuse-sc.yaml
Výstup příkazu se podobá následujícímu příkladu:
storageclass.storage.k8s.io/blob-fuse-premium created
Statické zřízení svazku
Tato část obsahuje pokyny pro správce clusteru, kteří chtějí vytvořit jeden nebo více trvalých svazků, které obsahují podrobnosti o úložišti objektů blob pro použití úlohou.
Statické parametry zřizování trvalých svazků
Následující tabulka obsahuje parametry, které můžete použít k definování trvalého svazku.
Název | Popis | Příklad | Povinný | Default value |
---|---|---|---|---|
volumeHandle | Zadejte hodnotu, kterou může ovladač použít k jedinečné identifikaci kontejneru objektů blob úložiště v clusteru. | Doporučeným způsobem, jak vytvořit jedinečnou hodnotu, je zkombinovat globálně jedinečný název účtu úložiště a název kontejneru: {account-name}_{container-name} .Poznámka: Znak # , / je vyhrazen pro interní použití a nelze jej použít v popisovači svazku. |
Ano | |
volumeAttributes.resourceGroup | Zadejte název skupiny prostředků Azure. | myResourceGroup | No | Pokud je prázdný, ovladač použije stejný název skupiny prostředků jako aktuální cluster. |
volumeAttributes.storageAccount | Zadejte název existujícího účtu úložiště Azure. | storageAccountName | Ano | |
volumeAttributes.containerName | Zadejte název existujícího kontejneru. | kontejner | Ano | |
volumeAttributes.protocol | Zadejte připojení blobfuse nebo připojení NFS v3. | fuse , nfs |
No | fuse |
--- | Následující parametry jsou určené pouze pro objekt blobfuse. | --- | --- | --- |
volumeAttributes.secretName | Název tajného kódu, který ukládá název a klíč účtu úložiště (platí jenom pro PROTOKOL SMB). | No | ||
volumeAttributes.secretNamespace | Zadejte obor názvů tajného kódu pro uložení klíče účtu. | default |
No | Obor názvů Pvc |
nodeStageSecretRef.name | Zadejte název tajného kódu, který ukládá jednu z následujících možností:azurestorageaccountkey azurestorageaccountsastoken msisecret azurestoragespnclientsecret . |
No | Existující název tajného kódu Kubernetes | |
nodeStageSecretRef.namespace | Zadejte obor názvů tajného klíče. | Obor názvů Kubernetes | Ano | |
--- | Následující parametry jsou určené pouze pro protokol NFS. | --- | --- | --- |
volumeAttributes.mountPermissions | Zadejte oprávnění připojené složky. | 0777 |
No | |
--- | Následující parametry jsou určené pouze pro nastavení virtuální sítě NFS. | --- | --- | --- |
vnetResourceGroup | Zadejte skupinu prostředků virtuální sítě hostující virtuální síť. | myResourceGroup | No | Pokud je prázdný, ovladač použije vnetResourceGroup hodnotu zadanou v konfiguračním souboru cloudu Azure. |
vnetName | Zadejte název virtuální sítě. | aksVNet | No | Pokud je prázdný, ovladač použije vnetName hodnotu zadanou v konfiguračním souboru cloudu Azure. |
subnetName | Zadejte název existující podsítě uzlu agenta. | aksSubnet | No | Pokud je prázdný, ovladač použije hodnotu v konfiguračním subnetName souboru cloudu Azure. |
--- | Následující parametry jsou určené pouze pro funkci: blobfuse Ověřování spravované identity a hlavního názvu služby |
--- | --- | --- |
volumeAttributes.AzureStorageAuthType | Zadejte typ ověřování. | Key , SAS , , MSI SPN |
No | Key |
volumeAttributes.AzureStorageIdentityClientID | Zadejte ID klienta identity. | No | ||
volumeAttributes.AzureStorageIdentityResourceID | Zadejte ID prostředku identity. | No | ||
volumeAttributes.MSIEndpoint | Zadejte koncový bod MSI. | No | ||
volumeAttributes.AzureStorageSPNClientID | Zadejte ID klienta hlavního názvu služby (SPN) Azure. | No | ||
volumeAttributes.AzureStorageSPNTenantID | Zadejte ID tenanta Azure SPN. | No | ||
volumeAttributes.AzureStorageAADEndpoint | Zadejte koncový bod Microsoft Entra. | No | ||
--- | Následující parametry jsou určené pouze pro funkci: blobfuse pro čtení klíče účtu nebo token SAS z trezoru klíčů | --- | --- | --- |
volumeAttributes.keyVaultURL | Zadejte název DNS služby Azure Key Vault. | {vault-name}.vault.azure.net | No | |
volumeAttributes.keyVaultSecretName | Zadejte název tajného kódu služby Azure Key Vault. | Existující název tajného kódu služby Azure Key Vault | No | |
volumeAttributes.keyVaultSecretVersion | Verze tajného kódu služby Azure Key Vault | Existující verze | No | Pokud je prázdný, ovladač používá aktuální verzi. |
Vytvoření kontejneru úložiště objektů blob
Když vytvoříte prostředek služby Azure Blob Storage pro použití s AKS, můžete prostředek vytvořit ve skupině prostředků uzlu. Tento přístup umožňuje clusteru AKS přístup k prostředku úložiště objektů blob a jeho správě.
Pro účely tohoto článku vytvořte kontejner ve skupině prostředků uzlu. Nejprve získejte název skupiny prostředků pomocí příkazu az aks show a přidejte --query nodeResourceGroup
parametr dotazu. Následující příklad získá skupinu prostředků uzlu pro cluster AKS s názvem myAKSCluster ve skupině prostředků myResourceGroup:
az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
Výstup příkazu se podobá následujícímu příkladu:
MC_myResourceGroup_myAKSCluster_eastus
Dále vytvořte kontejner pro ukládání objektů blob podle kroků v úložišti objektů blob pro autorizaci přístupu a vytvoření kontejneru.
Připojit svazek
V této části připojíte trvalý svazek pomocí protokolu NFS nebo blobfuse.
Připojení úložiště objektů blob pomocí protokolu NFS v3 se neověřuje pomocí klíče účtu. Cluster AKS se musí nacházet ve stejné virtuální síti nebo v partnerské virtuální síti jako uzel agenta. Jediným způsobem, jak zabezpečit data v účtu úložiště, je použití virtuální sítě a dalších nastavení zabezpečení sítě. Další informace o tom, jak nastavit přístup nfs k vašemu účtu úložiště, najdete v tématu Připojení služby Blob Storage pomocí protokolu NFS (Network File System) 3.0.
Následující příklad ukazuje, jak připojit kontejner blob storage jako trvalý svazek pomocí protokolu NFS.
Vytvořte soubor s názvem
pv-blob-nfs.yaml
a zkopírujte ho v následujícím jazyce YAML. V částistorageClass
, updateresourceGroup
,storageAccount
acontainerName
.Poznámka:
volumeHandle
hodnota by měla být jedinečné ID svazku pro každý identický kontejner objektů blob úložiště v clusteru.#
Znak a/
je vyhrazený pro interní použití a nelze ho použít.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
Poznámka:
I když je atribut kapacity rozhraní API Kubernetes povinný, ovladač CSI služby Azure Blob Storage tuto hodnotu nepoužívá, protože můžete flexibilně zapisovat data, dokud nedosáhnete limitu kapacity účtu úložiště. Hodnota atributu
capacity
se používá pouze pro porovnávání velikosti mezi PersistentVolumes a PersistentVolumeClaims. Doporučujeme použít fiktivní vysokou hodnotu. Pod uvidí připojený svazek s fiktivní velikostí 5 petabajtů.Spuštěním následujícího příkazu vytvořte trvalý svazek pomocí příkazu kubectl create odkazující na soubor YAML vytvořený dříve:
kubectl create -f pv-blob-nfs.yaml
Vytvořte
pvc-blob-nfs.yaml
soubor pomocí PersistentVolumeClaim. Příklad:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premium
Spuštěním následujícího příkazu vytvořte deklaraci trvalé deklarace identity svazku pomocí příkazu kubectl create odkazující na soubor YAML vytvořený dříve:
kubectl create -f pvc-blob-nfs.yaml
Použití trvalého svazku
Následující YAML vytvoří pod, který používá trvalý svazek nebo trvalou deklaraci identity svazku s názvem pvc-blob vytvořenou dříve, k připojení úložiště objektů blob v Azure k cestě /mnt/blob
.
Vytvořte soubor s názvem
nginx-pod-blob.yaml
a zkopírujte ho do následujícího YAML. Ujistěte se, že deklarace identityName odpovídá PVC vytvořenému v předchozím kroku při vytváření trvalého svazku pro systém souborů NFS nebo 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
Spuštěním následujícího příkazu vytvořte pod a připojte PVC pomocí příkazu kubectl create odkazující na soubor YAML vytvořený dříve:
kubectl create -f nginx-pod-blob.yaml
Spuštěním následujícího příkazu vytvořte interaktivní relaci prostředí s podem a ověřte připojení úložiště objektů blob:
kubectl exec -it nginx-blob -- df -h
Výstup příkazu vypadá podobně jako v následujícím příkladu:
Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...
Další kroky
- Informace o použití ovladače CSI pro úložiště objektů blob v Azure najdete v tématu Použití služby Azure Blob Storage s ovladačem CSI.
- Přidružené osvědčené postupy najdete v tématu Osvědčené postupy pro ukládání a zálohování v AKS.
Azure Kubernetes Service