Menggunakan 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 pemasangan dan pelepasan 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 mendukung None mode penembolokan
  • Penyimpanan zona-redundan (ZRS) didukung.
    • 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.
  • 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 VM SKU, 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. Sebuah PV dapat digunakan oleh satu atau banyak pod dan dapat ditentukan 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 Kube, 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.
  • managed-csi-premium: Menggunakan Azure Premium LRS 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 Tidak 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 Tidak true
tags Tag Azure Disks Tag format: 'key1=val1,key2=val2' Tidak ""
userAgent Agen pengguna yang digunakan untuk atribusi penggunaan pelanggan Tidak Useragent yang dihasilkan diformat driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Tentukan ID langganan Azure tempat Azure Disks akan dibuat ID langganan Azure Tidak 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 mendemonstrasikan, buat volume kloning dari yang dibuat sebelumnyaazuredisk-pvc dan pod baru untuk menggunakannya.

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

Menyusutkan 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