Sdílet prostřednictvím


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í.
  • 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.

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_GRSStandard_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. defaultatdkube-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.

  1. 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
    
  2. 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.

  1. Vytvořte soubor s názvem blob-nfs-pva 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
    
  2. Vytvořte pod pomocí příkazu kubectl apply :

    kubectl apply -f blob-nfs-pv.yaml
    
  3. 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
    
  4. 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 .

  1. Vytvořte soubor s názvem blob-nfs-sc.yamla 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
    
  2. 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 .

  1. Vytvořte soubor s názvem blobfuse-sc.yamla 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.
    
  2. 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, , MSISPN 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.

  1. Vytvořte soubor s názvem pv-blob-nfs.yaml a zkopírujte ho v následujícím jazyce YAML. V části storageClass, update resourceGroup, storageAccounta containerName.

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

  2. 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
    
  3. 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
    
  4. 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 .

  1. Vytvořte soubor s názvem nginx-pod-blob.yamla 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
    
  2. 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
    
  3. 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