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