Aracılığıyla paylaş


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

Azure Dosyalar Kapsayıcı 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 konteynerleştirilmiş iş yüklerine rastgele blok ve dosya depolama sistemlerini sunan bir standarttır.

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.

Uyarı

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 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, AKS kümesindeki 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 manuel birim oluşturma ve kullanma.

Uyarı

Azure Dosya CSI sürücüsünün yalnızca anahtar tabanlı (NTLM v2) kimlik doğrulaması kullanılarak SMB dosya paylaşımlarının bağlanmasına izin verildiğini ve bu nedenle Azure Dosya paylaşımı ayarlarının en yüksek güvenlik profilini desteklemediğini unutmayın. Öte yandan, NFS dosya paylaşımlarını bağlamak için anahtar tabanlı kimlik doğrulaması gerekmez.

Azure Dosyalar paylaşımları ile düğüme kaç tane bağlanabileceğine ilişkin 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 VM'lerini 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

Uyarı

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'de depolama CSI sürücülerini kullandığınızda, Azure Dosyalar CSI depolama sürücülerini kullanan iki yerleşik StorageClasses daha bulunmaktadı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: Bir Azure dosya paylaşımı oluşturmak için Azure Standart Depolama'yı kullanır.
  • azurefile-csi-premium: Bir Azure dosya paylaşımı oluşturmak için Azure Premium Depolama'yı kullanır.

Her iki depolama sınıfındaki geri alma politikası, ilgili PV silindiğinde alttaki 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 depolama alanını talep etmek için PVC kullanılır.

kubectl applykomutlarını çalıştırarak, geçerli tarihi bir outfile içine yazdıran örnek bir 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 duruma geldikten sonra, aşağıdaki komutu çalıştırıp çıktının outfile öğesini içerdiğini doğrulayarak dosya paylaşımının doğru bir şekilde monte edildiğini teyit edebilirsiniz.

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.

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 öğreticinin başında dinamik olarak oluşturduğumuz PVC'den bir hacim 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ı hacmi yeniden boyutlandırma

PVC için daha büyük bir birim 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.

Uyarı

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

Kalıcı birimleri küçültme şu anda desteklenmiyor.

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ı spec.resources.requests.storage artırarak PVC'yi 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 depolaması (ö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ı dizesinin 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. Yerine <resourceGroup> ve <storageAccountName> değerlerini 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.

Uyarı

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 Dosyalar 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.

Ö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.

Uyarı

vers, minorversion ve sec Azure 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
...

Uyarı

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 konteynerleri

Azure Dosyalar CSI sürücüsü, Windows düğümleri ve kapsayıcıları 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 azurefile-csi gibi 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