Megosztás a következőn keresztül:


Az Azure Container Storage használata helyi NVMe-vel

Az Azure Container Storage egy felhőalapú kötetkezelési, üzembe helyezési és vezénylési szolgáltatás, amely natív módon készült tárolókhoz. Ez a cikk bemutatja, hogyan konfigurálhatja az Azure Container Storage-t úgy, hogy helyi NVMe-lemezt használjon háttértárként a Kubernetes-számítási feladatokhoz. Az NVMe a tárolás és a PROCESSZOR közötti nagy sebességű adatátvitelre lett tervezve, magas IOPS-t és átviteli sebességet biztosítva.

Fontos

Ez a cikk az Azure Container Storage-ra (2.x.x-es verzió) vonatkozik, amely támogatja a helyi NVMe lemezt és az Azure Elastic SAN-t háttértároló-típusokként. A korábbi verziók részleteiért tekintse meg az Azure Container Storage (1.x.x verzió) dokumentációját.

Mi a helyi NVMe?

Ha az alkalmazásnak ezredmásodperc alatti tárolási késésre és magas átviteli sebességre van szüksége, a teljesítménykövetelmények teljesítéséhez használhat helyi NVMe-lemezeket az Azure Container Storage használatával. A rövid élettartam azt jelenti, hogy a lemezek az AKS-fürtöt üzemeltető helyi virtuális gépen (VM) vannak üzembe helyezve, és nem egy Azure Storage-szolgáltatásba vannak mentve. Az adatok elvesznek ezeken a lemezeken, ha leállítja/deallokálja a virtuális gépet. A helyi NVMe-lemezek olyan Azure-beli virtuálisgép-családokon érhetők el, mint például a tárolóoptimalizált virtuális gépek.

Az Azure Container Storage alapértelmezés szerint általános rövid élettartamú köteteket hoz létre helyi NVMe-lemezek használatakor. Állandó kötet igényeket igénylő használati esetek esetén hozzáadhatja a megjegyzést localdisk.csi.acstor.io/accept-ephemeral-storage: "true" az állandó kötet igény sablonjához.

Adatcsíkolás

A teljesítmény maximalizálása érdekében az Azure Container Storage automatikusan leválasztja az adatokat az összes rendelkezésre álló helyi NVMe-lemezről virtuális gépenként. A csíkozás olyan technika, amelyben az adatok kis adattömbökre vannak osztva, és egyszerre több lemezen egyenletesen vannak megírva, ami növeli az átviteli sebességet, és javítja az általános I/O-teljesítményt. Ez a viselkedés alapértelmezés szerint engedélyezve van, és nem tiltható le.

Mivel a teljesítmény ezeken a csíkos eszközökön összesül, a nagyobb, több NVMe-meghajtót elérhetővé tevő virtuálisgép-méretek jelentősen magasabb IOPS-t és sávszélességet nyithatnak meg. Egy nagyobb virtuálisgép-család kiválasztása lehetővé teszi, hogy a számítási feladatok további konfiguráció nélkül kihasználják az extra összesített átviteli sebességet.

Az Lsv3 sorozat például skálázható úgy, hogy az egyetlen 1,92 TB-os NVMe-meghajtóval rendelkező Standard_L8s_v3 (körülbelül 400 000 IOPS és 2000 MB/s) konfigurációról a 10 NVMe-meghajtóval rendelkező Standard_L80s_v3 (körülbelül 3,8 millió IOPS és 20 000 MB/s) konfigurációig növekszik.

Előfeltételek

  • Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Ez a cikk az Azure CLI 2.83.0-s vagy újabb verzióját igényli. További információ: Az Azure CLI telepítése. Tiltsa le a bővítményeket, például aks-preview ha problémák lépnek fel. Szükség szerint telepítse vagy frissítse a bővítményeket:

    • az extension add --upgrade --name k8s-extension
    • az extension add --upgrade --name elastic-san (Csak rugalmas SAN)
  • Szüksége van a Kubernetes parancssori ügyfélre. kubectl Az Azure Cloud Shell használata esetén már telepítve van. A az aks install-cli parancs futtatásával telepítheti helyileg.

  • Ellenőrizze, hogy a célrégió támogatott-e az Azure Container Storage-régiókban.

Válasszon egy helyi NVMe-t támogató virtuálisgép-típust

A helyi NVMe-lemezek csak bizonyos típusú virtuális gépeken érhetők el, például tárolóoptimalizált virtuális gépeken vagy GPU-val gyorsított virtuális gépeken. Ha helyi NVMe-kapacitást szeretne használni, válasszon egyet ezek közül a virtuálisgép-méretek közül.

Futtassa a következő parancsot a csomópontkészlethez használt virtuálisgép-típus lekéréséhez. Cserélje le a <resource group> és a <cluster name> a saját értékeivel. Nem kell értékeket megadnia PoolName , VmSizeezért a lekérdezést az itt látható módon kell megadnia.

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

Az alábbi kimenet egy példa.

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

Megjegyzés

Az Azure Container Storage -ban (2.x.x-es verzió) mostantól három csomópontnál kevesebb csomóponttal rendelkező fürtöket is használhat.

Azokban az esetekben, amikor egyetlen helyi NVMe-lemezzel rendelkező virtuálisgép-méreteket használ a rendszer a rövid élettartamú operációsrendszer-lemezek mellett, a helyi NVMe-lemez lesz lefoglalva az operációs rendszerhez, így az Azure Container Storage nem használhat kapacitást. A helyi NVMe-lemezek optimális teljesítményének és rendelkezésre állásának biztosítása érdekében javasoljuk, hogy tegye a következőket:

  • Válassza ki a két vagy több helyi NVMe-lemezzel rendelkező virtuálisgép-méreteket.
  • Felügyelt lemezeket használjon az operációs rendszerhez, és felszabadítsa az összes helyi NVMe-lemezt az adatfeldolgozáshoz.

További információkért tekintse meg az Azure Kubernetes Service rövid élettartamú NVMe-adatlemezeinek ajánlott eljárásait.

Tárolóosztály létrehozása a helyi NVMe-hez

Ha még nincs telepítve az Azure Container Storage, telepítse.

Az Azure Container Storage (2.x.x verzió) a helyi NVMe-t standard Kubernetes storage-osztályként mutatja be. Klaszterenként egyszer hozza létre a local-csi tárolási osztályt, és használja újra az általános múlékony kötetekhez és a persistent volume igényekhez.

  1. A kedvenc szövegszerkesztővel hozzon létre egy YAML-jegyzékfájlt, például storageclass.yaml, majd illessze be a következő specifikációba.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-csi
    provisioner: localdisk.csi.acstor.io
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    
  2. Alkalmazza a jegyzékfájlt a tárolási osztály létrehozásához.

    kubectl apply -f storageclass.yaml
    

Másik lehetőségként létrehozhatja a tárolási osztályt a Terraform használatával.

  1. A Terraform használatával kezelheti a tárolási osztályt az alábbihoz main.tfhasonló konfiguráció létrehozásával. Frissítse a szolgáltató verzióját vagy a kubeconfig elérési útját a környezethez szükséges módon.

    terraform {
      required_version = ">= 1.5.0"
      required_providers {
        kubernetes = {
          source  = "hashicorp/kubernetes"
          version = "~> 3.0"
        }
      }
    }
    
    provider "kubernetes" {
      config_path = "~/.kube/config"
    }
    
    resource "kubernetes_storage_class_v1" "local_csi" {
      metadata {
        name = "local-csi"
      }
    
      storage_provisioner    = "localdisk.csi.acstor.io"
      reclaim_policy         = "Delete"
      volume_binding_mode    = "WaitForFirstConsumer"
      allow_volume_expansion = true
    }
    
  2. Inicializálja, áttekinti és alkalmazza a konfigurációt a tárolási osztály létrehozásához.

    terraform init
    terraform plan
    terraform apply
    

A tárolási osztály ellenőrzése

Futtassa a következő parancsot a tárosztály létrehozásának ellenőrzéséhez:

kubectl get storageclass local-csi

A következőhöz hasonló kimenetnek kell megjelennie:

NAME       PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-csi  localdisk.csi.acstor.io    Delete          WaitForFirstConsumer   true                   10s

Általános rövid élettartamú kötetek létrehozása és csatolása

Az alábbi lépéseket követve általános rövid élettartamú kötetet hozhat létre és csatolhat az Azure Container Storage használatával. A folytatás előtt győződjön meg arról, hogy az Azure Container Storage telepítve van, és a local-csi tárolási osztály létezik.

Pod üzembe helyezése általános ideiglenes tárolóval

Hozzon létre egy podot a Fio (rugalmas I/O-tesztelő) használatával a teljesítményméréshez és a számítási feladatok szimulációhoz, amely általános rövid élettartamú kötetet használ.

  1. A kedvenc szövegszerkesztővel hozzon létre egy YAML-jegyzékfájlt, például code fiopod.yaml.

  2. Illessze be a következő kódot, és mentse a fájlt.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: fio
          image: mayadata/fio
          args: ["sleep", "1000000"]
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              spec:
                volumeMode: Filesystem
                accessModes: ["ReadWriteOnce"]
                storageClassName: local-csi
                resources:
                  requests:
                    storage: 10Gi
    
  3. Alkalmazza a YAML-jegyzékfájlt a pod üzembe helyezéséhez.

    kubectl apply -f fiopod.yaml
    

Az üzembe helyezés ellenőrzése és a teljesítménytesztek futtatása

Ellenőrizze, hogy fut-e a pod:

kubectl get pod fiopod

A podnak a Futó állapotban kell megjelennie. A futtatás után végrehajthat egy Fio-teljesítménytesztet:

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

Állandó kötetek létrehozása és csatolása rövid élettartamú tárjegyzetekkel

Bár az általános rövid élettartamú kötetek rövid távú tároláshoz ajánlottak, az Azure Container Storage támogatja az állandó köteteket és a rövid élettartamú tárolókat is, ha szükséges a meglévő számítási feladatokkal való kompatibilitáshoz.

Megjegyzés

Az Azure Container Storage (2.x.x verzió) az előző localdisk.csi.acstor.io/accept-ephemeral-storage: "true"helyett az új széljegyzetet acstor.azure.com/accept-ephemeral-storage: "true" használja.

Az azt használó számítási feladatok üzembe helyezése előtt győződjön meg arról, hogy az Azure Container Storage telepítve van, és a local-csi korábban létrehozott tárolási osztály elérhető.

Állapotalapú készlet üzembe helyezése állandó kötetekkel

Ha olyan állandó mennyiségi jogcímeket kell használnia, amelyek nincsenek a pod életciklusához kötve, hozzá kell adnia a localdisk.csi.acstor.io/accept-ephemeral-storage: "true" megjegyzést. A köteten lévő adatok helyiek a csomóponton, és elvesznek, ha a csomópontot törlik, vagy a podot egy másik csomópontra helyezik át.

Íme egy példa egy állapottartó készletre, amely állandó köteteket használ ideiglenes tároló annotációval.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-lcd-lvm-annotation
  labels:
    app: busybox
spec:
  podManagementPolicy: Parallel
  serviceName: statefulset-lcd
  replicas: 10
  template:
    metadata:
      labels:
        app: busybox
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: statefulset-lcd
          image: mcr.microsoft.com/azurelinux/busybox:1.36
          command:
            - "/bin/sh"
            - "-c"
            - set -euo pipefail; trap exit TERM; while true; do date -u +"%Y-%m-%dT%H:%M:%SZ" >> /mnt/lcd/outfile; sleep 1; done
          volumeMounts:
            - name: persistent-storage
              mountPath: /mnt/lcd
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: busybox
  volumeClaimTemplates:
    - metadata:
        name: persistent-storage
        annotations:
          localdisk.csi.acstor.io/accept-ephemeral-storage: "true"
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: local-csi
        resources:
          requests:
            storage: 10Gi

Mentse és alkalmazza ezt a YAML-t az állapotalapú készlet állandó kötetekkel való létrehozásához:

kubectl apply -f statefulset-pvc.yaml

Tárhely kezelése

Ebben a szakaszban megtudhatja, hogyan ellenőrizheti a csomópont rövid élettartamú lemezkapacitását, bővítheti a tárkapacitást és törölheti a tárolási erőforrásokat.

Az ideiglenes csomópont-lemez kapacitásának ellenőrzése

A rendszer egy rövid ideig érvényes kötetet foglal le egyetlen csomóponton. A rövid élettartamú kötetek méretének konfigurálásakor a méretnek kisebbnek kell lennie, mint az egyetlen csomópont rövid élettartamú lemezének rendelkezésre álló kapacitása.

Győződjön meg arról, hogy létezik StorageClass localdisk.csi.acstor.io . Futtassa a következő parancsot a rövid élettartamú lemez rendelkezésre álló kapacitásának ellenőrzéséhez az egyes csomópontokhoz.

kubectl get csistoragecapacities.storage.k8s.io -n kube-system -o custom-columns=NAME:.metadata.name,STORAGE_CLASS:.storageClassName,CAPACITY:.capacity,NODE:.nodeTopology.matchLabels."topology\.localdisk\.csi\.acstor\.io/node"

A következő példához hasonló kimenetnek kell megjelennie:

NAME          STORAGE_CLASS   CAPACITY    NODE
csisc-2pkx4   local-csi       1373172Mi   aks-storagepool-31410930-vmss000001
csisc-gnmm9   local-csi       1373172Mi   aks-storagepool-31410930-vmss000000

Ha üres kapacitáskimenetet észlel, ellenőrizze, hogy létezik-e egy StorageClass localdisk.csi.acstor.io. Az csistoragecapacities.storage.k8s.io erőforrás csak akkor jön létre, ha létezik StorageClass localdisk.csi.acstor.io .

Tárkapacitás bővítése

Mivel a rövid élettartamú lemeztároló helyi erőforrásokat használ az AKS-fürtcsomópontokon, a tárkapacitás bővítéséhez csomópontokat kell hozzáadni a fürthöz.

Ha csomópontot szeretne hozzáadni a fürthöz, futtassa a következő parancsot. Cserélje le <cluster-name>a , <nodepool-name>, <resource-group>és <new-count> az értékeket.

az aks nodepool scale --cluster-name <cluster-name> --name <nodepool-name> --resource-group <resource-group> --node-count <new-count>

Tárolási erőforrások törlése

A tárolási erőforrások törléséhez először törölnie kell az összes PersistentVolumeClaims és/vagy PersistentVolumes elemet. Az Azure Container Storage StorageClass törlése nem távolítja el automatikusan a meglévő PersistentVolumes/PersistentVolumeClaims-t.

Egy nevű local-csitárosztály törléséhez futtassa a következő parancsot:

kubectl delete storageclass local-csi

Lásd még