Azure Kubernetes Service(AKS) içinde Azure Disk Kapsayıcı Depolama Arabirimi (CSI) sürücüsünü kullanma

Azure Diskler Kapsayıcı Depolama Arabirimi (CSI) sürücüsü, Azure Kubernetes Service (AKS) tarafından Azure Disk'in yaşam döngüsünü yönetmek için kullanılan CSI belirtim uyumlu bir sürücüdür.

CSI, Kubernetes'te kapsayıcılı iş yüklerine rastgele blok ve dosya depolama sistemlerini kullanıma sunar. AKS, CSI'yi benimseyerek ve kullanarak artık Kubernetes'te yeni depolama sistemlerini kullanıma sunma veya mevcut depolama sistemlerini geliştirme amacıyla eklentileri yazabilir, dağıtabilir ve yineleyebilir. AKS'de CSI sürücülerinin kullanılması, çekirdek Kubernetes koduna dokunmaktan ve yayın döngülerini beklemekten kaçının.

CSI sürücü desteğine sahip bir AKS kümesi oluşturmak için bkz. AKS'de CSI sürücüsünü etkinleştirme. Bu makalede Azure Disk CSI sürücü sürümü 1'in nasıl kullanılacağı açıklanmaktadır.

Not

Azure Disk CSI sürücüsü v2 (önizleme), ölçeklenebilirliği artırır ve pod yük devretme gecikmesini azaltır. Birden çok küme düğümünde ek çoğaltmaları sağlamak için paylaşılan diskleri kullanır ve pod yük devretmesinde ek çoğaltması olan bir düğümün seçildiğinden emin olmak için pod zamanlayıcıyla tümleşir. Azure Disk CSI sürücüsü v2 (önizleme) ayrıca performansa ince ayar yapabilme olanağı sağlar. Önizlemeye katılmak istiyorsanız bir istek gönderin: https://aka.ms/DiskCSIv2Preview. Bu önizleme sürümü bir hizmet düzeyi sözleşmesi olmadan sağlanır ve önizleme aşamasındayken bazen hataya neden olan değişiklikler bekleyebilirsiniz. Üretim iş yükleri için önizleme sürümü önerilmez. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Not

Ağaç içi sürücüler , çekirdek Kubernetes kodunun parçası olan geçerli depolama sürücülerini ve eklentiler olan yeni CSI sürücülerini ifade eder.

Azure Disk CSI sürücü özellikleri

Ağaç içi sürücü özelliklerine ek olarak, Azure Disk CSI sürücüsü aşağıdaki özellikleri destekler:

  • Eşzamanlı disk ekleme ve ayırma sırasında performans iyileştirmeleri
    • Ağaç içi sürücüler diskleri seri olarak ekler veya ayırırken, CSI sürücüleri diskleri toplu olarak ekler veya ayırır. Bir düğüme bağlı birden çok disk olduğunda önemli bir gelişme olur.
  • Premium SSD v1 ve v2 desteklenir.
    • PremiumV2_LRSyalnızca önbelleğe alma modunu destekler None
  • Alanlar arası yedekli depolama (ZRS) disk desteği
    • Premium_ZRS, StandardSSD_ZRS disk türleri desteklenir. ZRS diski, disk biriminin belirli bir düğümle aynı bölgede birlikte bulunması gerekmeden bölge veya bölge dışı düğümde zamanlanabilir. Hangi bölgelerin desteklendiği de dahil olmak üzere daha fazla bilgi için bkz. Yönetilen diskler için alanlar arası yedekli depolama.
  • Anlık Görüntü
  • Birim kopyası
  • Disk PV'lerini kapalı kalma süresi olmadan yeniden boyutlandırma

Not

Kullanılan VM SKU'sunun bağlı olarak, Azure Disk CSI sürücüsünün düğüm başına birim sınırı olabilir. Bazı güçlü VM'ler için (örneğin, 16 çekirdek), sınır düğüm başına 64 birimdir. VM SKU'su başına sınırı belirlemek için, sunulan her VM SKU'su için en fazla veri diski sütununu gözden geçirin. Sunulan VM SKU'larının ve ilgili ayrıntılı kapasite sınırlarının listesi için bkz. Genel amaçlı sanal makine boyutları.

Azure Diskleri ile CSI kalıcı birimleri kullanma

Kalıcı birim (PV), Kubernetes podlarıyla kullanılmak üzere sağlanan bir depolama parçasını temsil eder. Pv, bir veya birden çok pod tarafından kullanılabilir ve dinamik veya statik olarak sağlanabilir. Bu makalede, AKS kümesindeki tek bir pod tarafından kullanılmak üzere Azure disk ile dinamik olarak NASıL VM oluşturulacağı gösterilmektedir. Statik sağlama için bkz. Azure Diskleri ile statik birim oluşturma.

Kubernetes birimleri hakkında daha fazla bilgi için bkz. AKS'deki uygulamalar için depolama seçenekleri.

Yerleşik depolama sınıflarını kullanarak Azure Diskleri VM'lerini dinamik olarak oluşturma

Depolama sınıfı, bir depolama biriminin kalıcı bir birimle dinamik olarak nasıl oluşturulduğunu tanımlamak için kullanılır. Kubernetes depolama sınıfları hakkında daha fazla bilgi için bkz. Kubernetes depolama sınıfları.

AKS üzerinde Azure Disk CSI sürücüsünü kullandığınızda, Azure Disk CSI depolama sürücüsünü kullanan iki yerleşik StorageClasses daha vardır. Diğer CSI depolama sınıfları, ağaç içi varsayılan depolama sınıflarıyla birlikte kümeyle birlikte oluşturulur.

  • managed-csi: Yönetilen disk oluşturmak için Azure Standart SSD yerel olarak yedekli depolama (LRS) kullanır.
  • managed-csi-premium: Yönetilen disk oluşturmak için Azure Premium LRS kullanır.

Her iki depolama sınıfındaki geri kazanma ilkesi, ilgili BD silindiğinde temel alınan Azure Disklerinin silinmesini sağlar. Depolama sınıfları ayrıca PV'leri genişletilebilir olacak şekilde yapılandırabilir. Kalıcı birim beyanını (PVC) yeni boyutla düzenlemeniz yeterlidir.

Bu depolama sınıflarını kullanmak için, bunlara başvuran ve kullanan bir PVC ve ilgili pod oluşturun. Pvc, depolama sınıfına göre depolamayı otomatik olarak sağlamak için kullanılır. PVC, önceden oluşturulmuş depolama sınıflarından birini veya kullanıcı tanımlı bir depolama sınıfını kullanarak istenen SKU ve boyut için Azure tarafından yönetilen bir disk oluşturabilir. Pod tanımı oluşturduğunuzda, istenen depolamayı istemek için PVC belirtilir.

kubectl apply komutunu çalıştırarak örnek bir pod ve ilgili PVC oluşturun:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/pvc-azuredisk-csi.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/nginx-pod-azuredisk.yaml

Komutun çıktısı aşağıdaki örneğe benzer:

persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created

Pod çalışır durumda olduktan sonra, adlı test.txtyeni bir dosya oluşturmak için aşağıdaki komutu çalıştırın.

kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt

Diskin doğru şekilde bağlandığını doğrulamak için aşağıdaki komutu çalıştırın ve çıktıda dosyayı gördüğünüzden test.txt emin olun:

kubectl exec nginx-azuredisk -- ls /mnt/azuredisk

lost+found
outfile
test.txt

Özel depolama sınıfı oluşturma

Varsayılan depolama sınıfları en yaygın senaryolar için uygundur. Bazı durumlarda, kendi depolama sınıfınızı kendi parametrelerinizle özelleştirmek isteyebilirsiniz. Örneğin, sınıfını volumeBindingMode değiştirmek isteyebilirsiniz.

PVC oluşturulduktan hemen sonra gerçekleşmesini garanti eden bir volumeBindingMode: Immediate sınıf kullanabilirsiniz. Örneğin kullanılabilirlik alanlarını kullanırken düğüm havuzlarınız topoloji kısıtlandığında, POD'un zamanlama gereksinimleri hakkında bilgi sahibi olmadan PV'ler bağlanır veya sağlanır.

Bu senaryoyu ele almak için, PVC kullanan bir pod oluşturulana kadar bir PV'nin bağlamasını ve sağlamasını geciktiren kullanabilirsiniz volumeBindingMode: WaitForFirstConsumer. Bu şekilde, PV uyumlu olur ve pod'un zamanlama kısıtlamaları tarafından belirtilen kullanılabilirlik alanında (veya başka bir topolojide) sağlanır. Varsayılan depolama sınıfları sınıfını kullanır volumeBindingMode: WaitForFirstConsumer .

adlı sc-azuredisk-csi-waitforfirstconsumer.yamlbir dosya oluşturun ve aşağıdaki bildirimi yapıştırın. Depolama sınıfı, depolama sınıfımızla managed-csi aynıdır ancak farklı volumeBindingMode bir sınıfa sahip olur.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azuredisk-csi-waitforfirstconsumer
provisioner: disk.csi.azure.com
parameters:
  skuname: StandardSSD_LRS
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

kubectl apply komutunu çalıştırarak depolama sınıfını oluşturun ve dosyanızı sc-azuredisk-csi-waitforfirstconsumer.yaml belirtin:

kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml

Komutun çıktısı aşağıdaki örneğe benzer:

storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created

Birim anlık görüntüleri

Azure Disk CSI sürücüsü , kalıcı birimlerin anlık görüntülerinin oluşturulmasını destekler. Bu özelliğin bir parçası olarak, sürücü parametrede incremental ayarlanan değere bağlı olarak tam veya artımlı anlık görüntüler gerçekleştirebilir (varsayılan olarak doğrudur).

Aşağıdaki tabloda tüm parametrelerin ayrıntıları sağlanır.

Name Anlamı Kullanılabilir Değer Zorunlu Varsayılan değer
resourceGroup Anlık görüntüleri depolamak için kaynak grubu VAR OLAN KAYNAK GRUBU Hayır Belirtilmezse, anlık görüntü kaynak Azure Diskleriyle aynı kaynak grubunda depolanır
Artımlı Tam veya artımlı anlık görüntü alma true, false Hayır true
etiketler Azure Diskleri etiketleri Etiket biçimi: 'key1=val1,key2=val2' Hayır ""
Useragent Müşteri kullanımı ilişkilendirmesi için kullanılan kullanıcı aracısı Hayır Oluşturulan Useragent biçimlendirilmiş driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Azure Disklerinin oluşturulacağı Azure abonelik kimliğini belirtin Azure abonelik kimliği Hayır Boş değilse, resourceGroup sağlanmalıdır, incremental olarak ayarlanmalıdır false

Birim anlık görüntüsü oluşturma

Not

Devam etmeden önce uygulamanın kaynak diske veri yazmadığından emin olun.

Bu özelliğin bir örneği için kubectl apply komutuyla bir birim anlık görüntü sınıfı oluşturun:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created

Şimdi bu öğreticinin pvc-azurediskbaşında dinamik olarak oluşturduğumuz PVC'den bir birim anlık görüntüsü oluşturalım.

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created

Anlık görüntünün doğru oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın:

kubectl describe volumesnapshot azuredisk-volume-snapshot

Komutun çıkışı aşağıdaki örneğe benzer:

Name:         azuredisk-volume-snapshot
Namespace:    default
Labels:       <none>
Annotations:  API Version:  snapshot.storage.k8s.io/v1
Kind:         VolumeSnapshot
Metadata:
  Creation Timestamp:  2020-08-27T05:27:58Z
  Finalizers:
    snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
    snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
  Generation:        1
  Resource Version:  714582
  Self Link:         /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
  UID:               dd953ab5-6c24-42d4-ad4a-f33180e0ef87
Spec:
  Source:
    Persistent Volume Claim Name:  pvc-azuredisk
  Volume Snapshot Class Name:      csi-azuredisk-vsc
Status:
  Bound Volume Snapshot Content Name:  snapcontent-dd953ab5-6c24-42d4-ad4a-f33180e0ef87
  Creation Time:                       2020-08-31T05:27:59Z
  Ready To Use:                        true
  Restore Size:                        10Gi
Events:                                <none>

Birim anlık görüntüsünü temel alan yeni bir PVC oluşturma

Birim anlık görüntüsünü temel alan yeni bir PVC oluşturabilirsiniz. Önceki adımda oluşturulan anlık görüntüyü kullanın ve kullanmak için yeni bir PVC ve yeni bir pod oluşturun.

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
pod/nginx-restored created

Son olarak, aşağıdaki komutu çalıştırarak içeriği denetleyerek daha önce oluşturulan PVC'nin aynı olduğundan emin olalım:

kubectl exec nginx-restored -- ls /mnt/azuredisk

Komutun çıkışı aşağıdaki örneğe benzer:

lost+found
outfile
test.txt

Beklendiği gibi, önceden oluşturulmuş test.txt dosyamızı görmeye devam edebiliriz.

Birimleri kopyalama

Kopyalanan birim, mevcut bir Kubernetes biriminin yinelemesi olarak tanımlanır. Kubernetes'te birimleri kopyalama hakkında daha fazla bilgi için birim kopyalama ile ilgili kavramsal belgelere bakın.

Azure Diskler için CSI sürücüsü birim kopyalamayı destekler. Göstermek için, daha önce oluşturulanazuredisk-pvckopya bir birim ve bunu kullanmak için yeni bir pod oluşturun.

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

persistentvolumeclaim/pvc-azuredisk-cloning created
pod/nginx-restored-cloning created

Aşağıdaki komutu çalıştırıp dosyanın test.txt oluşturulduğunu onaylayarak kopyalanan birimin içeriğini doğrulayabilirsiniz:

kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk

Komutun çıkışı aşağıdaki örneğe benzer:

lost+found
outfile
test.txt

Kalıcı birimi kapalı kalma süresi olmadan yeniden boyutlandırma

PVC için daha büyük bir hacim isteyebilirsiniz. PVC nesnesini düzenleyin ve daha büyük bir boyut belirtin. Bu değişiklik, PV'yi destekleyen temel birimin genişlemesini tetikler.

Not

Talebi karşılamak için hiçbir zaman yeni bir PV oluşturulmaz. Bunun yerine, mevcut bir birim yeniden boyutlandırılır.

AKS'de managed-csi yerleşik depolama sınıfı genişletmeyi zaten destekler, bu nedenle bu depolama sınıfıyla daha önce oluşturulan PVC'yi kullanın. PVC 10 Gi kalıcı birim istedi. Aşağıdaki komutu çalıştırarak onaylayabilirsiniz:

kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk

Komutun çıkışı aşağıdaki örneğe benzer:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        9.8G   42M  9.8G   1% /mnt/azuredisk

Aşağıdaki komutu çalıştıran alanı artırarak spec.resources.requests.storage PVC'yi genişletin:

kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'

Not

Kalıcı birimleri küçültme şu anda desteklenmiyor. Mevcut BIR PVC'ye geçerli boyuttan daha küçük bir düzeltme eki uygulama denemesi aşağıdaki hata iletisine yol açar: The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

Komutun çıkışı aşağıdaki örneğe benzer:

persistentvolumeclaim/pvc-azuredisk patched

Birim boyutunun arttığını onaylamak için aşağıdaki komutu çalıştırın:

kubectl get pv

Komutun çıkışı aşağıdaki örneğe benzer:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE
pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            Delete           Bound    default/pvc-azuredisk                     managed-csi             2d2h
(...)

Birkaç dakika sonra PVC'nin boyutunu onaylamak için aşağıdaki komutları çalıştırın:

kubectl get pvc pvc-azuredisk

Komutun çıkışı aşağıdaki örneğe benzer:

NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-azuredisk   Bound    pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            managed-csi    2d2h

Pod içindeki diskin boyutunu onaylamak için aşağıdaki komutu çalıştırın:

kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk

Komutun çıkışı aşağıdaki örneğe benzer:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc         15G   46M   15G   1% /mnt/azuredisk

İsteğe bağlı ani artış

İsteğe bağlı disk seri aktarım modeli, ihtiyaçları geçerli kapasiteyi aştığında disk seri aktarımlarına olanak tanır. Bu model, disk her patladığı zaman ek ücret oluşturur. İsteğe bağlı ani artış yalnızca 512 GiB'den büyük premium SSD'ler için kullanılabilir. Disk başına sağlanan premium SSD'ler ve aktarım hızı hakkında daha fazla bilgi için bkz. Premium SSD boyutu. Alternatif olarak, kredi tabanlı ani artış, diskin yalnızca kredi demetinde birikmiş ani krediler varsa patladığı yerdir. Kredi tabanlı ani artış, disk patladığında ek ücret oluşturmaz. Kredi tabanlı ani artış yalnızca premium SSD'ler 512 GiB ve daha küçük, standart SSD'ler 1024 GiB ve daha küçük için kullanılabilir. İsteğe bağlı ani artış hakkında daha fazla bilgi için bkz. İsteğe bağlı ani artış.

Önemli

Varsayılan managed-csi-premium depolama sınıfında isteğe bağlı ani artış devre dışıdır ve kredi tabanlı seri artış kullanılır. Varsayılan managed-csi-premium depolama sınıfını temel alan kalıcı bir birim talebi tarafından dinamik olarak oluşturulan tüm premium SSD'ler de isteğe bağlı ani artış devre dışı bırakılır.

İsteğe bağlı seri aktarım etkin bir premium SSD kalıcı birimi oluşturmak için, aşağıdaki YAML şablonunda gösterildiği gibi enableBursting parametresi olarak ayarlanmış true yeni bir depolama sınıfı oluşturabilirsiniz. İsteğe bağlı ani artışları etkinleştirme hakkında daha fazla bilgi için bkz. İsteğe bağlı ani artış. İsteğe bağlı seri aktarım etkinken kendi depolama sınıfınızı oluşturma hakkında daha fazla bilgi için bkz. Hızla Artırılabilir Yönetilen CSI Premium Depolama Sınıfı Oluşturma.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
  skuname: Premium_LRS
  enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Windows kapsayıcıları

Azure Disk CSI sürücüsü, Windows düğümlerini ve kapsayıcılarını destekler. Windows kapsayıcılarını kullanmak istiyorsanız Windows kapsayıcıları hızlı başlangıcını izleyerek bir Windows düğüm havuzu ekleyin.

Bir Windows düğüm havuzunuz olduktan sonra gibi yerleşik depolama sınıflarını managed-csikullanabilirsiniz. Aşağıdaki kubectl apply komutunu çalıştırarak zaman damgalarını dosyaya data.txt kaydeden örnek bir Windows tabanlı durum bilgisi kümesi dağıtabilirsiniz:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml

Komutun çıkışı aşağıdaki örneğe benzer:

statefulset.apps/busybox-azuredisk created

Birimin içeriğini doğrulamak için aşağıdaki komutu çalıştırın:

kubectl exec -it busybox-azuredisk-0 -- cat c:\\mnt\\azuredisk\\data.txt # on Linux/MacOS Bash
kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Windows Powershell/CMD

Komutun çıkışı aşağıdaki örneğe benzer:

2020-08-27 08:13:41Z
2020-08-27 08:13:42Z
2020-08-27 08:13:44Z
(...)

Sonraki adımlar