Azure AKS üzerinde Ultra SSD Disk kullanımı

By | July 28, 2021

Stateful uygulamalarınız için yüksek  troughput ve IOPS gereksinimleriniz bulunuyorsa Azure Ultra SSD disk’lerin Kubernetes altyapılarınızda kullanabilirsiniz.  Özellikle yoğun data kullanan iş yükleriniz için bu tipteki diskleri kullanmanız performans gereksinimlerinize katkı sağlayacaktır. Ayrıca ultra SSD disklerin sağladığı dinamik olarak size değiştirebilme özelliği sayesinde node’ları  restart etmek gerekmeyecektir.
Ultra ssd diskleri AKS altyapınızda kullanabilmeniz için cluster oluşturma aşamasında bu gereksinimi konfigüre etmeniz gerekir.Data’yı yoğun kullanan iş yükleriniz için oluşturacağınız node pool’ların bu tipteki disklerden olmasını sağlayabilirsiniz. Böylelikle spesifik bir node pool içerisindeki worker node’lar belirli VM serisinde ve ultra ssd disk kullanan makinelerden oluşurlar.
Ultra SSD diskleri yeni cluster oluşturulurken yada var olan cluster’a yeni nodepool ekleyerek entegre edebilirsiniz.Burada yapılması gereken aşağıdaki komutta olduğu gibi –enable-ultra-ssd parametresini kullanmaktır. Bu işlemin ardından node’lar Azure platformu üzerinden ultra ssd diskleri provision etmeye başlayacaktır.

Yeni cluster oluşturma işlemi:

az aks create -g MyResourceGroup -n MyManagedCluster -l westeurope --node-vm-size Standard_D2s_v3 --node-count 2 --enable-ultra-ssd

Var olan cluster’a yeni nodepool ekleme işlemi

az aks nodepool add --name ultradisk --cluster-name myAKSCluster --resource-group myResourceGroup --node-vm-size Standard_D2s_v3 --zones 1 2 --node-count 3 --enable-ultra-ssd

Entegrasyon aşamasının ardından cluster’ın dinamik olarak platformdan ultrassd disk provision edebilmesi için Kubernetes tarafında storage class konfigürasyonunun yapılması gerekir. Bu konfigürasyon sonrasında iş yükleri persistent volume claim oluşturarak ultra-ssd disk provisioning işlemini yapabilirler.

Storage Class Oluşturma:

Kubernetes mimarisinde storage class’lar persistent volume’ların dinamik olarak provision olabilmelerini sağlayan tanımlamayı içerirler. Azure tarafında managed disk ve Azure file share gibi storage classlar da bulunur.Şİmdi burada ultra-ssd disk için yeni bir storage class oluşturarak dinamik storage provisionin işlemini ultra-ssd’lere de extend edelim.


Aşağıdaki manifest dosyası ultra-disk’e ait storage class’ın oluşturulmasını sağlayacaktır. Bu manifesti ultra-disk-storage-class.yaml olarak kaydedelim.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ultra-disk-sc
provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
volumeBindingMode: WaitForFirstConsumer # optional, but recommended if you want to wait until the pod that will use this disk is created 
parameters:
  skuname: UltraSSD_LRS
  kind: managed
  cachingMode: None
  diskIopsReadWrite: "2000"  # minimum value: 2 IOPS/GiB 
  diskMbpsReadWrite: "320"   # minimum value: 0.032/GiB

Kaydettiğimiz manifesti aşağıdaki komut ile kullanıp gerekli storage class’ı kubernetes cluster üzerinde oluşturabiliriz.

kubectl apply -f ultra-disk-storage-class.yaml

Bu işlemin tamamlanmasının ardından Kubernetes cluster yapılan isteğe bağlı olarak iş yüklerine ultra-ssd disk provision edecektir.Kubernetes mimarisinde disk provisionin işlemleri için iş yükleri persistent volume claim adında bir objeyi kullanır. Bu obje ile ihtiyaç duyulan disk tipi,size’ı ve erişim modu gibi bilgiler cluster’a iletilir. Cluster bu bilgilere göre ilgili storage class üzerinden istenilen büyüklükte diski otomatik olarak iş yüklerine bound eder.

Örnek bir persistent volume claim manifest’i aşağıdaki gibidir;

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: aks-ultra-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: ultra-disk-sc
  resources:
    requests:
      storage: 2000Gi

Yukarıdaki manifest kullanılarak persistent volume claim oluşturulduğunda cluster istenilen ölçülerde ultra-ssd bir diski ilgili node’a attach edecektir.
Bu işlemin ardından persistent volume oluşmuş ve ilgili pvc (persistent volume claim) ile entegre olmuştur. İş yükleri aşağıdaki örnekte olduğu gibi bu pvc’yi kullanarak ilgili persistent volume’u kendilerine attach edebilirler.

kind: Pod
apiVersion: v1
metadata:
  name: nginx-with-ultrassd
spec:
  containers:
  - name: nginx
    image: nginx:1.21.6-alpine
    resources:
      requests:
        cpu: 100m
        memory: 256Mi
      limits:
        cpu: 200m
        memory: 512Mi
    volumeMounts:
    - mountPath: "/mnt/ultra-ssd-disk"
      name: ultra-disk-volume
  volumes:
    - name: ultra-disk-volume
      persistentVolumeClaim:
        claimName: aks-ultra-disk

Kubernetes cluster üzerindeki iş yüklerinizin performans gereksinimlerinize bağlı olarak Azure platformu üzerinde kullanabileceğiniz farklı tipte storage opsiyonları mevcut. Bunları değerlendirirken hem performans hem de maliyet gereksinimlerinizi göz önünde bulundurmanız gerekir. Eğer yoğun data consume eden iş yükleriniz varsa ve daha çok IOPS ve throughput ihtiyacı duyuyorsanız ultra-ssd-disk seçeneğini tercih etmenizi öneririm.

Source: https://docs.microsoft.com/en-us/azure/aks/use-ultra-disks

Leave a Reply

Your email address will not be published. Required fields are marked *