Pahami volume, PV, PVC, dan StorageClass untuk mengonfigurasi persistent storage di ACK.
Volume
Filesystem kontainer bersifat sementara—file akan hilang saat restart. Volume mendefinisikan penyimpanan eksternal dalam spesifikasi pod; Kubernetes memasangnya ke dalam kontainer pada waktu proses.
ACK mendukung tipe volume berikut:
|
Type |
Description |
|
Local storage |
Volume lokal node seperti |
|
Network storage |
Volume remote seperti Ceph, GlusterFS, NFS, dan iSCSI. Data disimpan pada layanan remote, tetapi layanan tersebut harus dipasang secara lokal. |
|
Secret dan ConfigMap |
Volume khusus yang mengekspos data objek kluster (kredensial, konfigurasi) ke pod sebagai file. |
|
PVC |
Volume yang didukung oleh PersistentVolumeClaim yang mengabstraksikan penyimpanan sebagai objek independen. Gunakan untuk penyimpanan yang tahan lama dan portabel. |
Catatan penggunaan:
-
Sebuah pod dapat memasang beberapa volume, termasuk tipe yang berbeda.
-
Semua kontainer dalam satu pod berbagi volume yang dipasang.
-
Volume memiliki siklus hidup yang sama dengan pod. Persistensi data setelah penghapusan pod bergantung pada tipe volume dan konfigurasinya.
-
Untuk data yang tahan lama, gunakan PVC dan PV.
PV dan PVC
Tidak semua volume Kubernetes bersifat persisten. Untuk penyimpanan tahan lama, Kubernetes memperkenalkan dua objek yang memisahkan cara penyimpanan disediakan dari cara penyimpanan dikonsumsi:
-
PV adalah resource penyimpanan kluster, analog dengan node: pod mengonsumsi node, dan PVC mengonsumsi PV. PV memiliki siklus hidup sendiri, terlepas dari pod mana pun.
-
PVC adalah permintaan penyimpanan, analog dengan pod: sebagaimana pod meminta CPU dan memori dari node, PVC meminta kapasitas dan mode akses dari PV.
Pengembang mendeklarasikan kebutuhan penyimpanan (PVC), sedangkan administrator mengelola provisioning (PV).
Contoh PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 20Gi # sesuaikan agar sesuai dengan ukuran disk cloud aktual
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: diskplugin.csi.alibabacloud.com
volumeHandle: <disk ID>
volumeMode: Filesystem
Contoh PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
volumeName: pv-example
Aturan binding
PV dan PVC memiliki hubungan satu-ke-satu: tepat satu PVC terikat pada setiap PV. Sebelum PVC dapat digunakan oleh pod, Kubernetes harus menemukan PV yang memenuhi persyaratan berikut:
|
Field |
Requirement |
|
|
Harus sesuai dengan mode volume PVC |
|
|
Harus mencakup mode akses yang diminta oleh PVC |
|
|
Jika ditentukan dalam PVC, PV harus memiliki StorageClass yang sama |
|
Label selector |
PV harus sesuai dengan pemilih label apa pun yang didefinisikan dalam PVC |
|
|
Kapasitas PV harus minimal sebesar jumlah yang diminta oleh PVC |
Cara kerja field storage:
-
Kubernetes menggunakan
storageuntuk mencocokkan dan mengikat PV ke PVC. -
Dalam provisioning dinamis, nilai
storagepada PVC menetapkan kapasitas PV dan resource dasarnya (seperti disk cloud). -
Untuk tipe penyimpanan yang mendukung resizing, nilai
storagepada PVC menetapkan kapasitas target setelah skala keluar. -
storageadalah deklarasi kapasitas logis. Kapasitas penulisan aktual bergantung pada media penyimpanan dasar, bukan pada fieldstorage.
Mode akses volume
Gunakan field accessModes untuk menentukan cara volume dapat dipasang:
|
Access mode |
Abbreviation |
Description |
Example |
|
ReadWriteOnce |
RWO |
Baca-tulis oleh satu node |
Alibaba Cloud disk |
|
ReadOnlyMany |
ROX |
Hanya baca oleh banyak node |
OSS bucket |
|
ReadWriteMany |
RWX |
Baca-tulis oleh banyak node |
NAS file system |
Cara volume disediakan
ACK mendukung dua alur kerja provisioning: statis dan dinamis.
Provisioning statis
Dalam provisioning statis, administrator kluster membuat PV terlebih dahulu. Disk cloud, sistem file NAS, dan bucket OSS mendukung provisioning statis.
-
Administrator mengalokasikan resource penyimpanan (misalnya, disk cloud atau sistem file NAS) berdasarkan kebutuhan pod.
-
Administrator membuat PV yang menggambarkan resource tersebut, termasuk kapasitas dan konfigurasinya.
-
Pengembang membuat PVC yang mendeklarasikan kebutuhan beban kerjanya.
-
Saat pod dibuat, Kubernetes mengikat PVC ke PV yang sesuai.
Provisioning dinamis
Dalam provisioning dinamis, provisioner CSI membuat PV secara otomatis ketika PVC dibuat. Disk cloud, sistem file NAS, dan bucket OSS mendukung provisioning dinamis.
-
Administrator membuat StorageClass yang mendefinisikan tipe penyimpanan dan provisioner. Misalnya,
diskplugin.csi.alibabacloud.commenyediakan disk cloud. -
Pengembang membuat PVC yang mereferensikan StorageClass. Tidak perlu membuat PV secara manual.
-
Saat pod dibuat, provisioner CSI membaca StorageClass, membuat PV dan resource penyimpanan dasarnya, lalu mengikat PV ke PVC.
Provisioning dinamis menawarkan tiga keunggulan:
-
Manajemen siklus hidup otomatis: provisioner menangani pembuatan dan penghapusan PV secara otomatis.
-
Mengurangi beban operasional: administrator mengelola StorageClass daripada PV individual.
-
Konsistensi kapasitas: PV dan resource dasarnya selalu sesuai dengan kapasitas yang diminta oleh PVC.
StorageClasses
StorageClass mendefinisikan tipe penyimpanan, provisioner, dan parameter yang digunakan untuk provisioning dinamis. Saat PVC mereferensikan StorageClass dan tidak ada PV yang sesuai, Kubernetes memicu provisioner untuk membuat PV dan penyimpanan dasar secara otomatis.
Contoh StorageClass
StorageClass berikut menyediakan disk Alibaba Cloud:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-alltype
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_auto,cloud_essd,cloud_ssd,cloud_efficiency
fstype: ext4
diskTags/a: b
encrypted: "false"
performanceLevel: PL1
provisionedIops: "40000"
burstingEnabled: "false"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
Parameter utama
|
Parameter |
Description |
|
|
Driver CSI untuk provisioning penyimpanan. Gunakan |
|
|
Parameter khusus driver, seperti tipe disk, tipe sistem file, dan pengaturan performa. |
|
|
Apa yang terjadi pada PV dan penyimpanan dasar saat PVC dihapus. |
|
|
Tetapkan ke |
|
|
Kapan PV disediakan. Lihat tabel di bawah. |
Memilih volumeBindingMode:
|
Mode |
Kapan PV dibuat |
Direkomendasikan untuk |
|
|
Saat PVC dibuat, sebelum pod mana pun dijadwalkan |
Kluster single-zone |
|
|
Setelah pod yang menggunakan PVC dijadwalkan ke suatu node |
Kluster multi-zona |
Gunakan WaitForFirstConsumer di kluster multi-zona. Disk cloud tidak dapat dipasang lintas zona. Jika PV berada di Zona A tetapi pod dijadwalkan ke Zona B, pod gagal memulai. Dengan WaitForFirstConsumer, provisioner menunggu penjadwalan pod, lalu membuat disk di zona pod tersebut.
Cara kerja WaitForFirstConsumer:
Saat PVC dibuat, provisioner menunggu hingga pod mengonsumsinya. Scheduler menempatkan pod pada suatu node dan menulis hasilnya (wilayah dan node) ke metadata PVC. Provisioner kemudian membuat PV dan disk di zona yang benar.
StorageClass default
StorageClass default secara otomatis menyediakan PV untuk setiap PVC yang tidak menyebutkan nama StorageClass.
Kluster ACK tidak menyertakan StorageClass default. StorageClass default berlaku untuk semua PVC tanpa storageClassName. Jika kluster Anda menggunakan beberapa tipe penyimpanan, StorageClass default mungkin menyediakan tipe yang salah. Aktifkan hanya jika semua PVC menggunakan tipe penyimpanan yang sama.
Tetapkan StorageClass default:
Tandai alicloud-disk-topology-alltype sebagai default:
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=true
Verifikasi perubahan:
kubectl get sc
Output yang diharapkan:
NAME PROVISIONER AGE
alicloud-disk-topology-alltype (default) diskplugin.csi.alibabacloud.com 96m
Buat PVC tanpa menentukan StorageClass:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
Kluster secara otomatis membuat PV disk cloud menggunakan alicloud-disk-topology-alltype.
kubectl get pvc
Output yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
disk-pvc Bound d-bp18pbai447qverm**** 20Gi RWO alicloud-disk-topology-alltype 49s
Hapus StorageClass default:
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-
StorageClass yang disediakan oleh ACK
|
StorageClass |
Disk type |
Notes |
|
|
Disk cloud generasi sebelumnya |
|
|
|
Disk cloud generasi sebelumnya |
|
|
|
Enterprise SSD Performance Level 1 (PL1) |
|
|
|
Multi-type |
Mencoba ESSD terlebih dahulu, lalu standard SSD, kemudian ultra disk. Direkomendasikan untuk kluster multi-zona. |
|
|
NAS yang dikelola CNFS |
Membuat volume NAS yang dikelola Container Network File System (CNFS) |
StorageClass alicloud-disk-topology-alltype memilih tipe disk terbaik yang tersedia:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-alltype
parameters:
type: cloud_essd,cloud_ssd,cloud_efficiency
provisioner: diskplugin.csi.alibabacloud.com
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
Langkah selanjutnya
Lihat Storage untuk semua tipe penyimpanan dan panduan.
Untuk menyediakan tipe penyimpanan tertentu: