Aracılığıyla paylaş


Azure Kubernetes Service'te (AKS) Azure Disk Container Depolama Arabirimi (CSI) sürücüsünü kullanma

Azure Diskler Kapsayıcısı 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 belirtimi uyumlu bir sürücüdür.

CSI, Kubernetes'te kapsayıcılı iş yüklerine rastgele blok ve dosya depolama sistemlerinin kullanıma sunar. AKS, CSI'yi benimseyerek ve kullanarak artık Kubernetes'te yeni depolama sistemlerini kullanıma sunma veya mevcut depolama sistemlerini iyileştirme amacıyla eklentiler 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ıyor.

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ü 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 gecikme süresini 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ısıyla tümleşir. Azure Disk CSI sürücüsü v2 (önizleme) ayrıca performansta 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 zaman zaman 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 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ı kısıtlaması olmadan 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), düğüm başına sınır 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 listesi ve bunların ilgili ayrıntılı kapasite sınırları için bkz . Genel amaçlı sanal makine boyutları.

Azure Diskler 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 sanal makinelerini 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. Birden çok kullanılabilirlik alanına dağıtılan Azure Kubernetes Service (AKS) kümelerinde Kubernetes sürüm 1.29'dan itibaren geçerli olan bu depolama sınıfı, yönetilen diskler oluşturmak için Azure Standart SSD alanlar arası yedekli depolama (ZRS) kullanır.
  • managed-csi-premium: Yönetilen disk oluşturmak için Azure Premium LRS kullanır. Birden çok kullanılabilirlik alanına dağıtılan Azure Kubernetes Service (AKS) kümelerinde Kubernetes sürüm 1.29'dan itibaren geçerli olan bu depolama sınıfı, yönetilen diskler oluşturmak için Azure Premium alanlar arası yedekli depolama (ZRS) kullanır.

Her iki depolama sınıfındaki geri kazanma ilkesi, ilgili PV 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, istenen SKU ve boyut için Azure tarafından yönetilen bir disk oluşturmak için önceden oluşturulmuş depolama sınıflarından birini veya kullanıcı tanımlı bir depolama sınıfını kullanabilir. 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 çıkışı aşağıdaki örneğe benzer:

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

Pod çalışır durumda olduğunda, 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ı çoğu yaygın senaryo için uygundur. Bazı durumlarda kendi depolama sınıfınızın kendi parametrelerinizle özelleştirilmesini 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 topolojisi kısıtlandığında, podun zamanlama gereksinimleri hakkında bilgi sahibi olmadan sanal makineler bağlanır veya sağlanır.

Bu senaryoyu ele almak için, PVC kullanan bir pod oluşturulana kadar PV'nin bağlanmasını ve sağlanmasını geciktiren kullanabilirsiniz volumeBindingMode: WaitForFirstConsumer. Bu şekilde BD 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 çıkışı 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ü parametresinde 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 parametreler için ayrıntılar sağlanır.

Veri Akışı Adı Anlamı Kullanılabilir Değer Zorunlu Default value
resourceGroup Anlık görüntü görüntülerini 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
tags 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 sağlanmalıdır resourceGroup , 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 öğreticininpvc-azuredisk başı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 ile 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, daha önce oluşturulmuş test.txt dosyamızı görmeye devam edebiliriz.

Birimleri kopyalama

Kopyalanan birim, mevcut kubernetes biriminin bir kopyası olarak tanımlanır. Kubernetes'te birimleri kopyalama hakkında daha fazla bilgi için birim kopyalamaya yönelik kavramsal belgelere bakın.

Azure Diskler için CSI sürücüsü birim kopyalamayı destekler. Göstermek için, daha önce oluşturulanazuredisk-pvc kopyalanmış 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

Kopyalanan birimin içeriğini doğrulamak için aşağıdaki komutu çalıştırabilir ve dosyanın test.txt oluşturulduğunu onaylayabilirsiniz:

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

Bir 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 BD oluşturulmaz. Bunun yerine, mevcut bir birim yeniden boyutlandırılır.

AKS'de managed-csi yerleşik depolama sınıfı zaten genişletmeyi destekler, bu nedenle bu depolama sınıfıyla daha önce oluşturulan PVC'yi kullanın. PVC, 10 Gi kalıcı bir 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ı birimlerin küçültülmesi şu anda desteklenmemektedir. Geçerli boyuttan daha küçük boyutlu mevcut bir PVC'ye 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

Podun 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 çekim modeli, ihtiyaçları geçerli kapasitesini aştığında disk serilerinin yapılmasını sağlar. Bu model, disk her patladığında 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ş olan ani krediler olduğunda patladığı yerdir. Kredi tabanlı seri artış, disk patladığında ek ücret oluşturmaz. Kredi tabanlı seri artış yalnızca premium SSD'ler 512 GiB ve daha küçük, standart SSD'ler 1024 GiB ve daha küçük sürümlerde kullanılabilir. İsteğe bağlı 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ı seri 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ı ani artış 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ı veri artışlarını etkinleştirme hakkında daha fazla bilgi için bkz . İsteğe bağlı ani artış. İsteğe bağlı ani artış 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 düğüm havuzu eklemek için Windows kapsayıcıları hızlı başlangıcını izleyin.

Bir Windows düğüm havuzunuz olduktan sonra, artık gibi managed-csiyerleşik depolama sınıflarını kullanabilirsiniz. Aşağıdaki kubectl apply komutunu çalıştırarak zaman damgalarını dosyaya data.txt kaydeden örnek bir Windows tabanlı durum bilgisi olan küme 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

  • Azure Dosyalar için CSI sürücüsünü kullanmayı öğrenmek için bkz. CSI sürücüsüyle Azure Dosyalar kullanma.
  • Azure Blob depolama için CSI sürücüsünü kullanmayı öğrenmek için bkz . CSI sürücüsüyle Azure Blob depolamayı kullanma.
  • Depolamanın en iyi yöntemleri hakkında daha fazla bilgi için bkz . Azure Kubernetes Service'te depolama ve yedekleme için en iyi yöntemler.
  • Disk tabanlı depolama çözümleri hakkında daha fazla bilgi için bkz . AKS'de disk tabanlı çözümler.