Gunakan driver Azure Disk Container Storage Interface (CSI) di Azure Kubernetes Service (AKS)
Driver Azure Disks Container Storage Interface (CSI) adalah driver yang mematuhi spesifikasi CSI yang digunakan oleh Azure Kubernetes Service (AKS) untuk mengelola siklus hidup Azure Disk.
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. Artikel ini menjelaskan cara menggunakan driver Azure Disk CSI versi 1.
Catatan
Driver Azure Disk CSI v2 (pratinjau) meningkatkan skalabilitas dan mengurangi latensi failover pod. Ini menggunakan disk bersama untuk menyediakan replika lampiran pada beberapa node kluster dan terintegrasi dengan penjadwal pod untuk memastikan node dengan replika lampiran dipilih pada failover pod. Driver Azure Disk CSI v2 (pratinjau) juga menyediakan kemampuan untuk menyempurnakan performa. Jika Anda tertarik untuk berpartisipasi dalam pratinjau, kirimkan permintaan: https://aka.ms/DiskCSIv2Preview. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan dan terkadang Anda dapat mengharapkan perubahan yang melanggar saat dalam pratinjau. Versi pratinjau tidak disarankan untuk beban kerja produksi. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.
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 driver Azure Disk CSI
Selain fitur driver in-tree, driver Azure Disk CSI mendukung fitur berikut:
- Peningkatan performa selama melampirkan dan melepaskan disk bersamaan
- Driver in-tree memasang atau melepaskan disk secara seri, sementara driver CSI memasang atau melepaskan disk secara batch. Ada peningkatan signifikan ketika ada beberapa disk yang melekat pada satu node.
- SSD premium v1 dan v2 didukung.
PremiumV2_LRS
hanya mendukungNone
mode penembolokan
- Dukungan disk penyimpanan redundan zona (ZRS)
- Jenis disk
Premium_ZRS
,StandardSSD_ZRS
tidak didukung. Disk ZRS dapat dijadwalkan pada node zona atau non-zona, tanpa batasan bahwa volume disk harus ditempatkan bersama di zona yang sama dengan node tertentu. Untuk informasi selengkapnya, termasuk wilayah mana yang didukung, lihat Penyimpanan zona redundan untuk disk terkelola.
- Jenis disk
- Snapshot
- Klon volume
- Mengubah ukuran PV disk tanpa waktu henti
Catatan
Bergantung pada SKU VM yang sedang digunakan, driver Azure Disk CSI mungkin memiliki batas volume per simpul. Untuk beberapa VM yang kuat (misalnya, 16 core), batasnya adalah 64 volume per simpul. Untuk mengidentifikasi batas per SKU VM, tinjau kolom Disk data maks untuk setiap SKU VM yang ditawarkan. Untuk daftar SKU VM yang ditawarkan dan batas kapasitas terperinci yang sesuai, lihat Ukuran komputer virtual tujuan umum.
Menggunakan volume persisten CSI dengan Azure Disks
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. Artikel ini menunjukkan cara membuat PV secara dinamis dengan disk Azure untuk digunakan oleh sebuah pod tunggal dalam kluster AKS. Untuk penyediaan secara statis, lihat Membuat volume statis dengan Azure Disks.
Untuk informasi lebih lanjut tentang volume Kubernetes, lihat Opsi penyimpanan untuk aplikasi di AKS.
Membuat PV Azure Disks secara dinamis dengan menggunakan kelas penyimpanan bawaan
Kelas penyimpanan digunakan untuk menentukan bagaimana sebuah unit penyimpanan dibuat secara dinamis dengan volume persisten. Untuk informasi lebih lanjut tentang kelas penyimpanan Kube, lihat kelas penyimpanan Kube.
Saat Anda menggunakan driver Azure Disk CSI di AKS, ada dua lagi bawaan StorageClasses
yang menggunakan driver penyimpanan Azure Disk CSI. Kelas penyimpanan CSI yang lain dibuat dengan kluster bersama kelas penyimpanan default in-tree.
managed-csi
: Menggunakan penyimpanan redundan lokal (LRS) untuk membuat sebuah disk terkelola. Efektif dimulai dengan Kubernetes versi 1.29, di kluster Azure Kubernetes Service (AKS) yang disebarkan di beberapa zona ketersediaan, kelas penyimpanan ini menggunakan penyimpanan redundan zona (ZRS) Azure Standard SSD untuk membuat disk terkelola.managed-csi-premium
: Menggunakan Azure Premium LRS untuk membuat disk terkelola. Efektif dimulai dengan Kubernetes versi 1.29, di kluster Azure Kubernetes Service (AKS) yang disebarkan di beberapa zona ketersediaan, kelas penyimpanan ini menggunakan penyimpanan redundan zona Azure Premium (ZRS) untuk membuat disk terkelola.
Kebijakan klaim kembali di kedua kelas penyimpanan memastikan bahwa Azure Disks dasar dihapus saat PV masing-masing dihapus. Kelas penyimpanan juga mengonfigurasi PV 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. Sebuah PVC dapat menggunakan salah satu kelas penyimpanan yang telah dibuat sebelumnya atau kelas penyimpanan yang ditentukan pengguna untuk membuat disk terkelola Azure untuk SKU dan ukuran yang diinginkan. Ketika Anda membuat definisi pod, PVC ditentukan untuk meminta penyimpanan yang diinginkan.
Buat pod contoh dan PVC masing-masing dengan menjalankan perintah kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/pvc-azuredisk-csi.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/nginx-pod-azuredisk.yaml
Output perintah menyerupai contoh berikut:
persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created
Setelah pod berada dalam kondisi berjalan, jalankan perintah berikut untuk membuat file baru bernama test.txt
.
kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt
Untuk memvalidasi disk terpasang dengan benar, jalankan perintah berikut dan verifikasi bila Anda melihat: test.txt
dalam output:
kubectl exec nginx-azuredisk -- ls /mnt/azuredisk
lost+found
outfile
test.txt
Membuat kelas penyimpanan kustom
Kelas penyimpanan default cocok untuk sebagian besar skenario umum. Untuk beberapa kasus, Anda mungkin ingin memiliki kelas penyimpanan yang disesuaikan dengan parameter Anda sendiri. Misalnya, Anda mungkin ingin mengubah kelas volumeBindingMode
.
Anda dapat menggunakan kelas volumeBindingMode: Immediate
yang menjamin hal tersebut terjadi segera setelah PVC dibuat. Saat kumpulan node Anda dibatasi topologi, misalnya saat menggunakan zona ketersediaan, PV akan terikat atau diprovisikan tanpa mengetahui persyaratan penjadwalan pod.
Untuk mengatasi skenario ini, Anda dapat menggunakan volumeBindingMode: WaitForFirstConsumer
, yang menunda pengikatan dan provisi PV sampai pod yang menggunakan PVC dibuat. Dengan cara ini, PV sesuai dan disediakan di zona ketersediaan (atau topologi lain) yang ditentukan oleh batasan penjadwalan pod. Kelas penyimpanan default menggunakan kelas volumeBindingMode: WaitForFirstConsumer
.
Buat file bernama sc-azuredisk-csi-waitforfirstconsumer.yaml
, dan tempelkan kode berikut. Kelas penyimpanannya sama dengan kelas penyimpanan managed-csi
kami tetapi dengan kelas volumeBindingMode
yang berbeda.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azuredisk-csi-waitforfirstconsumer
provisioner: disk.csi.azure.com
parameters:
skuname: StandardSSD_LRS
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
Buat kelas penyimpanan dengan menjalankan perintah kubectl apply, dan tentukan file sc-azuredisk-csi-waitforfirstconsumer.yaml
Anda:
kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
Output perintah menyerupai contoh berikut:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
Rekam jepret volume
Driver Azure Disk CSI mendukung pembuatan rekam jepret volume persisten. Sebagai bagian dari kemampuan ini, drivernya dapat melakukan rekam jepret penuh atau bertahap tergantung nilai yang ditetapkan dalam parameter incremental
(secara default, itu benar).
Tabel berikut ini menyediakan detail untuk semua parameter.
Nama | Makna | Nilai yang Tersedia | Wajib | Nilai default |
---|---|---|---|---|
ResourceGroup | Grup sumber daya untuk menyimpan bidikan snapshot | GRUP SUMBER DAYA YANG SUDAH ADA | No | Jika tidak ditentukan, salinan bayangan akan disimpan dalam grup sumber daya yang sama dengan sumber Azure Disks |
bertambah bertahap | Mengambil snapshot penuh atau bertahap | true , false |
No | true |
tag | Tag Azure Disks | Tag format: 'key1=val1,key2=val2' | No | "" |
userAgent | Agen pengguna yang digunakan untuk atribusi penggunaan pelanggan | No | Useragent yang dihasilkan diformat driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Tentukan ID langganan Azure tempat Azure Disks akan dibuat | ID langganan Azure | No | Jika tidak kosong, resourceGroup harus disediakan, incremental harus ditetapkan sebagai false |
Membuat rekam jepret volume
Catatan
Sebelum melanjutkan, pastikan bahwa aplikasi tidak menulis data ke disk sumber.
Untuk contoh kemampuan ini, buat sebuah kelas rekam jepret volume dengan perintah kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
Output perintah menyerupai contoh berikut:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
Sekarang mari buat sebuah rekam jepret volume dari PVC yang kami buat secara dinamis pada awal tutorial ini, pvc-azuredisk
.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
Output perintah menyerupai contoh berikut:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
Pastikan salinan bayangan dibuat dengan benar dengan menjalankan perintah berikut:
kubectl describe volumesnapshot azuredisk-volume-snapshot
Output perintah menyerupai contoh berikut:
Name: azuredisk-volume-snapshot
Namespace: default
Labels: <none>
Annotations: API Version: snapshot.storage.k8s.io/v1
Kind: VolumeSnapshot
Metadata:
Creation Timestamp: 2020-08-27T05:27:58Z
Finalizers:
snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
Generation: 1
Resource Version: 714582
Self Link: /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
UID: dd953ab5-6c24-42d4-ad4a-f33180e0ef87
Spec:
Source:
Persistent Volume Claim Name: pvc-azuredisk
Volume Snapshot Class Name: csi-azuredisk-vsc
Status:
Bound Volume Snapshot Content Name: snapcontent-dd953ab5-6c24-42d4-ad4a-f33180e0ef87
Creation Time: 2020-08-31T05:27:59Z
Ready To Use: true
Restore Size: 10Gi
Events: <none>
Membuat PVC baru berdasarkan rekam jepret volume
Anda dapat membuat sebuah PVC baru berdasarkan rekam jepret volume. Gunakan rekam jepret yang telah dibuat di langkah sebelumnya, dan buat PVC baru dan sebuah pod baru untuk memakainya.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml
Output perintah menyerupai contoh berikut:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
pod/nginx-restored created
Terakhir, mari pastikan itu PVC yang sama yang telah dibuat sebelumnya dengan memeriksa kontennya dengan menjalankan perintah berikut:
kubectl exec nginx-restored -- ls /mnt/azuredisk
Output perintah menyerupai contoh berikut:
lost+found
outfile
test.txt
Seperti yang diharapkan, kita masih dapat melihat file test.txt
yang dibuat sebelumnya.
Membuat klon volume
Volume yang diklon didefinisikan sebagai duplikat dari volume Kube yang sudah ada. Untuk informasi lebih lanjut tentang cara membuat klon volume di Kube, lihat dokumentasi konseptual untuk pembuatan klon volume.
Driver CSI untuk Azure Disks mendukung pembuatan klon volume. Untuk menunjukkannya, buat sebuah volume yang diklon yang dibuat sebelumnya azuredisk-pvc
dan pod baru untuk memakainya.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml
Output perintah menyerupai contoh berikut:
persistentvolumeclaim/pvc-azuredisk-cloning created
pod/nginx-restored-cloning created
Anda dapat memverifikasi konten volume kloning dengan menjalankan perintah berikut dan mengonfirmasi file test.txt
dibuat:
kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
Output perintah menyerupai contoh berikut:
lost+found
outfile
test.txt
Mengubah ukuran volume persisten tanpa waktu henti
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.
Di AKS, kelas penyimpanan managed-csi
bawaan sudah mendukung perluasan, jadi gunakan PVC yang dibuat sebelumnya dengan kelas penyimpanan ini. PVCnya meminta volume persisten 10-Gi. Anda dapat mengonfirmasi dengan menjalankan perintah berikut:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Output perintah menyerupai contoh berikut:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 9.8G 42M 9.8G 1% /mnt/azuredisk
Perluas PVC dengan meningkatkan bidang spec.resources.requests.storage
yang menjalankan perintah berikut:
kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
Catatan
Mengurangi volume persisten saat ini tidak didukung. Mencoba menambal PVC yang ada dengan ukuran yang lebih kecil dari yang saat ini mengarah ke pesan kesalahan berikut: The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.
Output perintah menyerupai contoh berikut:
persistentvolumeclaim/pvc-azuredisk patched
Jalankan perintah berikut untuk mengonfirmasi bahwa ukuran volume telah meningkat:
kubectl get pv
Output perintah menyerupai contoh berikut:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO Delete Bound default/pvc-azuredisk managed-csi 2d2h
(...)
Dan setelah beberapa menit, jalankan perintah berikut untuk mengonfirmasi ukuran PVC:
kubectl get pvc pvc-azuredisk
Output perintah menyerupai contoh berikut:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-azuredisk Bound pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO managed-csi 2d2h
Jalankan perintah berikut untuk mengonfirmasi ukuran disk di dalam pod:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Output perintah menyerupai contoh berikut:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Bursting sesuai permintaan
Model bursting disk sesuai permintaan memungkinkan disk bursting setiap kali kebutuhannya melebihi kapasitasnya saat ini. Model ini menghasilkan biaya tambahan setiap kali disk kelebihan. Bursting sesuai permintaan hanya tersedia untuk SSD premium yang lebih besar dari 512 GiB. Untuk informasi selengkapnya tentang IOPS dan throughput per disk yang disediakan SSD premium, lihat ukuran SSD Premium. Atau, bursting berbasis kredit adalah di mana disk akan melebihi kapasitas hanya jika telah melebihi kredit yang terakumulasi dalam wadah kreditnya. Bursting berbasis kredit tidak menghasilkan biaya tambahan saat disk melebih. Bursting berbasis kredit hanya tersedia untuk SSD premium dengan kapasitas 512 GiB dan yang lebih kecil, serta SSD standar berkapasitas 1024 GiB dan yang lebih kecil. Untuk informasi selengkapnya tentang melebihi sesuai permintaan, lihat Melebihi sesuai permintaan.
Penting
Kelas penyimpanan default managed-csi-premium
menonaktifkan melebihi permintaan dan menggunakan bursting berbasis kredit. Setiap SSD premium yang dibuat secara dinamis oleh klaim volume persisten berdasarkan kelas penyimpanan default managed-csi-premium
juga menonaktifkan bursting sesuai permintaan.
Untuk membuat volume persisten SSD premium dengan melebihi sesuai permintaan diaktifkan, Anda dapat membuat kelas penyimpanan baru dengan parameter enableBursting diatur ke true
seperti yang ditunjukkan dalam templat YAML berikut. Untuk informasi selengkapnya tentang melebihi sesuai permintaan, lihat Melebihi sesuai permintaan. Untuk informasi selengkapnya tentang membangun kelas penyimpanan Anda sendiri dengan melebihi sesuai permintaan diaktifkan, lihat Membuat Kelas Penyimpanan Premium CSI Terkelola yang Mudah Melebihi Kapasitas.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
skuname: Premium_LRS
enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Kontainer Windows
Driver Azure Disk CSI mendukung node dan kontainer Windows. Jika Anda ingin menggunakan kontainer Windows, ikuti mulai cepatl kontainer Windows untuk menambahkan kumpulan node Windows.
Setelah Anda memiliki kumpulan simpul Windows, Anda sekarang bisa menggunakan kelas penyimpanan bawaan seperti managed-csi
. Anda dapat menyebarkan contoh set stateful berbasis Windows yang menyimpan stempel waktu ke dalam file data.txt
dengan menjalankan perintah berikut kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
Output perintah menyerupai contoh berikut:
statefulset.apps/busybox-azuredisk created
Untuk memvalidasi konten volume, jalankan perintah berikut:
kubectl exec -it busybox-azuredisk-0 -- cat c:\\mnt\\azuredisk\\data.txt # on Linux/MacOS Bash
kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Windows Powershell/CMD
Output perintah menyerupai contoh berikut:
2020-08-27 08:13:41Z
2020-08-27 08:13:42Z
2020-08-27 08:13:44Z
(...)
Langkah berikutnya
- Untuk mempelajari cara menggunakan driver CSI untuk Azure Files, lihat Menggunakan Azure Files 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.
- Untuk informasi selengkapnya tentang solusi penyimpanan berbasis disk, lihat Solusi berbasis disk di AKS.
Azure Kubernetes Service