Bagikan melalui


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 terintegrasi mengacu pada driver penyimpanan saat ini yang merupakan bagian dari kode inti Kubernetes, dibandingkan dengan driver CSI baru, yang merupakan plug-in.

Menggunakan volume persisten dengan Azure Files

Volume persisten (PV) mewakili bagian penyimpanan yang disediakan untuk digunakan dengan pod Kubernetes. PV dapat digunakan oleh satu atau banyak pod dan dapat diprovisikan baik secara dinamis maupun secara statis. Jika beberapa pod memerlukan akses bersamaan ke volume penyimpanan yang sama, Anda dapat menggunakan Azure Files untuk terhubung dengan menggunakan protokol Server Message Block (SMB) atau NFS. Artikel ini menunjukkan kepada Anda cara membuat file share Azure Files secara dinamis untuk digunakan beberapa pod dalam klaster AKS. Untuk provisi statis, lihat Membuat dan menggunakan volume secara manual dengan berbagi Azure Files.

Catatan

Perlu diketahui bahwa driver Azure File CSI hanya mengizinkan pemasangan berbagi file SMB menggunakan autentikasi berbasis kunci (NTLM v2), dan oleh karena itu tidak mendukung profil keamanan maksimum pengaturan berbagi File Azure. Di sisi lain, pemasangan berbagi file NFS tidak memerlukan autentikasi berbasis kunci.

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

Untuk informasi selengkapnya 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 pembuatan file share Azure. Akun penyimpanan secara otomatis dibuat di grup sumber daya simpul untuk digunakan dengan kelas penyimpanan untuk menyimpan berbagi file Azure. Pilih salah satu SKU redundansi penyimpanan Azure berikut untuk skuName:

  • Standard_LRS: Penyimpanan redundan secara lokal standar
  • Standard_GRS: Penyimpanan standar redundansi geografis
  • Standard_ZRS: Penyimpanan zona redundan standar
  • Standard_RAGRS: Penyimpanan redundansi geografis standar dengan akses baca
  • Standard_RAGZRS: Penyimpanan dengan redundansi wilayah secara geografis akses baca standar
  • Premium_LRS: Penyimpanan redundan lokal premium
  • Premium_ZRS: Penyimpanan redundan zona premium

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 fitur bawaan tambahan yang menggunakan driver penyimpanan Azure Files CSI. Kelas penyimpanan CSI lainnya dibuat bersama kluster bersamaan dengan 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. PVC digunakan untuk mengalokasikan 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 suatu definisi pod, PVC ditentukan agar dapat meminta penyimpanan yang diinginkan.

Buatlah contoh PVC dan pod yang mencetak tanggal saat ini ke 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 sedang berjalan, Anda dapat memvalidasi bahwa file share 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 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 menjalankan perintah kubectl apply :

kubectl apply -f azure-file-sc.yaml

Output perintah menyerupai contoh berikut:

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

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

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 cuplikan volume dari PVC yang kami buat secara dinamis pada 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 ekspansi volume di bawah permukaan 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 bawaan azurefile-csi sudah mendukung ekspansi, 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 menyelesaikan alamat IP titik akhir privat ke FQDN string koneksi. Sesuaikan parameter berikut:

  • resourceGroup: Grup sumber daya tempat akun penyimpanan ditempatkan.
  • 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 menggunakan 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 menunjukkan cara menggunakan berbagi NFS dengan driver CSI Azure File 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, distribusi Azure Files dan Linux modern mendukung ukuran baca dan tulis 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 mount 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. Pengaturan ini mungkin terlalu besar atau terlalu kecil. Mengurangi rsize dan wsize dapat meningkatkan performa NFS dalam jaringan yang padat dengan mengirimkan paket yang lebih kecil untuk setiap balasan baca NFS dan permintaan tulis. 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 efisien, di mana ia tidak mengurangi throughput maupun meningkatkan latensi.

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 melihat daftar mountOptions yang didukung, silakan lihat opsi pemasangan NFS.

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 yang mirip dengan yang berikut ini: gagal membuat file share ... 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 simpul 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 tanda 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

Validasi 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