Menggunakan driver Antarmuka Penyimpanan Kontainer (CSI) Azure Files di Azure Kubernetes Service (AKS)

Driver Azure Files Container Storage Interface (CSI) adalah driver yang mematuhi spesifikasi CSI yang digunakan oleh Azure Kubernetes Service (AKS) untuk mengelola siklus hidup berbagi file Azure. CSI adalah standar untuk mengekspos blok arbitrer dan sistem penyimpanan file ke beban kerja dalam kontainer di Kubernetes.

Dengan mengadopsi dan menggunakan CSI, AKS kini dapat menulis, menyebarkan, dan melakukan iterasi plug-in untuk mengekspos sistem penyimpanan baru atau yang ada pada Kubernetes. Menggunakan driver CSI di AKS menghindari menyentuh kode inti Kubernetes dan menunggu siklus rilisnya.

Untuk membuat kluster AKS dengan dukungan driver CSI, lihat Mengaktifkan driver CSI di AKS.

Catatan

Driver in-tree mengacu pada driver penyimpanan saat ini yang merupakan bagian dari kode inti Kube versus driver CSI baru, yang merupakan plug-in.

Fitur baru driver CSI Azure Files

Selain fitur driver in-tree asli, driver CSI Azure Files mendukung fitur-fitur berikut:

  • Sistem File Jaringan (NFS) versi v4.4.1
  • Titik akhir privat
  • Membuat pemasangan berbagi file yang besar secara paralel.

Menggunakan volume persisten dengan Azure Files

Sebuah volume persisten (PV) mewakili sepotong penyimpanan yang ditentukan untuk penggunaan dengan pod Kube. PV dapat digunakan oleh satu atau banyak pod dan dapat diprovisikan secara dinamis atau statis. Jika beberapa pod memerlukan akses bersamaan ke volume penyimpanan yang sama, Anda dapat menggunakan Azure Files untuk tersambung menggunakan protokol NFS atau Server Message Block (SMB) atau protokol NFS. Artikel ini menunjukkan kepada Anda cara membuat berbagi Azure Files secara dinamis untuk digunakan oleh beberapa pod dalam kluster AKS. Untuk provisi statis, lihat Membuat dan menggunakan volume secara manual dengan berbagi Azure Files.

Dengan berbagi Azure Files, tidak ada batasan berapa banyak yang dapat dipasang pada node.

Untuk informasi lebih lanjut tentang volume Kubernetes, lihat Opsi penyimpanan untuk aplikasi di AKS.

Membuat PV Azure Files secara dinamis dengan menggunakan kelas penyimpanan bawaan

Kelas penyimpanan digunakan untuk menentukan cara berbagi Azure yang dibuat. Akun penyimpanan secara otomatis dibuat di grup sumber daya simpul untuk digunakan dengan kelas penyimpanan untuk menyimpan berbagi file Azure. Pilih salah satu dari SKU redundansi penyimpanan Azure berikut untuk skuName:

  • Standard_LRS: Penyimpanan redundan lokal standar
  • Standard_GRS: Penyimpanan geo-redundan standar
  • Standard_ZRS : Penyimpanan zona-redundan standar
  • Standard_RAGRS: Penyimpanan geo-redundan akses baca standar
  • Standard_RAGZRS: Penyimpanan geo-zona-redundan akses baca standar
  • Premium_LRS: Penyimpanan redundan premium lokal
  • Premium_ZRS: Penyimpanan premium zona redundan

Catatan

Azure Files mendukung berbagi file Azure Premium. Kapasitas berbagi file minimum adalah 100 GiB. Sebaiknya gunakan berbagi file Azure Premium alih-alih berbagi file Standar karena berbagi file Premium menawarkan performa yang lebih tinggi, dukungan disk latensi rendah untuk beban kerja intensif I/O.

Saat Anda menggunakan driver CSI penyimpanan di AKS, ada dua lagi bawaan StorageClasses yang menggunakan driver penyimpanan Azure Files CSI. Kelas penyimpanan CSI yang lain dibuat dengan kluster bersama kelas penyimpanan default in-tree.

  • azurefile-csi: Menggunakan Azure Standard Storage untuk membuat berbagi file Azure.
  • azurefile-csi-premium: Menggunakan Azure Premium Storage untuk membuat berbagi file Azure.

Kebijakan klaim ulang pada kedua kelas penyimpanan memastikan bahwa berbagi file Azure yang mendasar dihapus saat PV masing-masing dihapus. Kelas penyimpanan juga mengonfigurasi berbagi file agar dapat diperluas, Anda hanya perlu mengedit klaim volume persisten (PVC) dengan ukuran baru.

Untuk menggunakan kelas penyimpanan ini, buat PVC dan pod masing-masing yang mereferensikan dan menggunakannya. Sebuah PVC digunakan untuk menentukan penyimpanan secara otomatis berdasarkan kelas penyimpanan. PVC dapat menggunakan salah satu kelas penyimpanan yang telah dibuat sebelumnya atau kelas penyimpanan yang ditentukan pengguna untuk membuat berbagi file Azure untuk SKU dan ukuran yang diinginkan. Ketika Anda membuat definisi pod, PVC ditentukan untuk meminta penyimpanan yang diinginkan.

Buat contoh PVC dan pod yang mencetak tanggal saat ini menjadi outfile dengan menjalankan perintah kubectl apply:

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

Output perintah menyerupai contoh berikut:

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

Setelah Pod dalam keadaan berjalan, Anda dapat memvalidasi bahwa berbagi file dipasang dengan benar dengan menjalankan perintah berikut dan memverifikasi keluaran yang berisi outfile:

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

Output perintah menyerupai contoh berikut:

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

Membuat kelas penyimpanan kustom

Kelas penyimpanan default sesuai dengan skenario yang paling umum, tetapi tidak semua. Untuk beberapa kasus, Anda mungkin ingin memiliki kelas penyimpanan yang disesuaikan dengan parameter Anda sendiri. Misalnya, gunakan manifes berikut untuk mengonfigurasi mountOptions dari berbagi file.

Nilai default untuk fileMode dan dirMode adalah 0777 untuk berbagi file yang dipasang di Kubernetes. Anda dapat menentukan opsi pemasangan yang berbeda pada objek kelas penyimpanan.

Buat file bernama azure-file-sc.yaml, dan tempelkan manifes contoh berikut:

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

Buat kelas penyimpanan dengan menggunakan perintah kubectl apply:

kubectl apply -f azure-file-sc.yaml

Output perintah menyerupai contoh berikut:

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

Driver CSI Azure Files mendukung pembuatan rekam jepret dari volume persisten dan berbagi file yang mendasarinya.

Catatan

Driver ini hanya mendukung pembuatan snapshot, pemulihan dari snapshot tidak didukung oleh driver ini. Snapshot dapat dipulihkan dari portal Azure atau CLI. Untuk informasi selengkapnya tentang membuat dan memulihkan rekam jepret, lihat Gambaran umum rekam jepret berbagi untuk Azure Files.

Buat kelas rekam jepret volume dengan perintah kubectl apply:

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

Output perintah menyerupai contoh berikut:

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

Buat rekam jepret volume dari PVC yang kami buat secara dinamis di awal tutorial ini, pvc-azurefile.

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

Output perintah menyerupai contoh berikut:

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

Pastikan snapshot dibuat dengan benar dengan menjalankan perintah berikut:

kubectl describe volumesnapshot azurefile-volume-snapshot

Output perintah menyerupai contoh berikut:

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>

Mengubah ukuran volume persisten

Anda dapat meminta volume yang lebih besar untuk PVC. Edit objek PVC, dan tentukan ukuran yang lebih besar. Perubahan ini memicu perluasan volume yang mendasarinya yang mendukung PV.

Catatan

PV baru tidak pernah dibuat untuk memenuhi klaim. Sebaliknya, volume yang ada diubah ukurannya.

Mengurangi volume persisten saat ini tidak didukung.

Di AKS, kelas penyimpanan azurefile-csi bawaan sudah mendukung perluasan, jadi gunakan PVC yang dibuat sebelumnya dengan kelas penyimpanan ini. PVC meminta berbagi file 100 GiB. Kami dapat mengonfirmasinya dengan menjalankan:

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

Output perintah menyerupai contoh berikut:

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

Perluas PVC dengan meningkatkan bidang spec.resources.requests.storage:

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

Output perintah menyerupai contoh berikut:

persistentvolumeclaim/pvc-azurefile patched

Pastikan bahwa PVC dan sistem berkas di dalam pod menunjukkan ukuran baru:

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

Menggunakan volume persisten dengan penyimpanan Azure Files pribadi (titik akhir privat)

Jika sumber daya Azure Files Anda dilindungi dengan titik akhir privat, Anda harus membuat kelas penyimpanan Anda sendiri. Pastikan Anda telah mengonfigurasi pengaturan DNS untuk mengatasi alamat IP titik akhir privat ke FQDN string koneksi. Sesuaikan parameter berikut:

  • resourceGroup: Grup sumber daya tempat akun penyimpanan disebarkan.
  • storageAccount: Nama akun penyimpanan.
  • server: FQDN dari titik akhir privat akun penyimpanan.

Buat file bernama private-azure-file-sc.yaml, lalu tempelkan contoh manifes berikut dalam file. Ganti nilai untuk <resourceGroup> dan <storageAccountName>.

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

Buat kelas penyimpanan dengan menggunakan kubectl apply perintah :

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

Output perintah menyerupai contoh berikut:

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

Buat file bernama private-pvc.yaml, lalu tempelkan contoh manifes berikut dalam file:

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

Buat PVC dengan perintah kubectl apply:

kubectl apply -f private-pvc.yaml

Berbagi file NFS

Azure Files mendukung protokol NFS v4.1. Dukungan NFS versi 4.1 untuk Azure Files memberi Anda sistem file NFS yang dikelola penuh sebagai layanan yang dibangun di platform penyimpanan tangguh terdistribusi yang sangat tersedia dan sangat tahan lama.

Opsi ini dioptimalkan untuk beban kerja akses acak dengan pembaruan data di tempat dan menyediakan dukungan sistem file POSIX penuh. Bagian ini memperlihatkan kepada Anda cara menggunakan bagian NFS dengan driver CSI Azure Files pada kluster AKS.

Prasyarat

  • Identitas sarana Kontrol kluster AKS Anda (yaitu, nama kluster AKS Anda) ditambahkan ke peran Kontributor di VNet dan NetworkSecurityGroup.
  • Perwakilan layanan kluster AKS atau identitas layanan terkelola (MSI) Anda harus ditambahkan ke peran Kontributor ke akun penyimpanan.

Catatan

Anda dapat menggunakan titik akhir privat alih-alih mengizinkan akses ke VNet yang dipilih.

Mengoptimalkan opsi ukuran baca dan tulis

Bagian ini menyediakan informasi tentang cara mendekati penyetelan performa NFS dengan driver Azure Files CSI dengan opsi rsize dan wsize . Opsi rsize dan wsize mengatur ukuran transfer maksimum operasi NFS. Jika rsize atau wsize tidak ditentukan pada pemasangan, klien dan server menegosiasikan ukuran terbesar yang didukung oleh keduanya. Saat ini, Azure NetApp Files dan distribusi Linux modern mendukung ukuran baca dan tulis hingga sebesar 1.048.576 Byte (1 MiB).

Performa optimal didasarkan pada komunikasi server klien yang efisien. Meningkatkan atau mengurangi nilai ukuran opsi baca dan tulis pemasangan dapat meningkatkan performa NFS. Ukuran default paket baca/tulis yang ditransfer antara klien dan server adalah 8 KB untuk NFS versi 2, dan 32 KB untuk NFS versi 3 dan 4. Default ini mungkin terlalu besar atau terlalu kecil. Mengurangi rsize dan wsize dapat meningkatkan performa NFS dalam jaringan yang padat dengan mengirim paket yang lebih kecil untuk setiap permintaan balasan dan tulis baca NFS. Namun, ini dapat meningkatkan jumlah paket yang diperlukan untuk mengirim data di seluruh jaringan, meningkatkan total lalu lintas jaringan dan pemanfaatan CPU pada klien dan server.

Penting bagi Anda untuk melakukan pengujian untuk menemukan rsize dan wsize yang mempertahankan transfer paket yang tidak layak, di mana ia tidak mengurangi throughput dan meningkatkan latensi.

Untuk informasi selengkapnya tentang mengoptimalkan rsize dan wsize, lihat Praktik terbaik opsi pemasangan Linux NFS untuk Azure NetApp Files.

Misalnya, untuk mengonfigurasi rsize dan wsize maksimum 256-KiB, konfigurasikan mountOptions di kelas penyimpanan sebagai berikut:

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

Membuat kelas penyimpanan berbagi file NFS

Buat file bernama nfs-sc.yaml dan salin manifes di bawah ini. Untuk daftar opsi pemasangan NFS yang didukungmountOptions.

Catatan

vers, minorversion, sec dikonfigurasi oleh driver Azure File CSI. Menentukan nilai dalam manifes Anda untuk properti ini tidak didukung.

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

Setelah mengedit dan menyimpan file, buat kelas penyimpanan dengan perintah kubectl apply:

kubectl apply -f nfs-sc.yaml

Output perintah menyerupai contoh berikut:

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

Membuat penyebaran dengan berbagi file yang didukung NFS

Anda dapat menyebarkan contoh set stateful yang menyimpan tanda waktu ke dalam file data.txt dengan perintah kubectl apply :

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

Output perintah menyerupai contoh berikut:

statefulset.apps/statefulset-azurefile created

Untuk memvalidasi konten volume, jalankan perintah berikut:

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

Output perintah menyerupai contoh berikut:

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

Catatan

Perhatikan bahwa karena berbagi file NFS berada di akun Premium, ukuran berbagi file minimum adalah 100 GiB. Jika Anda membuat PVC dengan ukuran penyimpanan kecil, Anda mungkin mengalami kesalahan gagal membuat berbagi file ... ukuran (5)....

Kontainer Windows

Driver CSI Azure Files juga mendukung simpul dan kontainer Windows. Untuk menggunakan kontainer Windows, ikuti mulai cepat kontainer Windows untuk menambahkan kumpulan node Windows.

Setelah Anda memiliki kumpulan simpul Windows, gunakan kelas penyimpanan bawaan seperti azurefile-csi atau buat yang kustom. Anda dapat menyebarkan contoh set stateful berbasis Windows yang menyimpan stempel waktu ke dalam file data.txt dengan menjalankan perintah kubectl apply:

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

Output perintah menyerupai contoh berikut:

statefulset.apps/busybox-azurefile created

Untuk memvalidasi konten volume dengan menjalankan perintah kubectl exec berikut:

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

Output perintah menyerupai contoh berikut:

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

Langkah berikutnya