Azure Kubernetes Service'te (AKS) Azure Dosyalar Kapsayıcı Depolama Arabirimi (CSI) sürücüsünü kullanma

Azure Dosyalar Container Depolama Arabirimi (CSI) sürücüsü, Azure Kubernetes Service (AKS) tarafından Azure dosya paylaşımlarının 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üleri desteğine sahip bir AKS kümesi oluşturmak için bkz . AKS'de CSI sürücülerini etkinleştirme.

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.

CSI sürücüsünün yeni özelliklerini Azure Dosyalar

özgün ağaç içi sürücü özelliklerine ek olarak, Azure Dosyalar CSI sürücüsü aşağıdaki yeni özellikleri destekler:

  • Ağ Dosya Sistemi (NFS) sürüm 4.1
  • Özel uç nokta
  • Paralel olarak büyük dosya paylaşımları bağlaması oluşturma.

Azure Dosyalar ile kalıcı birim 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. Birden çok pod aynı depolama birimine eş zamanlı erişime ihtiyaç duyuyorsa, Sunucu İleti Bloğu (SMB) veya NFS protokollerini kullanarak bağlanmak için Azure Dosyalar kullanabilirsiniz. Bu makalede, BIR AKS kümesinde birden çok pod tarafından kullanılmak üzere dinamik olarak bir Azure Dosyalar paylaşımının nasıl oluşturulacağı gösterilmektedir. Statik sağlama için bkz. Azure Dosyalar paylaşımıyla el ile birim oluşturma ve kullanma.

Azure Dosyalar paylaşımları ile düğüme kaç tane bağlanabileceğiyle ilgili bir sınır yoktur.

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 Dosyalar PC'leri dinamik olarak oluşturma

Depolama sınıfı, Azure dosya paylaşımının nasıl oluşturulduğunu tanımlamak için kullanılır. Azure dosya paylaşımını tutmak üzere depolama sınıfıyla kullanılmak üzere düğüm kaynak grubunda otomatik olarak bir depolama hesabı oluşturulur. skuName için aşağıdaki Azure depolama yedekliliği SKU'larından birini seçin:

  • Standard_LRS: Standart yerel olarak yedekli depolama
  • Standard_GRS: Standart coğrafi olarak yedekli depolama
  • Standard_ZRS: Standart alanlar arası yedekli depolama
  • Standard_RAGRS: Standart okuma erişimli coğrafi olarak yedekli depolama
  • Standard_RAGZRS: Standart okuma erişimli coğrafi alanlar arası yedekli depolama
  • Premium_LRS: Premium yerel olarak yedekli depolama
  • Premium_ZRS: Premium alanlar arası yedekli depolama

Not

Azure Dosyalar, Azure Premium dosya paylaşımlarını destekler. En düşük dosya paylaşımı kapasitesi 100 GiB'dir. Premium dosya paylaşımları G/Ç yoğunluklu iş yükleri için daha yüksek performans ve düşük gecikme süreli disk desteği sunduğundan Standart dosya paylaşımları yerine Azure Premium dosya paylaşımlarını kullanmanızı öneririz.

AKS üzerinde depolama CSI sürücüleri kullandığınızda, Azure Dosyalar CSI depolama sürücülerini 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.

  • azurefile-csi: Azure dosya paylaşımı oluşturmak için Azure Standard Depolama kullanır.
  • azurefile-csi-premium: Azure dosya paylaşımı oluşturmak için Azure Premium Depolama kullanır.

Her iki depolama sınıfındaki geri kazanma ilkesi, ilgili PV silindiğinde temel alınan Azure dosya paylaşımının silinmesini sağlar. Depolama sınıfları da dosya paylaşımlarını genişletilebilir olacak şekilde yapılandırabilir, yalnızca kalıcı birim talebi (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 dosya paylaşımı 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 komutlarını çalıştırarak geçerli tarihi bir içine yazdıran örnek bir outfile PVC ve pod oluşturun:

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

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

persistentvolumeclaim/pvc-azurefile created
pod/nginx-azurefile created

Pod çalışır durumda olduktan sonra, aşağıdaki komutu çalıştırarak ve çıkışın öğesini içerdiğini outfiledoğrulayarak dosya paylaşımının doğru şekilde bağlandığını doğrulayabilirsiniz:

kubectl exec nginx-azurefile -- ls -l /mnt/azurefile

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

total 29
-rwxrwxrwx 1 root root 29348 Aug 31 21:59 outfile

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

Varsayılan depolama sınıfları en yaygın senaryolara uygundur, ancak tümüne uygun değildir. Bazı durumlarda kendi depolama sınıfınızın kendi parametrelerinizle özelleştirilmesini isteyebilirsiniz. Örneğin, dosya paylaşımını mountOptions yapılandırmak için aşağıdaki bildirimi kullanın.

FileMode ve dirMode için varsayılan değer Kubernetes'e bağlı dosya paylaşımları için 0777'dir. Depolama sınıfı nesnesinde farklı bağlama seçeneklerini belirtebilirsiniz.

adlı azure-file-sc.yamlbir dosya oluşturun ve aşağıdaki örnek bildirimi yapıştırın:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0640
  - file_mode=0640
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict # https://linux.die.net/man/8/mount.cifs
  - nosharesock
parameters:
  skuName: Standard_LRS

kubectl apply komutunu çalıştırarak depolama sınıfını oluşturun:

kubectl apply -f azure-file-sc.yaml

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

storageclass.storage.k8s.io/my-azurefile created

Azure Dosyalar CSI sürücüsü, kalıcı birimlerin ve temel alınan dosya paylaşımlarının anlık görüntülerinin oluşturulmasını destekler.

Not

Bu sürücü yalnızca anlık görüntü oluşturmayı destekler, anlık görüntüden geri yükleme bu sürücü tarafından desteklenmez. Anlık görüntüler Azure portalından veya CLI'dan geri yüklenebilir. Anlık görüntü oluşturma ve geri yükleme hakkında daha fazla bilgi için bkz. Azure Dosyalar için paylaşım anlık görüntülerine genel bakış.

kubectl apply komutuyla birim anlık görüntüsü sınıfı oluşturun:

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

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

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

Bu öğreticininpvc-azurefile başında dinamik olarak oluşturduğumuz PVC'den bir birim anlık görüntüsü oluşturun.

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

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

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

Aşağıdaki komutu çalıştırarak anlık görüntünün doğru oluşturulduğunu doğrulayın:

kubectl describe volumesnapshot azurefile-volume-snapshot

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

Name:         azurefile-volume-snapshot
Namespace:    default
Labels:       <none>
Annotations:  API Version:  snapshot.storage.k8s.io/v1beta1
Kind:         VolumeSnapshot
Metadata:
  Creation Timestamp:  2020-08-27T22:37:41Z
  Finalizers:
    snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
    snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
  Generation:        1
  Resource Version:  955091
  Self Link:         /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot
  UID:               c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
Spec:
  Source:
    Persistent Volume Claim Name:  pvc-azurefile
  Volume Snapshot Class Name:      csi-azurefile-vsc
Status:
  Bound Volume Snapshot Content Name:  snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
  Ready To Use:                        false
Events:                                <none>

Kalıcı birimi 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.

Kalıcı birimlerin küçültülmesi şu anda desteklenmemektedir.

AKS'de azurefile-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, 100 GiB dosya paylaşımı istedi. Bunu şu şekilde çalıştırarak doğrulayabiliriz:

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

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

Filesystem                                                                                Size  Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  100G  128K  100G   1% /mnt/azurefile

Alanı artırarak PVC'yi spec.resources.requests.storage genişletin:

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

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

persistentvolumeclaim/pvc-azurefile patched

Hem PVC'nin hem de pod içindeki dosya sisteminin yeni boyutu gösterdiğini doğrulayın:

kubectl get pvc pvc-azurefile
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
pvc-azurefile   Bound    pvc-5e5d9980-da38-492b-8581-17e3cad01770   200Gi      RWX            azurefile-csi   64m

kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
Filesystem                                                                                Size  Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  200G  128K  200G   1% /mnt/azurefile

Özel Azure Dosyalar depolama (özel uç nokta) ile kalıcı birim kullanma

Azure Dosyalar kaynaklarınız özel bir uç noktayla korunuyorsa kendi depolama sınıfınızı oluşturmanız gerekir. ÖZEL uç nokta IP adresini bağlantı dizesi FQDN'sine çözümlemek için DNS ayarlarınızı yapılandırdığınızdan emin olun. Aşağıdaki parametreleri özelleştirin:

  • resourceGroup: Depolama hesabının dağıtıldığı kaynak grubu.
  • storageAccount: Depolama hesabı adı.
  • server: Depolama hesabının özel uç noktasının FQDN'sini.

adlı private-azure-file-sc.yamlbir dosya oluşturun ve aşağıdaki örnek bildirimi dosyaya yapıştırın. ve <storageAccountName>değerlerini <resourceGroup> değiştirin.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: private-azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  resourceGroup: <resourceGroup>
  storageAccount: <storageAccountName>
  server: <storageAccountName>.file.core.windows.net
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduce probability of reconnect race
  - actimeo=30  # reduce latency for metadata-heavy workload

komutunu kullanarak depolama sınıfını kubectl apply oluşturun:

kubectl apply -f private-azure-file-sc.yaml

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

storageclass.storage.k8s.io/private-azurefile-csi created

adlı private-pvc.yamlbir dosya oluşturun ve aşağıdaki örnek bildirimi dosyaya yapıştırın:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: private-azurefile-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: private-azurefile-csi
  resources:
    requests:
      storage: 100Gi

kubectl apply komutunu kullanarak PVC'yi oluşturun:

kubectl apply -f private-pvc.yaml

NFS dosya paylaşımları

Azure Dosyalar NFS v4.1 protokollerini destekler. Azure Dosyalar için NFS sürüm 4.1 desteği, yüksek oranda kullanılabilir ve yüksek oranda dayanıklı dağıtılmış dayanıklı bir depolama platformu üzerinde oluşturulmuş bir hizmet olarak tam olarak yönetilen bir NFS dosya sistemi sağlar.

Bu seçenek, yerinde veri güncelleştirmeleri içeren rastgele erişim iş yükleri için iyileştirilmiştir ve tam POSIX dosya sistemi desteği sağlar. Bu bölümde, BIR AKS kümesinde Azure Dosya CSI sürücüsüyle NFS paylaşımlarının nasıl kullanılacağı gösterilmektedir.

Önkoşullar

  • AKS kümesi Denetim düzlemi kimliğiniz (AKS kümenizin adı) VNet ve NetworkSecurityGroup'ta Katkıda Bulunan rolüne eklenir.
  • AKS kümenizin hizmet sorumlusu veya yönetilen hizmet kimliği (MSI), depolama hesabına Katkıda Bulunan rolüne eklenmelidir.

Not

Seçili sanal ağa erişime izin vermek yerine özel bir uç nokta kullanabilirsiniz.

Okuma ve yazma boyutu seçeneklerini iyileştirme

Bu bölümde, rsize ve wsize seçenekleriyle Azure Dosyalar CSI sürücüsüyle NFS performans ayarlama yaklaşımı hakkında bilgi sağlanır. Rsize ve wsize seçenekleri, bir NFS işleminin en büyük aktarım boyutunu ayarlar. Bağlamada rsize veya wsize belirtilmezse, istemci ve sunucu ikisi tarafından desteklenen en büyük boyut üzerinde anlaşma sağlar. Şu anda hem Azure NetApp Files hem de modern Linux dağıtımları 1.048.576 Bayt (1 MiB) kadar büyük okuma ve yazma boyutlarını desteklemektedir.

En iyi performans, verimli istemci-sunucu iletişiminin temelidir. Bağlama okuma ve yazma seçeneği boyutu değerlerini artırmak veya azaltmak NFS performansını artırabilir. İstemci ve sunucu arasında aktarılan okuma/yazma paketlerinin varsayılan boyutu NFS sürüm 2 için 8 KB, NFS sürüm 3 ve 4 için 32 KB'tır. Bu varsayılanlar çok büyük veya çok küçük olabilir. Rsize ve wsize değerlerini azaltmak, her NFS okuma yanıt ve yazma isteği için daha küçük paketler göndererek tıkanık bir ağda NFS performansını artırabilir. Ancak bu, ağ genelinde veri göndermek için gereken paket sayısını artırarak istemci ve sunucuda toplam ağ trafiğini ve CPU kullanımını artırabilir.

Verimli paket aktarımını sürdüren ve aktarım hızını azaltmayan ve gecikme süresini artırmayan bir rsize ve wsize bulmak için test yapmanız önemlidir.

Rsize ve wsize'yi iyileştirme hakkında daha fazla bilgi için bkz . Azure NetApp Files için Linux NFS bağlama seçenekleri en iyi yöntemleri.

Örneğin, 256 KiB'lik maksimum rsize ve wsize değerlerini yapılandırmak için depolama sınıfında öğesini mountOptions aşağıdaki gibi yapılandırın:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30
  - rsize=262144
  - wsize=262144

NFS dosya paylaşımı depolama sınıfı oluşturma

adlı nfs-sc.yaml bir dosya oluşturun ve aşağıdaki bildirimi kopyalayın. Desteklenen mountOptionsöğesinin listesi için bkz . NFS bağlama seçenekleri.

Not

vers, Azure minorversionsec Dosya CSI sürücüsü tarafından yapılandırılır. Bildiriminizde bu özellikler için bir değer belirtme desteklenmez.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30

Dosyayı düzenleyip kaydettikten sonra kubectl apply komutuyla depolama sınıfını oluşturun:

kubectl apply -f nfs-sc.yaml

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

storageclass.storage.k8s.io/azurefile-csi-nfs created

NFS destekli dosya paylaşımıyla dağıtım oluşturma

Kubectl apply komutuyla zaman damgalarını bir dosyaya data.txt kaydeden durum bilgisi olan örnek bir küme dağıtabilirsiniz:

kubectl apply -f

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-azurefile
  labels:
    app: nginx
spec:
  podManagementPolicy: Parallel  # default is OrderedReady
  serviceName: statefulset-azurefile
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: statefulset-azurefile
          image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
          command:
            - "/bin/bash"
            - "-c"
            - set -euo pipefail; while true; do echo $(date) >> /mnt/azurefile/outfile; sleep 1; done
          volumeMounts:
            - name: persistent-storage
              mountPath: /mnt/azurefile
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  volumeClaimTemplates:
    - metadata:
        name: persistent-storage
      spec:
        storageClassName: azurefile-csi-nfs
        accessModes: ["ReadWriteMany"]
        resources:
          requests:
            storage: 100Gi

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

statefulset.apps/statefulset-azurefile created

Aşağıdaki komutu çalıştırarak birimin içeriğini doğrulayın:

kubectl exec -it statefulset-azurefile-0 -- df -h

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

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda1                                                                                 29G   11G   19G  37% /etc/hosts
accountname.file.core.windows.net:/accountname/pvc-fa72ec43-ae64-42e4-a8a2-556606f5da38  100G     0  100G   0% /mnt/azurefile
...

Not

NFS dosya paylaşımı premium hesapta olduğundan en düşük dosya paylaşımı boyutunun 100 GiB olduğunu unutmayın. Küçük depolama boyutuna sahip bir PVC oluşturursanız, aşağıdakine benzer bir hatayla karşılaşabilirsiniz: dosya paylaşımı oluşturulamadı ... boyut (5)....

Windows kapsayıcıları

Azure Dosyalar CSI sürücüsü, Windows düğümlerini ve kapsayıcılarını da destekler. Windows kapsayıcılarını kullanmak için Windows kapsayıcıları hızlı başlangıcını izleyerek bir Windows düğüm havuzu ekleyin.

Windows düğüm havuzunuz olduktan sonra gibi azurefile-csi yerleşik depolama sınıflarını kullanın veya özel bir tane oluşturun. kubectl apply komutunu çalıştırarak zaman damgalarını bir dosyaya data.txt kaydeden örnek bir Windows tabanlı durum bilgisi olan küme dağıtabilirsiniz:

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

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

statefulset.apps/busybox-azurefile created

Aşağıdaki kubectl exec komutunu çalıştırarak birimin içeriğini doğrulayın:

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

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

2020-08-27 22:11:01Z
2020-08-27 22:11:02Z
2020-08-27 22:11:04Z
(...)

Sonraki adımlar

  • Azure Diskler için CSI sürücüsünü kullanmayı öğrenmek için bkz . CSI sürücüsüyle Azure Diskleri 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.
  • Depolama için en iyi yöntemler hakkında daha fazla bilgi için bkz . Azure Kubernetes Service'te depolama ve yedeklemeler için en iyi yöntemler.