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.
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.
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.
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 lebih lanjut tentang volume Kubernetes, lihat Opsi penyimpanan untuk aplikasi di AKS.
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
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.
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>
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
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
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.
- 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.
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
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
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)....
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
(...)
- Untuk mempelajari cara menggunakan driver CSI untuk Disk Azure, lihat Menggunakan Disk Azure dengan driver CSI.
- Untuk mempelajari cara menggunakan driver CSI untuk penyimpanan Blob Azure, lihat Menggunakan penyimpanan Blob Azure dengan driver CSI.
- Untuk informasi selengkapnya tentang praktik terbaik penyimpanan, lihat Praktik terbaik untuk penyimpanan dan pencadangan di Azure Kubernetes Service.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: