Yerel NVMe ile Azure Container Storage kullanma

Azure Container Storage , kapsayıcılar için yerel olarak oluşturulmuş bulut tabanlı bir birim yönetimi, dağıtımı ve düzenleme hizmetidir. Bu makalede, Azure Container Storage'ı Kubernetes iş yükleriniz için arka uç depolama alanı olarak yerel NVMe diskini kullanacak şekilde yapılandırma işlemi gösterilmektedir. NVMe, depolama ve CPU arasında yüksek hızlı veri aktarımı için tasarlanmıştır ve yüksek IOPS ve aktarım hızı sağlar.

Önemli

Bu makale, yerel NVMe disk ve Azure Elastic SAN'ı destekleyen Azure Container Storage (sürüm 2.x.x) için geçerlidir. Önceki sürümlerle ilgili ayrıntılar için bkz. Azure Container Storage (sürüm 1.x.x) belgeleri.

Yerel NVMe nedir?

Uygulamanızın milisaniyenin altında depolama gecikme süresine ve yüksek aktarım hızına ihtiyacı olduğunda, performans gereksinimlerinizi karşılamak için Azure Container Storage ile yerel NVMe disklerini kullanabilirsiniz. Kısa ömürlü, disklerin AKS kümesini barındıran yerel sanal makineye (VM) dağıtıldığını ve Azure depolama hizmetine kaydedilmediğini gösterir. VM'nizi durdurur/serbest bırakırsanız bu disklerdeki veriler kaybolur. Yerel NVMe diskleri , depolama için iyileştirilmiş VM'ler gibi belirli Azure VM ailelerinde sunulur.

Varsayılan olarak, Azure Container Storage yerel NVMe diskleri kullanılırken genel kısa ömürlü birimler oluşturur. Kalıcı birim talepleri gerektiren kullanım örnekleri için, ek açıklamayı localdisk.csi.acstor.io/accept-ephemeral-storage: "true" kalıcı birim talebi şablonunuza ekleyebilirsiniz.

Veri şeritleme

Performansı en üst düzeye çıkarmak için Azure Container Storage, tüm kullanılabilir yerel NVMe disklerindeki verileri vm başına ayrı ayrı otomatik olarak şeritler. Şeritleme, verilerin küçük öbeklere bölündüğü ve aynı anda birden çok diske eşit olarak yazıldığı ve bu da aktarım hızını artıran ve genel G/Ç performansını geliştiren bir tekniktir. Bu davranış varsayılan olarak etkindir ve devre dışı bırakılamaz.

Bu şeritlenmiş cihazlarda performans toplandığı için, daha fazla NVMe sürücü sunan daha büyük VM boyutları, önemli ölçüde daha yüksek IOPS ve bant genişliği sağlayabilir. Daha büyük bir VM ailesi seçmek, iş yüklerinizin daha fazla yapılandırma olmadan ek toplama aktarım hızından yararlanmasını sağlar.

Örneğin Lsv3 serisi , Standard_L8s_v3 (yaklaşık 400.000 IOPS ve 2.000 MB/sn) üzerindeki tek bir 1,92 TB NVMe sürücüsünden Standard_L80s_v3 üzerinde 10 NVMe sürücüsüne (yaklaşık 3,8 milyon IOPS ve 20.000 MB/sn) kadar ölçeklendirilir.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Bu makale, Azure CLI sürüm v2.83.0 veya üzerini gerektirir. Daha fazla bilgi için bkz. Azure CLI'yi yükleme. Sorunlar oluşursa aks-preview gibi uzantıları devre dışı bırakın. Uzantıları gerektiği gibi yükleyin veya güncelleştirin:

    • az extension add --upgrade --name k8s-extension
    • az extension add --upgrade --name elastic-san (Yalnızca elastik SAN)
  • Kubernetes komut satırı istemcisine ihtiyacınız vardır. kubectl Azure Cloud Shell kullanıyorsanız zaten yüklüdür. komutunu çalıştırarak az aks install-cli yerel olarak yükleyebilirsiniz.

  • Hedef bölgenizin Azure Container Storage bölgelerinde desteklenip desteklenmediğini denetleyin.

Yerel NVMe'yi destekleyen bir VM türü seçin

Yerel NVMe diskleri yalnızca depolama için iyileştirilmiş VM'ler veya GPU hızlandırılmış VM'ler gibi belirli vm türlerinde kullanılabilir. Yerel NVMe kapasitesi kullanmayı planlıyorsanız bu VM boyutlarından birini seçin.

Düğüm havuzunuzda kullanılan VM türünü almak için aşağıdaki komutu çalıştırın. ve <resource group> değerlerini kendi değerlerinizle değiştirin<cluster name>. veya PoolNameiçin VmSize değer sağlamanız gerekmez, bu nedenle sorguyu burada gösterildiği gibi tutun.

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

Aşağıdaki çıkış bir örnektir.

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

Not

Azure Container Storage'da (sürüm 2.x.x), artık üçten az düğüme sahip kümeleri kullanabilirsiniz.

Geçici işletim sistemi disklerinin yanı sıra tek bir yerel NVMe diskine sahip VM boyutlarının kullanıldığı senaryolarda, yerel NVMe diski işletim sistemi için tahsis edilir ve Azure Container Storage'ın kullanımına kapasite kalmaz. Yüksek performanslı veri işleme için yerel NVMe disklerinin en iyi performansı ve kullanılabilirliğini sağlamak için aşağıdakileri yapmanızı öneririz:

  • İki veya daha fazla yerel NVMe diski olan VM boyutlarını seçin.
  • İşletim sistemi için yönetilen diskleri kullanarak tüm yerel NVMe disklerini veri işleme için boşaltın.

Daha fazla bilgi için bkz. Azure Kubernetes Service'te kısa ömürlü NVMe veri diskleri için en iyi yöntemler.

Yerel NVMe için depolama sınıfı oluşturma

Henüz Azure Container Storage yüklü değilse yükleyin.

Azure Container Storage (sürüm 2.x.x), yerel NVMe'i standart bir Kubernetes depolama sınıfı olarak sunar. Depolama sınıfını local-csi küme başına bir kez oluşturun ve hem genel kısa ömürlü birimler hem de kalıcı birim talepleri için yeniden kullanın.

  1. gibi storageclass.yamlbir YAML bildirim dosyası oluşturmak için sık kullandığınız metin düzenleyiciyi kullanın ve ardından aşağıdaki belirtimi yapıştırın.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-csi
    provisioner: localdisk.csi.acstor.io
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    
  2. Depolama sınıfını oluşturmak için bildirimi uygulayın.

    kubectl apply -f storageclass.yaml
    

Alternatif olarak, Terraform kullanarak depolama sınıfını oluşturabilirsiniz.

  1. Aşağıdaki main.tfgibi bir yapılandırma oluşturarak depolama sınıfını yönetmek için Terraform kullanın. Ortamınız için gerektiğinde sağlayıcı sürümünü veya kubeconfig yolunu güncelleştirin.

    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. Depolama sınıfını oluşturmak için yapılandırmayı başlatın, gözden geçirin ve uygulayın.

    terraform init
    terraform plan
    terraform apply
    

Depolama sınıfını doğrulama

Depolama sınıfının oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın:

kubectl get storageclass local-csi

Aşağıdakine benzer bir çıktı görmeniz gerekir:

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

Genel kısa ömürlü birimler oluştur ve ekle

Azure Container Storage kullanarak genel kısa ömürlü birim oluşturmak ve eklemek için bu adımları izleyin. Devam etmeden önce Azure Container Storage'ın yüklü olduğundan ve local-csi depolama sınıfının mevcut olduğundan emin olun.

Genel amaçlı kısa ömürlü birim içeren bir pod dağıtın

Genel geçici birim kullanan ölçütleme ve iş yükü simülasyonu için Fio (Esnek G/Ç Testleyicisi) kullanarak pod oluşturun.

  1. Gibi code fiopod.yamlbir YAML bildirim dosyası oluşturmak için sık kullandığınız metin düzenleyiciyi kullanın.

  2. Aşağıdaki kodu yapıştırın ve dosyayı kaydedin.

    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. Podu dağıtmak için YAML bildirim dosyasını uygulayın.

    kubectl apply -f fiopod.yaml
    

Dağıtımı doğrulayın ve benchmark çalıştırmalarını gerçekleştirin

Pod'un çalışıp çalışmadığını denetleyin:

kubectl get pod fiopod

Pod'u Çalışır durumda görmeniz gerekir. Çalıştırdıktan sonra bir Fio karşılaştırma testi yürütebilirsiniz:

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

Geçici depolama anotasyonu ile kalıcı birimler oluşturma ve ekleme

Kısa ömürlü depolama için genel kısa ömürlü birimler önerilir ancak Azure Container Storage, mevcut iş yükleriyle uyumluluk için gerektiğinde kısa ömürlü depolamaya sahip kalıcı birimleri de destekler.

Not

Azure Container Storage (sürüm 2.x.x), önceki localdisk.csi.acstor.io/accept-ephemeral-storage: "true" yerine yeni ek açıklamayı acstor.azure.com/accept-ephemeral-storage: "true" kullanır.

Kullanan iş yüklerini dağıtmadan önce Azure Container Storage'ın yüklü olduğundan ve local-csi daha önce oluşturduğunuz depolama sınıfının kullanılabilir olduğundan emin olun.

Kalıcı birimlerle durum bilgisi olan bir küme dağıtma

Pod yaşam döngüsüne bağlı olmayan kalıcı hacim talepleri kullanmanız gerekiyorsa, açıklama localdisk.csi.acstor.io/accept-ephemeral-storage: "true" eklemeniz gerekir. Birimdeki veriler düğüm için yereldir ve düğüm silinirse veya pod başka bir düğüme taşınırsa kaybolur.

Kısa ömürlü depolama ek açıklamasına sahip kalıcı birimler kullanan örnek bir durumlu set aşağıda verilmiştir:

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

Kalıcı birimlerle durum bilgisi olan kümeyi oluşturmak için bu YAML'yi kaydedin ve uygulayın:

kubectl apply -f statefulset-pvc.yaml

Depolamayı yönet

Bu bölümde, düğüm kısa ömürlü disk kapasitesini denetlemeyi, depolama kapasitesini genişletmeyi ve depolama kaynaklarını silmeyi öğreneceksiniz.

Düğümün kısa ömürlü disk kapasitesini kontrol etme

Geçici bir kapasite tek bir düğümde tahsis edilir. Geçici birimlerinizin boyutunu yapılandırırken, boyut tek düğümdeki geçici diskin kullanılabilir kapasitesinden daha küçük olmalıdır.

localdisk.csi.acstor.io için bir StorageClass'ın mevcut olduğundan emin olun. Her düğüm için kısa ömürlü diskin kullanılabilir kapasitesini denetlemek için aşağıdaki komutu çalıştırın.

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"

Bu örneğe benzer bir çıktı görmeniz gerekir:

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

Eğer boş kapasite çıktısıyla karşılaşırsanız, bir localdisk.csi.acstor.io StorageClass'ının var olduğunu onaylayın. Kaynak csistoragecapacities.storage.k8s.io, yalnızca localdisk.csi.acstor.io için bir StorageClass oluşturulduktan sonra üretilir.

Depolama kapasitesini genişletme

Kısa ömürlü disk depolama aks kümesi düğümlerinde yerel kaynakları kullandığından, depolama kapasitesini genişletmek için kümeye düğüm eklenmesi gerekir.

Kümenize düğüm eklemek için aşağıdaki komutu çalıştırın. , <cluster-name>, <nodepool-name>ve <resource-group> değerlerini değerlerinizle değiştirin<new-count>.

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

Depolama kaynaklarını silme

Depolama kaynaklarını temizlemek için önce tüm PersistentVolumeClaims ve/veya PersistentVolumes değerlerini silmeniz gerekir. Azure Container Storage StorageClass'ı sildiğinizde, mevcut PersistentVolumes/PersistentVolumeClaims otomatik olarak kaldırılmaz.

adlı local-csibir depolama sınıfını silmek için aşağıdaki komutu çalıştırın:

kubectl delete storageclass local-csi

Ayrıca bkz.