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


Az Azure Container Storage használata az Azure Elastic SAN-val

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 az Azure Elastic SAN-t használja háttértárként a Kubernetes számítási feladataihoz.

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 az Az Azure Elastic SAN?

Az Azure Elastic SAN egy felügyelt, megosztott blokktároló szolgáltatás. Központi tárolókapacitást és teljesítményt biztosít, beleértve az IOPS-t és az átviteli sebességet. Ebből a készletből több kötetet hozhat létre, és számos számítási erőforráshoz csatolhatja őket. Az egyes számítási feladatokhoz tartozó különálló lemezek kiépítése és finomhangolása helyett az Elastic SAN egyetlen kapacitáskészletből foglalja le a tárolót, és elosztja a teljesítményt a csatlakoztatott kötetek között. Ez a megközelítés megfelel a számos dinamikus számítási feladattal rendelkező környezeteknek, ahol az igény idővel változik, és az egyik kötet nem használt teljesítménye más köteteket is kiszolgál. A rugalmas SAN-t általában sok kötet vagy csomópont megosztott, méretezhető blokktárolóihoz használják. Emellett támogatja a gyorsabb kötet csatolását és leválasztását az vezényléses számítási feladatokhoz, a csomópontonkénti nagyobb kötetsűrűséghez, valamint a tárolókapacitás és a teljesítmény központosított kiépítéséhez és felügyeletéhez.

A rugalmas san kapacitásának az Azure Container Storage-on keresztüli bővítése jelenleg nem támogatott. Az Elastic SAN-t átméretezheti közvetlenül az Azure Portalról vagy az Azure CLI használatával.

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.

  • Tekintse át a telepítési utasításokat , és győződjön meg arról, hogy az Azure Container Storage megfelelően van telepítve.

  • Ha először használja az Elastic SAN-t az előfizetésben, futtassa ezt az egyszeri regisztrációs parancsot:

    az provider register --namespace Microsoft.ElasticSan
    
  • Ha a ZRS újonnan engedélyezve van egy régióban, előfordulhat, hogy regisztrálnia kell egy előfizetésszintű funkciójelzőt, hogy az Azure Container Storage üzembe helyezhesse a SAN-célokat:

    az feature register \
    --namespace Microsoft.ElasticSan \
    --name EnableElasticSANTargetDeployment
    

Engedélyek beállítása

Ahhoz, hogy az Azure Container Storage rugalmas tárolóhálózatot helyezzen üzembe, hozzá kell rendelnie az Azure Container Storage Operator szerepkört az AKS által felügyelt identitáshoz. Ehhez a lépéshez Azure Container Storage-tulajdonosi vagy Azure Container Storage-közreműködői szerepkörre van szüksége az Azure-előfizetéshez.

Futtassa az alábbi parancsokat az Azure Container Storage Operátor szerepkör hozzárendeléséhez az AKS felügyelt identitásához. Ne felejtse el lecserélni a <resource-group>, <cluster-name> és <Azure-subscription-id> helyén a saját értékeire. A hatókört az erőforráscsoportra is szűkítheti, például /subscriptions/<Azure-subscription-id>/resourceGroups/<resource-group>.

export AKS_MI_OBJECT_ID=$(az aks show --name <cluster-name> --resource-group <resource-group> --query "identityProfile.kubeletidentity.objectId" -o tsv)
az role assignment create --assignee $AKS_MI_OBJECT_ID --role "Azure Container Storage Operator" --scope "/subscriptions/<azure-subscription-id>"

Kiépítési modell kiválasztása

Az Azure Container Storage három módszert támogat az Elastic SAN és az Azure Kubernetes Service (AKS) használatára:

  • Dinamikus kiépítés: Az Azure Container Storage igény szerint létrehozza a rugalmas SAN-kötetcsoportokat és -köteteket.
  • Előre kiosztott rugalmas san és kötetcsoport: Először az Elastic SAN és a kötetcsoportot hozza létre, majd az Azure Container Storage kiosztja a köteteket a meglévő erőforrásokon belül.
  • Statikus kiépítés: Először létre kell hoznia az Elastic SAN-t, a kötetcsoportot és a kötetet, majd statikus állandó kötetként (PV) elérhetővé kell tenni a kötetet a Kubernetes számára.

Az alábbi szakaszok bemutatják, hogyan konfigurálhat tárolási osztályt az egyes modellekhez.

Rugalmas san dinamikus kiépítése

Alapértelmezett tárolási osztály létrehozása

Hozzon létre egy YAML-jegyzékfájlt, például storageclass.yaml, majd használja az alábbi specifikációt.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azuresan
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

Az ezzel a tárolási osztálysal kiosztott alapértelmezett rugalmas SAN-kapacitás 1 TiB.

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" "azuresan" {
      metadata {
        name = "azuresan"
      }
    
      storage_provisioner    = "san.csi.azure.com"
      reclaim_policy         = "Delete"
      volume_binding_mode    = "Immediate"
      allow_volume_expansion = true
    }
    
  2. Inicializálja és alkalmazza a konfigurációt.

    terraform init
    terraform apply
    

Tárosztály létrehozása egyéni rugalmas SAN-kapacitással

Ha az alapértelmezett 1 TiB-nál eltérő kezdeti kapacitásra van szüksége, állítsa be a paramétert initialStorageTiB a tárolási osztályban.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azuresan
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
  initialStorageTiB: "10"

Előre kiosztott rugalmas SAN- és kötetcsoportok

Előre létrehozhat egy Elastic SAN-t vagy egy Elastic SAN és kötetcsoportot, majd hivatkozhat ezekre az erőforrásokra a tárolási osztályban.

Tárosztály létrehozása előre kiépített rugalmas san-hoz

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

  1. Azonosítsa az AKS-fürt felügyelt erőforráscsoportját.

    kubectl get node -o jsonpath={range .items[*]}{.spec.providerID}{"\n"}{end}
    

    A csomópont erőforráscsoportja a szolgáltatóazonosító után /resourceGroup/ jelenik meg.

  2. Rugalmas san létrehozása a felügyelt erőforráscsoportban.

    az elastic-san create --resource-group <node-resource-group> --name <san-name> --location <node-region> --sku "{name:Premium_LRS,tier:Premium}" --base-size-tib 1 --extended-capacity-size-tib 1
    
  3. Hozzon létre egy tárosztályt, amely az Elastic SAN-ra hivatkozik:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azuresan
    provisioner: san.csi.azure.com
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    parameters:
      san: <san-name> # replace with the name of your precreated Elastic SAN
    

Tárolóosztály létrehozása előre kiosztott rugalmas SAN és kötetcsoporthoz

  1. Hozzon létre egy rugalmas tárolóhálózatot a felügyelt erőforráscsoportban az előre kiosztott rugalmas tárolóhálózat tárolási osztályának létrehozása című témakörben leírt lépésekkel.

  2. Hozzon létre egy kötetcsoportot.

  3. Virtuális hálózat (VNet) adatainak lekérése.

    az network vnet list -g <node-resource-group> --query [].name -o tsv
    
  4. Alhálózati információk lekérése.

    az network vnet subnet list -g <node-resource-group> --vnet-name <vnet-name> --query [].name -o tsv
    
  5. Frissítse a szolgáltatásvégpontot.

    az network vnet subnet update -g <node-resource-group> --vnet-name <vnet-name> --name <subnet-name> --service-endpoints "Microsoft.Storage"
    

    Fontos

    Ha az AKS-fürt több csomópontkészletet használ különböző alhálózatokban, akkor bele kell foglalni az összes alhálózat-azonosítót a csomópontkészletekhez az Elastic SAN kötetcsoport hálózati ACL-jeibe. A rugalmas SAN-kötetcsoportok csak a kötetcsoport szabályaiban kifejezetten engedélyezett virtuális hálózati alhálózatokról engedélyezik a hozzáférést, és a többi alhálózattól érkező kérések alapértelmezés szerint le vannak tiltva.

  6. Hozza létre a kötetcsoportot.

    az elastic-san volume-group create --resource-group <node-resource-group> --elastic-san-name <san-name> --name <volume-group-name> --network-acls '{"virtual-network-rules":[{"id":"<subnet-id>","action":"Allow"}]}'
    
  7. Hozzon létre egy tárolási osztályt, amely az Elastic SAN-ra és a kötetcsoportra hivatkozik:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azuresan
    provisioner: san.csi.azure.com
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    parameters:
      san: <san-name> # replace with the name of your precreated Elastic SAN
      volumegroup: <volume-group-name> # replace with the name of your precreated volume group
    

A jegyzék alkalmazása és a tárosztály létrehozásának ellenőrzése

A manifeszt alkalmazása:

kubectl apply -f storageclass.yaml

Ellenőrizze, hogy létrejött-e a tárolási osztály:

kubectl get storageclass azuresan

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

NAME       PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
azuresan   san.csi.azure.com    Delete          Immediate           true                   10s

Állandó mennyiségi jogcím létrehozása

Az állandó tárolási igény (PVC) automatikusan rendelkezésre bocsát tárolót egy tárolási osztály alapján. Az alábbi lépéseket követve hozzon létre egy PVC-t az új tárolási osztály használatával.

  1. Hozzon létre egy YAML-jegyzékfájlt, például acstor-pvc.yaml.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: managedpvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: azuresan
    
  2. Alkalmazza a manifestet a PVC létrehozásához.

    kubectl apply -f acstor-pvc.yaml
    

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

    persistentvolumeclaim/managedpvc created
    

A PVC állapotát az alábbi parancs futtatásával ellenőrizheti:

kubectl describe pvc managedpvc

A PVC létrehozásakor készen áll a pod általi használatra.

Pod telepítése és állandó kötet hozzácsatolása

Hozzon létre egy podot rugalmas I/O-teszterrel (fio) a teljesítményméréshez és a számítási feladatok szimulációhoz, és adja meg az állandó kötet csatlakoztatási útvonalát. A(z) claimName esetén használja azt a névértéket, amelyet a PVC létrehozásakor használt.

  1. Hozzon létre egy YAML-jegyzékfájlt, például acstor-pod.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: fiopod
    spec:
      containers:
        - name: fio
          image: mayadata/fio
          args: ["sleep", "1000000"]
          volumeMounts:
            - mountPath: "/volume"
              name: iscsi-volume
      volumes:
        - name: iscsi-volume
          persistentVolumeClaim:
            claimName: managedpvc
    
  2. Alkalmazza a manifesztumot a pod üzembe helyezéséhez.

    kubectl apply -f acstor-pod.yaml
    

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

    pod/fiopod created
    
  3. Ellenőrizze, hogy a pod fut-e, és hogy a PVC meg van-e kötve:

    kubectl describe pod fiopod
    kubectl describe pvc managedpvc
    
  4. Ellenőrizze a fio-tesztelést az aktuális állapot megtekintéséhez:

    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
    

Most már rendelkezik egy podgal, amely rugalmas SAN-t használ a tároláshoz.

Rugalmas SAN-kötet statikus kiépítése

Előre létrehozhatja a kötetet az Elastic SAN-ban, és statikus PV-ként jelenítheti meg a Kubernetes számára. Az Elastic SAN és a kötetcsoport létrehozásához használja a Tárolóosztály létrehozása előre kiosztott rugalmas SAN és kötetcsoport számára című témakörben leírt lépéseket. Ezeket a lépéseket az Azure Portalon is végrehajthatja az Elastic SAN szolgáltatáspanel használatával.

Alapértelmezett rugalmas SAN-tárolóosztály létrehozása

Az alábbi YAML-jegyzék használatával hozzon létre egy alapértelmezett rugalmas SAN-tárolási osztályt:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azuresan
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

Alkalmazza a jegyzékfájlt a tárolási osztály létrehozásához:

kubectl apply -f storageclass.yaml

Ellenőrizze a tárolási osztályt:

kubectl get storageclass azuresan

Rugalmas SAN-kötet létrehozása

az elastic-san volume create -g <node-resource-group> -e <san-name> -v <volume-group-name> -n <volume-name> --size-gib 5

Jegyezze fel a rugalmas SAN-kötet Azure Resource Manager (ARM) azonosítóját. Használja az volumeHandle értékhez az állandó kötet YAML fájlban.

Kérje le az iSCSI minősített nevét (IQN) és targetPortal a rugalmas SAN-kötet értékeit:

az elastic-san volume show --name <volume-name> --resource-group <rg-name> --elastic-san-name <san-name>

Állandó kötet létrehozása

Hozzon létre egy YAML-jegyzékfájlt, például pv_static.yaml.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-san
  annotations:
    pv.kubernetes.io/provisioned-by: san.csi.azure.com
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: azuresan
  csi:
    driver: san.csi.azure.com
    volumeHandle: #{rg}#{san}#{vg}#{vol}
    volumeAttributes:
      # iqn: "<retrieved from pre-provisioned volume>"
      # targetPortal: "<retrieved from pre-provisioned volume>"
      numsessions: "8"

Alkalmazza a jegyzékfájlt az állandó kötet létrehozásához.

kubectl apply -f pv_static.yaml

Statikus állandó kötet jogcímének létrehozása

Hozzon létre egy YAML-jegyzékfájlt, például pvc_static.yaml.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-san
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  volumeName: pv-san
  storageClassName: azuresan

Alkalmazza a manifestet a PVC létrehozásához.

kubectl apply -f pvc_static.yaml

Statikus kötetet használó pod létrehozása

Hozzon létre egy YAML-jegyzékfájlt, például pod.yaml.

apiVersion: v1
kind: Pod
metadata:
  name: pod-san-static
spec:
  nodeSelector:
    kubernetes.io/os: linux
  containers:
    - image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
      name: nginx
      ports:
        - containerPort: 80
          protocol: TCP
      volumeMounts:
        - mountPath: /var/www
          name: iscsi-volume
  volumes:
    - name: iscsi-volume
      persistentVolumeClaim:
        claimName: pvc-san

Alkalmazza a manifestet a pod létrehozásához.

kubectl apply -f pod.yaml

Lásd még