Använda Azure Container Storage med Azure-hanterade diskar

Azure Container Storage är en molnbaserad volymhanterings-, distributions- och orkestreringstjänst som skapats internt för containrar. Den här artikeln visar hur du konfigurerar Azure Container Storage att använda Azure-hanterade diskar som serverdelslagring för dina Kubernetes-arbetsbelastningar. I slutet har du en podd som använder Azure-hanterade diskar som lagringsplats.

Förutsättningar

  • Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

  • Den här artikeln kräver den senaste versionen (2.35.0 eller senare) av Azure CLI. Se Så här installerar du Azure CLI. Om du använder Bash-miljön i Azure Cloud Shell är den senaste versionen redan installerad. Om du planerar att köra kommandona lokalt i stället för i Azure Cloud Shell ska du köra dem med administratörsbehörighet. Mer information finns i Komma igång med Azure Cloud Shell.

  • Du behöver Kubernetes kommandoradsklient, kubectl. Det är redan installerat om du använder Azure Cloud Shell, eller om du kan installera det lokalt genom att az aks install-cli köra kommandot .

  • Om du inte redan har installerat Azure Container Storage följer du anvisningarna i Använda Azure Container Storage med Azure Kubernetes Service.

  • Kontrollera om målregionen stöds i Azure Container Storage-regioner.

  • Om du vill använda Azure Container Storage med Azure-hanterade diskar måste ditt AKS-kluster ha en nodpool på minst tre virtuella datorer för generell användning, till exempel standard_d4s_v5 för klusternoderna, var och en med minst fyra virtuella processorer (vCPU:er).

Skapa och koppla beständiga volymer

Följ de här stegen för att skapa och koppla en beständiga volym.

1. Skapa en lagringspool

Skapa först en lagringspool, som är en logisk gruppering av lagring för ditt Kubernetes-kluster, genom att definiera den i en YAML-manifestfil.

Du har följande alternativ för att skapa en lagringspool:

Om du har aktiverat Azure Container Storage med hjälp av az aks create eller az aks update kommandon kanske du redan har en lagringspool. Använd kubectl get sp -n acstor för att hämta listan över lagringspooler. Om du redan har en tillgänglig lagringspool som du vill använda kan du hoppa över det här steget och fortsätta till Visa tillgängliga lagringsklasser.

Skapa en dynamisk lagringspool

Följ de här stegen för att skapa en dynamisk lagringspool för Azure Disks.

  1. Använd din favorittextredigerare för att skapa en YAML-manifestfil, code acstor-storagepool.yamltill exempel .

  2. Klistra in följande kod. Värdet för lagringspoolens namn kan vara vad du vill. För skuName anger du prestanda- och redundansnivå. Godtagbara värden är Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS och StandardSSD_ZRS. För lagring anger du mängden lagringskapacitet för poolen i Gi eller Ti.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    

    Om du använder UltraSSD_LRS eller PremiumV2_LRS diskar kan du ange IOPS och dataflöde med hjälp av parametrarna IOPSReadWrite och MBpsReadWrite i definitionen för lagringspoolen.

    IOPSReadWrite avser antalet IOPS som tillåts för Ultra SSD- och Premium v2 LRS-diskar. Mer information finns i Ultra Disk IOPS och Premium SSD v2 IOPS.

    MBpsReadWrite refererar till den bandbredd som tillåts för Ultra SSD- och Premium v2 LRS-diskar. Mbit/s refererar till miljontals byte per sekund (MB/s = 10^6 byte per sekund). Mer information finns i Ultra Disk-dataflöde och Premium SSD v2-dataflöde.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: PremiumV2_LRS
          iopsReadWrite: 5000
          mbpsReadWrite: 200
      resources:
        requests:
          storage: 1Ti
    
  3. Spara YAML-manifestfilen och använd den sedan för att skapa lagringspoolen.

    kubectl apply -f acstor-storagepool.yaml 
    

    När lagringspoolen har skapats visas ett meddelande som:

    storagepool.containerstorage.azure.com/azuredisk created
    

    Du kan också köra det här kommandot för att kontrollera lagringspoolens status. Ersätt <storage-pool-name> med värdet för lagringspoolens namn . I det här exemplet skulle värdet vara azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

När lagringspoolen skapas skapar Azure Container Storage en lagringsklass åt dig med hjälp av namngivningskonventionen acstor-<storage-pool-name>. Nu kan du visa tillgängliga lagringsklasser och skapa ett beständiga volymanspråk.

Skapa en fördefinierad lagringspool

Om du har Azure-hanterade diskar som redan har etablerats kan du skapa en fördefinierad lagringspool med hjälp av dessa diskar. Eftersom diskarna redan har etablerats behöver du inte ange skuName- eller lagringskapaciteten när du skapar lagringspoolen.

Följ de här stegen för att skapa en fördefinierad lagringspool för Azure Disks.

  1. Logga in på Azure-portalen.

  2. För varje disk som du vill använda navigerar du till den hanterade Azure-disken och väljer Inställningar>Egenskaper. Kopiera hela strängen under Resurs-ID och placera den i en textfil.

  3. Använd din favorittextredigerare för att skapa en YAML-manifestfil, code acstor-storagepool.yamltill exempel .

  4. Klistra in följande kod. Värdet för lagringspoolens namn kan vara vad du vill. Ersätt <resource-id> med resurs-ID:t för varje hanterad disk. Spara filen.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. Använd YAML-manifestfilen för att skapa lagringspoolen.

    kubectl apply -f acstor-storagepool.yaml 
    

    När lagringspoolen har skapats visas ett meddelande som:

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

    Du kan också köra det här kommandot för att kontrollera lagringspoolens status. Ersätt <storage-pool-name> med värdet för lagringspoolens namn . I det här exemplet skulle värdet vara sp-preprovisioned.

    kubectl describe sp <storage-pool-name> -n acstor
    

När lagringspoolen skapas skapar Azure Container Storage en lagringsklass åt dig med hjälp av namngivningskonventionen acstor-<storage-pool-name>. Nu kan du visa tillgängliga lagringsklasser och skapa ett beständiga volymanspråk.

Skapa en dynamisk lagringspool med din egen krypteringsnyckel (valfritt)

Alla data i ett Azure Storage-konto krypteras i vila. Som standard krypteras data med Microsoft-hanterade nycklar. Om du vill ha mer kontroll över krypteringsnycklar kan du ange kundhanterade nycklar (CMK) när du skapar lagringspoolen för att kryptera de beständiga volymer som du skapar.

Om du vill använda din egen nyckel för kryptering på serversidan måste du ha ett Azure Key Vault med en nyckel. Key Vault ska ha rensningsskydd aktiverat och måste använda Azure RBAC-behörighetsmodellen. Läs mer om kundhanterade nycklar i Linux.

När du skapar lagringspoolen måste du definiera CMK-parametrarna. De obligatoriska CMK-krypteringsparametrarna är:

  • keyVersion anger vilken version av nyckeln som ska användas
  • keyName är namnet på din nyckel
  • keyVaultUri är den enhetliga resursidentifieraren för Azure Key Vault, till exempel https://user.vault.azure.net
  • Identitet anger en hanterad identitet med åtkomst till valvet, till exempel/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

Följ de här stegen för att skapa en lagringspool med din egen krypteringsnyckel. Alla beständiga volymer som skapas från den här lagringspoolen krypteras med samma nyckel.

  1. Använd din favorittextredigerare för att skapa en YAML-manifestfil, code acstor-storagepool-cmk.yamltill exempel .

  2. Klistra in följande kod, ange de obligatoriska parametrarna och spara filen. Värdet för lagringspoolens namn kan vara vad du vill. För skuName anger du prestanda- och redundansnivå. Godtagbara värden är Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS och StandardSSD_ZRS. För lagring anger du mängden lagringskapacitet för poolen i Gi eller Ti. Se till att ange CMK-krypteringsparametrarna.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. Använd YAML-manifestfilen för att skapa lagringspoolen.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

    När lagringspoolen har skapats visas ett meddelande som:

    storagepool.containerstorage.azure.com/azuredisk created
    

    Du kan också köra det här kommandot för att kontrollera lagringspoolens status. Ersätt <storage-pool-name> med värdet för lagringspoolens namn . I det här exemplet skulle värdet vara azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

När lagringspoolen skapas skapar Azure Container Storage en lagringsklass åt dig med hjälp av namngivningskonventionen acstor-<storage-pool-name>.

2. Visa tillgängliga lagringsklasser

När lagringspoolen är redo att användas måste du välja en lagringsklass för att definiera hur lagring skapas dynamiskt när du skapar beständiga volymanspråk och distribuerar beständiga volymer.

Kör kubectl get sc för att visa tillgängliga lagringsklasser. Du bör se en lagringsklass med namnet acstor-<storage-pool-name>.

Viktigt!

Använd inte lagringsklassen som är markerad som intern. Det är en intern lagringsklass som behövs för att Azure Container Storage ska fungera.

3. Skapa ett beständiga volymanspråk

Ett beständiga volymanspråk (PVC) används för att automatiskt etablera lagring baserat på en lagringsklass. Följ dessa steg för att skapa en PVC med hjälp av den nya lagringsklassen.

  1. Använd din favorittextredigerare för att skapa en YAML-manifestfil, code acstor-pvc.yamltill exempel .

  2. Klistra in följande kod och spara filen. PVC-värdet name kan vara vad du vill.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. Använd YAML-manifestfilen för att skapa PVC.

    kubectl apply -f acstor-pvc.yaml
    

    Du bör se utdata som liknar följande:

    persistentvolumeclaim/azurediskpvc created
    

    Du kan kontrollera status för PVC genom att köra följande kommando:

    kubectl describe pvc azurediskpvc
    

När PVC:en har skapats är den redo att användas av en podd.

4. Distribuera en podd och bifoga en beständiga volym

Skapa en podd med Fio (flexibel I/O-testare) för benchmarking och arbetsbelastningssimulering och ange en monteringssökväg för den beständiga volymen. För claimName använder du det namnvärde som du använde när du skapade det beständiga volymanspråket.

  1. Använd din favorittextredigerare för att skapa en YAML-manifestfil, code acstor-pod.yamltill exempel .

  2. Klistra in följande kod och spara filen.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. Använd YAML-manifestfilen för att distribuera podden.

    kubectl apply -f acstor-pod.yaml
    

    Du bör se utdata som liknar följande:

    pod/fiopod created
    
  4. Kontrollera att podden körs och att det beständiga volymanspråket har bundits till podden:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. Kontrollera fio-testningen för att se dess aktuella status:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Nu har du distribuerat en podd som använder Azure Disks som lagringsplats, och du kan använda den för dina Kubernetes-arbetsbelastningar.

Hantera beständiga volymer och lagringspooler

Nu när du har skapat en beständig volym kan du koppla från och koppla från den igen efter behov. Du kan också expandera eller ta bort en lagringspool.

Koppla från och koppla från en beständig volym igen

Om du vill koppla från en beständiga volym tar du bort podden som den beständiga volymen är kopplad till. Ersätt <pod-name> med poddens namn, till exempel fiopod.

kubectl delete pods <pod-name>

Om du vill återansluta en beständig volym refererar du helt enkelt till namnet på beständiga volymanspråk i YAML-manifestfilen enligt beskrivningen i Distribuera en podd och bifoga en beständiga volym.

Om du vill kontrollera vilken beständig volym som ett beständiga volymanspråk är bundet till kör du kubectl get pvc <persistent-volume-claim-name>.

Expandera en lagringspool

Du kan expandera lagringspooler som backas upp av Azure Disks för att skala upp snabbt och utan driftstopp. Krympande lagringspooler stöds inte för närvarande. Expansion av lagringspooler stöds inte för Ultra Disks eller Premium SSD v2.

Kommentar

Om du expanderar en lagringspool kan du öka kostnaderna för Azure Container Storage och Azure Disks. Se prissättningssidan för Azure Container Storage och Förstå azure containerlagringsfakturering.

För närvarande har expansionen av lagringspoolen följande begränsning när du använder Premium_LRS, Standard_LRS, StandardSSD_LRS, Premium_ZRSoch StandardSSD_ZRS SKU:er:

  • Om din befintliga lagringspool är mindre än 4 TiB (4 096 GiB) kan du bara expandera den till 4 095 GiB. Undvik fel genom att inte försöka expandera den aktuella lagringspoolen utöver 4 095 GiB om den ursprungligen är mindre än 4 TiB (4 096 GiB). Lagringspooler > 4 TiB kan utökas upp till den maximala tillgängliga lagringskapaciteten.

Följ de här anvisningarna för att expandera en befintlig lagringspool för Azure Disks.

  1. Med hjälp av en textredigerare öppnar du YAML-manifestfilen som du använde för att skapa lagringspoolen, till exempel code acstor-storagepool.yaml.

  2. Ersätt den angivna lagringsposten i YAML-manifestfilen med önskat värde. Det här värdet måste vara större än lagringspoolens aktuella kapacitet. Om specifikationen till exempel är inställd på storage: 1Tiändrar du den till storage: 2Ti. Om du har skapat en fördefinierad lagringspool kommer det inte att finnas någon lagringspost eftersom lagringspoolen ärvde kapacitetsstorleken från de företablerade Azure Disks. Om du inte ser någon lagringspost i YAML lägger du till följande kod som anger önskad lagringskapacitet och sparar sedan manifestfilen:

    spec:
      resources:
        requests:
          storage: 2Ti
    

Kommentar

Om du har två diskar i en lagringspool med en kapacitet på 1 TiB vardera, och du redigerar YAML-manifestfilen för att läsa storage: 4Ti, expanderas båda diskarna till 2 TiB när YAML används, vilket ger dig en ny total kapacitet på 4 TiB.

  1. Använd YAML-manifestfilen för att expandera lagringspoolen.

    kubectl apply -f acstor-storagepool.yaml 
    
  2. Kör det här kommandot för att kontrollera lagringspoolens status. Ersätt <storage-pool-name> med värdet för lagringspoolens namn .

    kubectl describe sp <storage-pool-name> -n acstor
    

    Du bör se ett meddelande som "lagringspoolen expanderar". Kör kommandot igen efter några minuter och meddelandet ska vara borta.

  3. Kör kubectl get sp -A och lagringspoolen bör återspegla den nya storleken.

Ta bort en lagringspool

Kör följande kommando om du vill ta bort en lagringspool. Ersätt <storage-pool-name> med namnet på lagringspoolen.

kubectl delete sp -n acstor <storage-pool-name>

Se även