Udostępnij za pośrednictwem


Używanie usługi Azure Container Storage z dyskami SSD tymczasowymi

Usługa Azure Container Storage to oparta na chmurze usługa zarządzania woluminami, wdrażania i orkiestracji wbudowana natywnie dla kontenerów. W tym artykule pokazano, jak skonfigurować usługę Azure Container Storage do używania efemerycznego dysku z tymczasowym dyskiem SSD jako magazynem zaplecza dla obciążeń Kubernetes. Na końcu będziesz mieć zasobnik, który używa tymczasowego dysku SSD jako magazynu.

Co to jest dysk efemeryczny?

Gdy aplikacja wymaga opóźnienia magazynu w milisekundach i nie wymaga trwałości danych, możesz użyć efemerycznego dysku z usługą Azure Container Storage, aby spełnić wymagania dotyczące wydajności. Efemeryczne oznacza, że dyski są wdrażane na lokalnej maszynie wirtualnej hostujące klaster usługi AKS i nie są zapisywane w usłudze Azure Storage. Dane zostaną utracone na tych dyskach, jeśli zatrzymasz/cofniesz przydział maszyny wirtualnej.

Dostępne są dwa typy efemerycznego dysku: lokalny dysk NVMe i dysk SSD tymczasowy. NvMe jest przeznaczony do szybkiego transferu danych między magazynem a procesorem CPU. Wybierz urządzenie NVMe, gdy aplikacja potrzebuje większej przepływności lub liczby operacji we/wy na sekundę niż dysk SSD tymczasowy lub wymaga więcej miejsca do magazynowania. Należy pamiętać, że usługa Azure Container Storage obsługuje tylko replikację danych synchronicznych dla lokalnego urządzenia NVMe.

Ze względu na efemeryczny charakter tych dysków usługa Azure Container Storage domyślnie obsługuje korzystanie z ogólnych woluminów efemerycznych podczas korzystania z dysku efemerycznego. Jednak niektóre przypadki użycia mogą wywoływać woluminy trwałe, nawet jeśli dane nie są trwałe, na przykład jeśli chcesz użyć istniejących plików YAML lub szablonów wdrożenia, które są zakodowane w celu używania woluminów trwałych, a obciążenie obsługuje replikację na poziomie aplikacji w celu zapewnienia trwałości. W takich przypadkach można zaktualizować instalację usługi Azure Container Storage i dodać adnotację acstor.azure.com/accept-ephemeral-storage=true w definicji trwałego oświadczenia woluminu, aby umożliwić tworzenie woluminów trwałych z pul magazynów dysków efemerycznych.

Wymagania wstępne

  • Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Ten artykuł wymaga najnowszej wersji (2.35.0 lub nowszej) interfejsu wiersza polecenia platformy Azure. Zobacz Jak zainstalować interfejs wiersza polecenia platformy Azure. Jeśli używasz środowiska powłoki Bash w usłudze Azure Cloud Shell, najnowsza wersja jest już zainstalowana. Jeśli planujesz uruchamiać polecenia lokalnie zamiast w usłudze Azure Cloud Shell, pamiętaj, aby uruchamiać je z uprawnieniami administracyjnymi. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z usługą Azure Cloud Shell.

  • Potrzebny będzie klient wiersza polecenia platformy Kubernetes, kubectl. Jest on już zainstalowany, jeśli używasz usługi Azure Cloud Shell lub możesz zainstalować go lokalnie, uruchamiając az aks install-cli polecenie .

  • Jeśli jeszcze nie zainstalowano usługi Azure Container Storage, postępuj zgodnie z instrukcjami w temacie Używanie usługi Azure Container Storage z usługą Azure Kubernetes Service.

  • Sprawdź, czy region docelowy jest obsługiwany w regionach usługi Azure Container Storage.

Wybierz typ maszyny wirtualnej, który obsługuje dysk SSD tymczasowy

Dysk efemeryczny jest dostępny tylko w niektórych typach maszyn wirtualnych. Upewnij się, że wybrano typ maszyny wirtualnej z tymczasowym dyskiem SSD, takim jak maszyna wirtualna z serii Ev3 i Esv3.

Uruchom następujące polecenie, aby uzyskać typ maszyny wirtualnej używany z pulą węzłów. Zastąp <resource group> wartości i <cluster name> własnymi wartościami. Nie musisz podawać wartości dla PoolName lub VmSize, więc zachowaj zapytanie, jak pokazano tutaj.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

Poniżej przedstawiono przykład danych wyjściowych.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

Zalecamy, aby każda maszyna wirtualna miała co najmniej cztery procesory wirtualne (vCPU), a każda pula węzłów ma co najmniej trzy węzły.

Tworzenie i dołączanie ogólnych woluminów efemerycznych

Wykonaj następujące kroki, aby utworzyć i dołączyć ogólny wolumin efemeryczny.

1. Tworzenie puli magazynów

Najpierw utwórz pulę magazynów, która jest logicznym grupowaniem magazynu dla klastra Kubernetes, definiując ją w pliku manifestu YAML.

Jeśli usługa Azure Container Storage została włączona przy użyciu poleceń az aks create lub az aks update , być może masz już pulę magazynów. Użyj polecenia kubectl get sp -n acstor , aby uzyskać listę pul magazynów. Jeśli masz już dostępną pulę magazynów, której chcesz użyć, możesz pominąć tę sekcję i przejść do sekcji Wyświetlanie dostępnych klas magazynu.

Wykonaj następujące kroki, aby utworzyć pulę magazynów przy użyciu tymczasowego dysku SSD.

  1. Użyj ulubionego edytora tekstów, aby utworzyć plik manifestu YAML, taki jak code acstor-storagepool.yaml.

  2. Wklej następujący kod i zapisz plik. Wartość nazwy puli magazynów może być dowolna.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. Zastosuj plik manifestu YAML, aby utworzyć pulę magazynów.

    kubectl apply -f acstor-storagepool.yaml 
    

    Po zakończeniu tworzenia puli magazynów zostanie wyświetlony komunikat podobny do następującego:

    storagepool.containerstorage.azure.com/ephemeraldisk-temp created
    

    Możesz również uruchomić to polecenie, aby sprawdzić stan puli magazynów. Zastąp <storage-pool-name> wartość nazwą puli magazynów. W tym przykładzie wartość będzie efemeryczna-temp.

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

Po utworzeniu puli magazynów usługa Azure Container Storage utworzy klasę magazynu w Twoim imieniu przy użyciu konwencji acstor-<storage-pool-name>nazewnictwa .

2. Wyświetlanie dostępnych klas magazynu

Gdy pula magazynów jest gotowa do użycia, należy wybrać klasę magazynu, aby zdefiniować sposób dynamicznego tworzenia magazynu podczas tworzenia trwałych oświadczeń woluminów i wdrażania woluminów trwałych.

Uruchom polecenie , kubectl get sc aby wyświetlić dostępne klasy magazynu. Powinna zostać wyświetlona klasa magazynu o nazwie acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Ważne

Nie używaj klasy magazynu oznaczonej jako wewnętrznej. Jest to wewnętrzna klasa magazynu, która jest potrzebna do pracy w usłudze Azure Container Storage.

3. Wdrażanie zasobnika z ogólnym woluminem efemerycznym

Utwórz zasobnik przy użyciu narzędzia Fio (elastycznego testera we/wy) na potrzeby testowania porównawczego i symulacji obciążenia, który używa ogólnego woluminu efemerycznego.

  1. Użyj ulubionego edytora tekstów, aby utworzyć plik manifestu YAML, taki jak code acstor-pod.yaml.

  2. Wklej następujący kod i zapisz plik.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-ephemeral-volume
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    Po zmianie rozmiaru magazynu woluminów upewnij się, że rozmiar jest mniejszy niż dostępna pojemność dysku tymczasowego pojedynczego węzła. Zobacz Sprawdzanie pojemności dysku tymczasowego węzła.

  3. Zastosuj plik manifestu YAML, aby wdrożyć zasobnik.

    kubectl apply -f acstor-pod.yaml
    

    Powinny zostać wyświetlone dane wyjściowe podobne do następujących:

    pod/fiopod created
    
  4. Sprawdź, czy zasobnik jest uruchomiony i czy oświadczenie woluminu efemerycznego zostało pomyślnie powiązane z zasobnikem:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  5. Sprawdź testowanie fio, aby zobaczyć jego bieżący stan:

    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
    

Teraz wdrożono zasobnik używający tymczasowego dysku SSD jako magazynu i można go używać dla obciążeń Kubernetes.

Tworzenie i dołączanie woluminów trwałych

Aby utworzyć wolumin trwały na podstawie efemerycznej puli magazynów dysków, należy uwzględnić adnotację w oświadczeniach trwałych woluminów (PVC) jako zabezpieczenie, aby zapewnić, że zamierzasz używać woluminów trwałych nawet wtedy, gdy dane są efemeryczne. Ponadto należy włączyć flagę --ephemeral-disk-volume-type z wartością PersistentVolumeWithAnnotation w klastrze przed utworzeniem oświadczeń trwałych woluminów.

Wykonaj następujące kroki, aby utworzyć i dołączyć wolumin trwały.

1. Aktualizowanie instalacji usługi Azure Container Storage

Uruchom następujące polecenie, aby zaktualizować instalację usługi Azure Container Storage, aby umożliwić tworzenie woluminów trwałych z pul magazynów dysków efemerycznych.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option Temp --ephemeral-disk-volume-type PersistentVolumeWithAnnotation 

2. Tworzenie puli magazynów

Utwórz pulę magazynów, która jest logicznym grupowaniem magazynu dla klastra Kubernetes, definiując ją w pliku manifestu YAML.

Jeśli usługa Azure Container Storage została włączona przy użyciu poleceń az aks create lub az aks update , być może masz już pulę magazynów. Użyj polecenia kubectl get sp -n acstor , aby uzyskać listę pul magazynów. Jeśli masz już dostępną pulę magazynów, której chcesz użyć, możesz pominąć tę sekcję i przejść do sekcji Wyświetlanie dostępnych klas magazynu.

Wykonaj następujące kroki, aby utworzyć pulę magazynów przy użyciu tymczasowego dysku SSD.

  1. Użyj ulubionego edytora tekstów, aby utworzyć plik manifestu YAML, taki jak code acstor-storagepool.yaml.

  2. Wklej następujący kod i zapisz plik. Wartość nazwy puli magazynów może być dowolna.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. Zastosuj plik manifestu YAML, aby utworzyć pulę magazynów.

    kubectl apply -f acstor-storagepool.yaml 
    

    Po zakończeniu tworzenia puli magazynów zostanie wyświetlony komunikat podobny do następującego:

    storagepool.containerstorage.azure.com/ephemeraldisk-temp created
    

    Możesz również uruchomić to polecenie, aby sprawdzić stan puli magazynów. Zastąp <storage-pool-name> wartość nazwą puli magazynów. W tym przykładzie wartość będzie efemeryczna-temp.

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

Po utworzeniu puli magazynów usługa Azure Container Storage utworzy klasę magazynu w Twoim imieniu przy użyciu konwencji acstor-<storage-pool-name>nazewnictwa .

3. Wyświetlanie dostępnych klas magazynu

Gdy pula magazynów jest gotowa do użycia, należy wybrać klasę magazynu, aby zdefiniować sposób dynamicznego tworzenia i wdrażania woluminów magazynu.

Uruchom polecenie , kubectl get sc aby wyświetlić dostępne klasy magazynu. Powinna zostać wyświetlona klasa magazynu o nazwie acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Ważne

Nie używaj klasy magazynu oznaczonej jako wewnętrznej. Jest to wewnętrzna klasa magazynu, która jest potrzebna do pracy w usłudze Azure Container Storage.

4. Tworzenie trwałego oświadczenia woluminu

Trwałe oświadczenie woluminu służy do automatycznej aprowizacji magazynu na podstawie klasy magazynu. Wykonaj następujące kroki, aby utworzyć pcv przy użyciu nowej klasy magazynu.

  1. Użyj ulubionego edytora tekstów, aby utworzyć plik manifestu YAML, taki jak code acstor-pvc.yaml.

  2. Wklej następujący kod i zapisz plik. Wartość PVC name może być dowolna.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
      annotations:
        acstor.azure.com/accept-ephemeral-storage: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    Po zmianie rozmiaru magazynu woluminów upewnij się, że rozmiar jest mniejszy niż dostępna pojemność dysku efemerycznego pojedynczego węzła. Zobacz Sprawdzanie pojemności dysku tymczasowego węzła.

  3. Zastosuj plik manifestu YAML, aby utworzyć plik PVC.

    kubectl apply -f acstor-pvc.yaml
    

    Powinny zostać wyświetlone dane wyjściowe podobne do poniższych:

    persistentvolumeclaim/ephemeralpvc created
    

    Stan PCV można sprawdzić, uruchamiając następujące polecenie:

    kubectl describe pvc ephemeralpvc
    

Po utworzeniu pvc jest gotowy do użycia przez zasobnik.

5. Wdrażanie zasobnika i dołączanie woluminu trwałego

Utwórz zasobnik przy użyciu narzędzia Fio (elastycznego testera we/wy) na potrzeby testowania porównawczego i symulacji obciążenia oraz określ ścieżkę instalacji dla woluminu trwałego. W polu claimName użyj wartości nazwy użytej podczas tworzenia trwałego oświadczenia woluminu.

  1. Użyj ulubionego edytora tekstów, aby utworzyć plik manifestu YAML, taki jak code acstor-pod.yaml.

  2. Wklej następujący kod i zapisz plik.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  3. Zastosuj plik manifestu YAML, aby wdrożyć zasobnik.

    kubectl apply -f acstor-pod.yaml
    

    Powinny zostać wyświetlone dane wyjściowe podobne do następujących:

    pod/fiopod created
    
  4. Sprawdź, czy zasobnik jest uruchomiony i czy oświadczenie trwałego woluminu zostało pomyślnie powiązane z zasobnikem:

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. Sprawdź testowanie fio, aby zobaczyć jego bieżący stan:

    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
    

Teraz wdrożono zasobnik, który używa tymczasowego dysku SSD i można go używać dla obciążeń Kubernetes.

Zarządzanie woluminami i pulami magazynów

W tej sekcji dowiesz się, jak sprawdzić dostępną pojemność dysku efemerycznego dla jednego węzła oraz jak rozwinąć lub usunąć pulę magazynów.

Sprawdzanie pojemności dysku tymczasowego węzła

Wolumin efemeryczny jest przydzielany w jednym węźle. Podczas konfigurowania rozmiaru woluminów efemerycznych rozmiar powinien być mniejszy niż dostępna pojemność dysku tymczasowego pojedynczego węzła.

Uruchom następujące polecenie, aby sprawdzić dostępną pojemność dysku tymczasowego dla jednego węzła.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-temp-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

W tym przykładzie dostępna pojemność dysku tymczasowego dla jednego węzła to 75031990272 bajty lub 69 GiB.

Rozszerzanie puli magazynów

Pule magazynów wspierane przez dysk SSD tymczasowy można szybko i bez przestojów skalować w górę. Zmniejszanie pul magazynów nie jest obecnie obsługiwane.

Ponieważ pula magazynów wspierana przez dysk efemeryczny używa zasobów magazynu lokalnego w węzłach klastra usługi AKS (maszyn wirtualnych), rozszerzenie puli magazynów wymaga dodania innego węzła do klastra. Postępuj zgodnie z tymi instrukcjami, aby rozwinąć pulę magazynów.

  1. Uruchom następujące polecenie, aby dodać węzeł do klastra usługi AKS. Zastąp wartości <cluster-name>, <nodepool name> i <resource-group-name> własnymi. Aby uzyskać nazwę puli węzłów, uruchom polecenie kubectl get nodes.

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. Uruchom polecenie kubectl get nodes i zobaczysz, że węzeł został dodany do klastra.

  3. Uruchom polecenie kubectl get sp -A i zobaczysz, że pojemność puli magazynów wzrosła.

Usuwanie puli magazynów

Jeśli chcesz usunąć pulę magazynów, uruchom następujące polecenie. Zastąp <storage-pool-name> ciąg nazwą puli magazynów.

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

Zobacz też