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 attaz 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:
- Skapa en dynamisk lagringspool
- Skapa en fördefinierad lagringspool med företablerade Azure-hanterade diskar
- Skapa en dynamisk lagringspool med din egen krypteringsnyckel (valfritt)
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.
Använd din favorittextredigerare för att skapa en YAML-manifestfil,
code acstor-storagepool.yaml
till exempel .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
ochMBpsReadWrite
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
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.
Logga in på Azure-portalen.
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.
Använd din favorittextredigerare för att skapa en YAML-manifestfil,
code acstor-storagepool.yaml
till exempel .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>
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.
Använd din favorittextredigerare för att skapa en YAML-manifestfil,
code acstor-storagepool-cmk.yaml
till exempel .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
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.
Använd din favorittextredigerare för att skapa en YAML-manifestfil,
code acstor-pvc.yaml
till exempel .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
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.
Använd din favorittextredigerare för att skapa en YAML-manifestfil,
code acstor-pod.yaml
till exempel .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
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
Kontrollera att podden körs och att det beständiga volymanspråket har bundits till podden:
kubectl describe pod fiopod kubectl describe pvc azurediskpvc
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_ZRS
och 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.
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
.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 tillstorage: 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.
Använd YAML-manifestfilen för att expandera lagringspoolen.
kubectl apply -f acstor-storagepool.yaml
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.
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>