Tworzenie i korzystanie z woluminu za pomocą usługi Azure Disks w usłudze Azure Kubernetes Service (AKS)

Wolumin trwały reprezentuje część magazynu aprowizowaną do użycia z zasobnikami Kubernetes. Można użyć woluminu trwałego z jednym lub wieloma zasobnikami i aprowizować go dynamicznie lub statycznie. W tym artykule pokazano, jak dynamicznie tworzyć woluminy trwałe za pomocą usługi Azure Disks w klastrze usługi Azure Kubernetes Service (AKS).

Uwaga

Dysk platformy Azure można instalować tylko za pomocą typu Tryb dostępu ReadWriteOnce, który udostępnia go jednemu węzłowi w usłudze AKS. Ten tryb dostępu nadal umożliwia wielu zasobnikom dostęp do woluminu, gdy zasobniki działają w tym samym węźle. Aby uzyskać więcej informacji, zobacz Tryby dostępu TrwałeVolume platformy Kubernetes.

W tym artykule pokazano, w jaki sposób wykonać następujące czynności:

  • Współpracuj z dynamicznym woluminem trwałym (PV), instalując sterownik interfejsu magazynu kontenerów (CSI) i dynamicznie tworząc jeden lub więcej dysków zarządzanych platformy Azure w celu dołączenia do zasobnika.
  • Praca ze statycznym serwerem pv przez utworzenie co najmniej jednego dysku zarządzanego platformy Azure lub użycie istniejącego dysku i dołączenie go do zasobnika.

Aby uzyskać więcej informacji na temat woluminów Kubernetes, zobacz Opcje magazynu dla aplikacji w usłudze AKS.

Zanim rozpoczniesz

  • Upewnij się, że masz zainstalowany i skonfigurowany interfejs wiersza polecenia platformy Azure w wersji 2.0.59 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • Sterownik CSI dysku platformy Azure ma limit woluminu na węzeł. Liczba woluminów zmienia się na podstawie rozmiaru puli węzłów/węzłów. Uruchom polecenie kubectl get, aby określić liczbę woluminów, które można przydzielić na węzeł:

    kubectl get CSINode <nodename> -o yaml
    

Dynamiczne aprowizowania woluminu

Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą aprowizować co najmniej jeden wolumin trwały, który zawiera szczegółowe informacje o usłudze Azure Disk Storage do użycia przez obciążenie. Trwałe oświadczenie woluminu (PVC) używa obiektu klasy magazynu do dynamicznej aprowizacji kontenera usługi Azure Disk Storage.

Parametry klasy magazynu dla dynamicznych trwałychvolumes

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania niestandardowej klasy magazynu dla elementu PersistentVolumeClaim.

Nazwisko Znaczenie Dostępna wartość Obowiązkowy Domyślna wartość
skuName Typ konta magazynu usługi Azure Disks (alias: storageAccountType) Standard_LRS, Premium_LRS, , StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS Nie. StandardSSD_LRS
fsType Typ systemu plików ext4, ext3, , xfsext2, btrfs dla systemu Linux, ntfs dla systemu Windows Nie. ext4 dla systemu Linux dla ntfs systemu Windows
cachingMode Ustawienie pamięci podręcznej hosta usługi Azure Data Disk None, , ReadOnlyReadWrite Nie. ReadOnly
resourceGroup Określanie grupy zasobów dla dysków platformy Azure Nazwa istniejącej grupy zasobów Nie. Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster usługi AKS
DiskIOPSReadWrite Dysk UltraSSD lub funkcja we/wy na sekundę SSD w warstwie Premium w wersji 2 (minimalna: 2 operacje we/wy na sekundę/giB) 100~160000 Nie. 500
DiskMBpsReadWrite Funkcja przepływności dysków UltraSSD lub SSD w warstwie Premium w wersji 2 (minimalna: 0,032/GiB) 1~2000 Nie. 100
LogicalSectorSize Rozmiar sektora logicznego w bajtach dla dysku w warstwie Ultra. Obsługiwane wartości to 512 ad 4096. Wartość domyślna to 4096. 512, 4096 Nie. 4096
tags Tagi dysków platformy Azure Format tagu: key1=val1,key2=val2 Nie. ""
diskEncryptionSetID ResourceId zestawu szyfrowania dysku, który ma być używany do włączania szyfrowania magazynowanych Formacie: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} Nie. ""
diskEncryptionType Typ szyfrowania zestawu szyfrowania dysku. EncryptionAtRestWithCustomerKey(domyślnie), EncryptionAtRestWithPlatformAndCustomerKeys Nie. ""
writeAcceleratorEnabled Akcelerator zapisu na dyskach platformy Azure true, false Nie. ""
networkAccessPolicy Właściwość NetworkAccessPolicy, aby zapobiec generowaniu identyfikatora URI sygnatury dostępu współdzielonego dla dysku lub migawki AllowAll, , DenyAllAllowPrivate Nie. AllowAll
diskAccessID Identyfikator zasobu DiskAccess platformy Azure do korzystania z prywatnych punktów końcowych na dyskach Nie. ``
enableBursting Włącz zwiększenie wydajności na żądanie poza aprowizowaną docelową wydajność dysku. Skalowanie na żądanie powinno być stosowane tylko do dysku w warstwie Premium i rozmiaru dysku > 512 GB. Dysk w warstwie Ultra i udostępniony nie jest obsługiwany. Skalowanie jest domyślnie wyłączone. true, false Nie. false
Useragent Agent użytkownika używany do przypisywania użycia przez klienta Nie. Wygenerowany agent useragent sformatowany driverName/driverVersion compiler/version (OS-ARCH)
Subscriptionid Określ identyfikator subskrypcji platformy Azure, w którym są tworzone dyski platformy Azure. Identyfikator subskrypcji Azure Nie. Jeśli nie jest pusty, resourceGroup należy podać.
--- Następujące parametry są przeznaczone tylko dla wersji 2 --- --- ---
maxShares Całkowita liczba instalacji dysku udostępnionego dozwolona dla dysku. Ustawienie wartości na 2 lub więcej umożliwia repliki załączników. Obsługiwane wartości zależą od rozmiaru dysku. Zobacz Udostępnianie dysku zarządzanego platformy Azure, aby uzyskać obsługiwane wartości. Nie. 1
maxMountReplicaCount Liczba załączników replik do utrzymania. Ta wartość musi znajdować się w zakresie [0..(maxShares - 1)] Nie. Jeśli accessMode wartość to ReadWriteMany, wartość domyślna to 0. W przeciwnym razie wartość domyślna to maxShares - 1

Wbudowane klasy magazynu

Klasy magazynu definiują sposób dynamicznego tworzenia jednostki magazynu przy użyciu woluminu trwałego. Aby uzyskać więcej informacji na temat klas magazynu Kubernetes, zobacz Klasy magazynu Kubernetes.

Każdy klaster usługi AKS zawiera cztery wstępnie utworzone klasy magazynu, z których dwie są skonfigurowane do pracy z dyskami platformy Azure:

  1. Domyślna klasa magazynu aprowizuje standardowy dysk SSD platformy Azure.
    • Dyski SSD w warstwie Standardowa udostępniają magazyn w warstwie Standardowa i zapewniają ekonomiczny magazyn, jednocześnie zapewniając niezawodną wydajność.
  2. Klasa magazynu managed-csi-premium aprowizuje dysk platformy Azure w warstwie Premium.
    • Dyski ssd o wysokiej wydajności i małych opóźnieniach są z powrotem dyski w warstwie Premium. Są one idealne dla maszyn wirtualnych z obciążeniami produkcyjnymi. Jeśli używasz sterownika CSI dysku platformy Azure w usłudze AKS, możesz również użyć managed-csi klasy magazynu, która jest wspierana przez magazyn lokalnie nadmiarowy SSD w warstwie Standardowa (LRS).

Zmniejszenie rozmiaru PVC nie jest obsługiwane z powodu ryzyka utraty danych. Istniejącą klasę magazynu można edytować przy użyciu kubectl edit sc polecenia lub utworzyć własną niestandardową klasę magazynu. Jeśli na przykład chcesz użyć dysku o rozmiarze 4 TiB, musisz utworzyć klasę magazynu, która definiuje cachingmode: None , ponieważ buforowanie dysku nie jest obsługiwane dla dysków 4 TiB i większych. Aby uzyskać więcej informacji na temat klas magazynu i tworzenia własnej klasy magazynu, zobacz Opcje magazynu dla aplikacji w usłudze AKS.

Za pomocą kubectl get sc polecenia można wyświetlić wstępnie utworzone klasy magazynu. W poniższym przykładzie przedstawiono wstępnie utworzone klasy magazynu dostępne w klastrze usługi AKS:

kubectl get sc

Dane wyjściowe polecenia przypominają następujący przykład:

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

Uwaga

Oświadczenia trwałego woluminu są określone w giB, ale dyski zarządzane platformy Azure są rozliczane przez jednostkę SKU dla określonego rozmiaru. Te jednostki SKU wahają się od 32GiB dla dysków S4 lub P4 do 32TiB dla dysków S80 lub P80 (w wersji zapoznawczej). Wydajność przepływności i liczby operacji we/wy na sekundę dysku zarządzanego w warstwie Premium zależy zarówno od jednostki SKU, jak i rozmiaru wystąpienia węzłów w klastrze usługi AKS. Aby uzyskać więcej informacji, zobacz Cennik i wydajność dysków zarządzanych.

Tworzenie trwałego oświadczenia woluminu

Trwałe oświadczenie woluminu (PVC) automatycznie aprowizuje magazyn na podstawie klasy magazynu. W takim przypadku pcV może użyć jednej ze wstępnie utworzonych klas magazynu do utworzenia dysku zarządzanego platformy Azure w warstwie Standardowa lub Premium.

  1. Utwórz plik o nazwie azure-pvc.yaml i skopiuj go w następującym manifeście. Oświadczenie żąda dysku o rozmiarze azure-managed-disk5 GB z dostępem ReadWriteOnce . Klasa magazynu managed-csi jest określana jako klasa magazynu.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
        name: azure-managed-disk
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: managed-csi
      resources:
        requests:
          storage: 5Gi
    

Napiwek

Aby utworzyć dysk korzystający z magazynu w warstwie Premium, użyj storageClassName: managed-csi-premium zamiast zarządzanego pliku csi.

  1. Utwórz oświadczenie trwałego woluminu kubectl apply przy użyciu polecenia i określ plik azure-pvc.yaml .

    kubectl apply -f azure-pvc.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/azure-managed-disk created
    

Używanie woluminu trwałego

Po utworzeniu trwałego oświadczenia woluminu należy sprawdzić, czy ma on stan Pending. Stan Pending wskazuje, że jest gotowy do użycia przez zasobnik.

  1. Sprawdź stan PCV przy użyciu kubectl describe pvc polecenia .

    kubectl describe pvc azure-managed-disk
    

    Dane wyjściowe polecenia przypominają następujący skrócony przykład:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Utwórz plik o nazwie azure-pvc-disk.yaml i skopiuj go w następującym manifeście. Ten manifest tworzy podstawowy zasobnik NGINX, który używa trwałego oświadczenia woluminu o nazwie azure-managed-disk do zainstalowania dysku platformy Azure w ścieżce /mnt/azure. W przypadku kontenerów systemu Windows Server określ ścieżkę mountPath przy użyciu konwencji ścieżki systemu Windows, takiej jak "D:".

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: "/mnt/azure"
              name: volume
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  3. Utwórz zasobnik przy użyciu kubectl apply polecenia .

     kubectl apply -f azure-pvc-disk.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    pod/mypod created
    
  4. Masz teraz uruchomiony zasobnik z zainstalowanym dyskiem platformy /mnt/azure Azure w katalogu. Sprawdź konfigurację zasobnika przy użyciu kubectl describe polecenia .

     kubectl describe pod mypod
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
       default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
     Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

Korzystanie z dysków w warstwie Ultra platformy Azure

Aby użyć dysku w warstwie Ultra platformy Azure, zobacz Używanie dysków w warstwie Ultra w usłudze Azure Kubernetes Service (AKS).

Korzystanie z tagów platformy Azure

Aby uzyskać więcej informacji na temat używania tagów platformy Azure, zobacz Używanie tagów platformy Azure w usłudze Azure Kubernetes Service (AKS).

Statyczna aprowizacja woluminu

Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą utworzyć co najmniej jeden wolumin trwały zawierający szczegółowe informacje o dyskach platformy Azure do użycia przez obciążenie.

Statyczne parametry aprowizacji dla woluminu trwałego

Poniższa tabela zawiera parametry, których można użyć do zdefiniowania woluminu trwałego.

Nazwisko Znaczenie Dostępna wartość Obowiązkowy Domyślna wartość
volumeHandle Identyfikator URI dysku platformy Azure /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Tak Nie dotyczy
volumeAttributes.fsType Typ systemu plików ext4, ext3, , xfsext2, btrfs dla systemu Linux, ntfs dla systemu Windows Nie. ext4 dla systemu Linux dla ntfs systemu Windows
volumeAttributes.partition Numer partycji istniejącego dysku (obsługiwany tylko w systemie Linux) 1, , 23 Nie. Puste (bez partycji)
— upewnij się, że format partycji jest podobny -part1
volumeAttributes.cachingMode Ustawienie pamięci podręcznej hosta dysku None, , ReadOnlyReadWrite Nie. ReadOnly

Tworzenie dysku platformy Azure

Podczas tworzenia dysku platformy Azure do użycia z usługą AKS można utworzyć zasób dysku w grupie zasobów węzła. Takie podejście umożliwia klastrowi usługi AKS uzyskiwanie dostępu do zasobu dysku i zarządzanie nim. Jeśli zamiast tego utworzysz dysk w oddzielnej grupie zasobów, musisz przyznać tożsamości zarządzanej usługi Azure Kubernetes Service (AKS) dla klastra Contributor rolę do grupy zasobów dysku.

  1. Zidentyfikuj nazwę grupy zasobów przy użyciu az aks show polecenia i dodaj --query nodeResourceGroup parametr .

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Utwórz dysk przy użyciu az disk create polecenia . Określ nazwę grupy zasobów węzła i nazwę zasobu dysku, na przykład myAKSDisk. Poniższy przykład tworzy dysk 20GiB i generuje identyfikator dysku po jego utworzeniu. Jeśli musisz utworzyć dysk do użycia z kontenerami systemu Windows Server, dodaj --os-type windows parametr w celu poprawnego sformatowania dysku.

    az disk create \
      --resource-group MC_myResourceGroup_myAKSCluster_eastus \
      --name myAKSDisk \
      --size-gb 20 \
      --query id --output tsv
    

    Uwaga

    Opłaty za dyski platformy Azure są naliczane według jednostki SKU dla określonego rozmiaru. Te jednostki SKU wahają się od 32GiB dla dysków S4 lub P4 do 32TiB dla dysków S80 lub P80 (w wersji zapoznawczej). Wydajność przepływności i liczby operacji we/wy na sekundę dysku zarządzanego w warstwie Premium zależy zarówno od jednostki SKU, jak i rozmiaru wystąpienia węzłów w klastrze usługi AKS. Zobacz Cennik i wydajność Dyski zarządzane.

    Identyfikator zasobu dysku jest wyświetlany po pomyślnym zakończeniu polecenia, jak pokazano w poniższych przykładowych danych wyjściowych. Identyfikator dysku służy do instalowania dysku w następnej sekcji.

    /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
    

Instalowanie dysku jako woluminu

  1. Utwórz plik pv-azuredisk.yaml za pomocą elementu PersistentVolume. Zaktualizuj volumeHandle za pomocą identyfikatora zasobu dysku z poprzedniego kroku. W przypadku kontenerów systemu Windows Server określ ntfs parametru fsType.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: disk.csi.azure.com
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    
  2. Utwórz plik pvc-azuredisk.yaml za pomocą elementu PersistentVolumeClaim, który używa elementu PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Utwórz element PersistentVolume i PersistentVolumeClaim przy użyciu kubectl apply polecenia i odwołaj się do dwóch utworzonych plików YAML.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Sprawdź, czy element PersistentVolumeClaim został utworzony i powiązany z elementem kubectl get pvc PersistentVolume przy użyciu polecenia .

    kubectl get pvc pvc-azuredisk
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Utwórz plik azure-disk-pod.yaml, aby odwołać się do pliku PersistentVolumeClaim. W przypadku kontenerów systemu Windows Server określ ścieżkę mountPath przy użyciu konwencji ścieżki systemu Windows, takiej jak "D:".

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
          - name: azure
            mountPath: /mnt/azure
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  6. Zastosuj konfigurację i zainstaluj wolumin przy kubectl apply użyciu polecenia .

    kubectl apply -f azure-disk-pod.yaml
    

Czyszczenie zasobów

Gdy skończysz z zasobami utworzonymi w tym artykule, możesz je usunąć przy użyciu kubectl delete polecenia .

# Remove the pod
kubectl delete -f azure-pvc-disk.yaml

# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml

Następne kroki