Topik ini memperkenalkan konsep-konsep dasar terkait penyimpanan kontainer Kubernetes. Anda dapat membaca topik ini untuk mendapatkan pemahaman menyeluruh tentang fitur penyimpanan yang disediakan oleh Container Service for Kubernetes (ACK).
Volume
File dalam kontainer disimpan sementara di disk. Membangun ulang kontainer mengakibatkan hilangnya file. Untuk mengatasi masalah ini, Kubernetes mendefinisikan sumber daya volume untuk mencegah hilangnya file akibat restart kontainer. Volume adalah saluran transfer data antara pod dan perangkat penyimpanan eksternal. Volume memungkinkan berbagi data antara kontainer dalam pod, antar pod, dan antara pod dengan lingkungan eksternal.
Volume mendefinisikan detail penyimpanan eksternal dan disematkan dalam pod. Volume pada dasarnya adalah pemetaan sumber daya ke penyimpanan eksternal dalam sistem Kubernetes. Ketika beban kerja memerlukan penyimpanan eksternal, sistem menanyakan informasi terkait dalam volume dan memasang penyimpanan eksternal.
Volume memiliki siklus hidup yang sama dengan pod yang menggunakan volume tersebut. Anda dapat mengonfigurasi sistem untuk menghapus volume ketika pod yang menggunakan volume tersebut dihapus. Namun, apakah data dalam volume tetap ada tergantung pada jenis volume dan konfigurasinya.
ACK menyediakan jenis-jenis volume umum berikut:
Jenis | Deskripsi |
Penyimpanan lokal | Anda dapat memasang penyimpanan lokal sebagai volume, seperti volume hostPath dan emptyDir. Volume ini menyimpan data pada node tertentu dalam kluster dan tidak dapat bermigrasi bersama aplikasi. Data yang disimpan menjadi tidak tersedia ketika node mati. |
Penyimpanan jaringan | Anda dapat memasang penyimpanan jaringan sebagai volume, seperti Ceph, GlusterFS, NFS, dan iSCSI volume. Volume ini menyimpan data menggunakan layanan penyimpanan jarak jauh, bukan node tertentu dalam kluster. Saat menggunakan volume ini, Anda harus memasang layanan penyimpanan secara lokal. |
Secret dan ConfigMap | Secret dan ConfigMap adalah volume khusus yang menyimpan informasi objek tentang kluster. Data objek dipasang sebagai volume ke node untuk digunakan oleh aplikasi. |
PVC | PVC menyediakan mekanisme untuk mendefinisikan volume. PVC mengabstraksi volume menjadi objek yang independen dari pod. Informasi penyimpanan yang didefinisikan atau diasosiasikan dengan objek ini disimpan dalam volume dan dipasang untuk digunakan oleh beban kerja Kubernetes. |
Instruksi Penggunaan Volume
Pod dapat memasang beberapa volume. Namun, kami sarankan agar Anda tidak memasang terlalu banyak volume ke pod.
Pod dapat memasang beberapa jenis volume.
Volume yang dipasang ke pod dapat dibagikan di antara kontainer dalam pod.
Untuk mempertahankan data, kami sarankan agar Anda menggunakan PVC dan PV.
PV dan PVC
Tidak semua volume Kubernetes bersifat persisten. Penyimpanan kontainer memerlukan layanan penyimpanan jarak jauh untuk memungkinkan persistensi data. Untuk melakukannya, Kubernetes memperkenalkan dua objek sumber daya, PV dan PVC, yang mengabstraksi detail implementasi penyimpanan dari cara penyimpanan dikonsumsi. Ini menghilangkan kebutuhan bagi pengguna untuk khawatir tentang orkestrasi infrastruktur. Saat Anda memerlukan sumber daya penyimpanan, Anda hanya perlu mengklaim persyaratan penyimpanan Anda.
PV
PV merepresentasikan volume dari jenis tertentu dan digunakan untuk mendefinisikan detail volume, seperti jenis volume, parameter volume, dan informasi tentang sumber daya penyimpanan yang dipasang. Kubernetes menggunakan informasi penyimpanan dalam PV untuk pemasangan. PV dapat diprovision secara statis atau dinamis. Jika Anda menggunakan provisioning statis, Anda dapat langsung membuat PV. Jika Anda menggunakan provisioning dinamis, Anda perlu membuat StorageClasses. csi-provisioner secara otomatis membuat PV berdasarkan StorageClasses dan memasang PV ke pod.
PV digunakan pada tingkat kluster alih-alih tingkat node. PV memiliki siklus hidupnya sendiri, yang independen dari siklus hidup pod.
apiVersion: v1
kind: PersistentVolume
metadata:
namespace: default
name: pv-example
spec:
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: diskplugin.csi.alibabacloud.com
volumeHandle: <disk ID>
volumeMode: FilesystemPVC
PVC merepresentasikan klaim untuk penyimpanan persisten dan digunakan untuk mendefinisikan detail permintaan penyimpanan persisten pod, seperti kapasitas volume dan izin baca/tulis. PVC mengonsumsi PV.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
volumeName: pv-exampleInstruksi Penggunaan PV dan PVC
PVC dan PV memiliki hubungan satu-satu. PV tidak dapat diikat ke beberapa PVC, dan PVC tidak dapat diikat ke beberapa PV. Untuk mengonfigurasi penyimpanan untuk aplikasi, Anda harus mendeklarasikan PVC. Kubernetes memilih PV yang paling sesuai dengan PVC dan mengikatnya bersama. PVC harus diikat ke PV sebelum dapat digunakan oleh pod. Daftar berikut menjelaskan persyaratan yang harus dipenuhi PV sebelum dapat diikat ke PVC:
VolumeMode: PV yang akan dikonsumsi harus menggunakan mode volume yang sama dengan PVC.
AccessMode: PV yang akan dikonsumsi harus menggunakan mode akses yang sama dengan PVC.
StorageClassName: Jika parameter ini didefinisikan untuk PVC, hanya PV yang memiliki parameter yang sesuai yang dapat diikat ke PVC ini.
LabelSelector: PV yang sesuai dipilih dari daftar PV berdasarkan pencocokan label.
storage: PV yang akan dikonsumsi harus memiliki kapasitas penyimpanan yang tidak kurang dari PVC.
Daftar berikut menjelaskan bidang storage dalam PV dan PVC:
Sistem menentukan apakah PV dapat diikat ke PVC berdasarkan nilai bidang
storagemereka.Saat Anda menggunakan provisioning PV dinamis berdasarkan PVC dan StorageClass, bidang
storagePVC menentukan kapasitas PV dan penyimpanan backend yang sesuai (seperti disk).Untuk jenis penyimpanan yang mendukung operasi resize, nilai bidang
storagePVC digunakan sebagai kapasitas PV dan penyimpanan backend setelah ekspansi.
Saat data ditulis ke PV, bidang storage PVC dan PV tidak diperhitungkan. Sebaliknya, operasi penulisan bergantung pada kapasitas aktual medium penyimpanan yang mendasarinya.
Mode akses volume
Anda dapat menggunakan bidang accessModes untuk menentukan mode akses volume.
ReadWriteOnce (RWO)
Volume dapat dipasang dalam mode baca-tulis ke sebuah node. Misalnya, Anda dapat menentukan nilai ini saat memasang disk Alibaba Cloud.
ReadOnlyMany (ROX)
Volume dapat dipasang dalam mode baca-saja ke beberapa node. Misalnya, Anda dapat menentukan nilai ini saat memasang Bucket OSS (Object Storage Service).
ReadWriteMany (RWX)
Volume dapat dipasang dalam mode baca-tulis ke beberapa node. Misalnya, Anda dapat menentukan nilai ini saat memasang sistem file NAS (File Storage NAS).
Cara Memasang Volume ke Pod
Volume Provisioning Statis
Volume provisioning statis dibuat oleh administrator kluster. Anda dapat memasang disk Alibaba Cloud, sistem file NAS, dan bucket OSS sebagai volume provisioning statis.
Administrator kluster mengalokasikan media penyimpanan, seperti disk atau sistem file NAS, dengan menganalisis kebutuhan penyimpanan pod dalam kluster.
Administrator secara manual membuat beberapa PV terlebih dahulu berdasarkan situasi penyimpanan aktual dan mendefinisikan kapasitas penyimpanan spesifik yang dapat disediakan setiap PV. PV dapat dikonsumsi oleh PVC.
Pengguna membuat PVC untuk mendeklarasikan persyaratan penyimpanan beban kerja mereka.
Jika beban kerja mendefinisikan persyaratan PVC, Kubernetes mengikat PVC ke PV yang sesuai selama pembuatan pod. Dengan cara ini, pod yang dibuat oleh beban kerja dapat mengakses sumber daya penyimpanan yang dipasang.
Volume Provisioning Dinamis
Volume provisioning dinamis dibuat oleh provisioner plugin volume. Anda dapat memasang disk Alibaba Cloud, sistem file NAS, dan bucket OSS sebagai volume provisioning dinamis.
Administrator kluster mengonfigurasi kolam penyimpanan backend dan memilih provisioner volume yang berbeda untuk membuat jenis volume yang berbeda. Misalnya,
diskplugin.csi.alibabacloud.commewakili provisioner untuk disk Alibaba Cloud.Administrator kluster tidak perlu secara manual mengalokasikan PV. Sebagai gantinya, administrator hanya perlu membuat StorageClass dan menunggu PVC mengonsumsi StorageClass.
Pengguna membuat PVC untuk mendeklarasikan persyaratan penyimpanan pod beban kerja mereka. Pengguna harus menentukan StorageClass dalam PVC.
Jika beban kerja mendefinisikan persyaratan PVC, provisioner volume secara dinamis menciptakan PV berdasarkan konfigurasi StorageClass yang terkait dengan PVC. Dengan cara ini, pod yang dibuat oleh beban kerja dapat mengakses sumber daya penyimpanan yang dipasang.
Keuntungan provisioning dinamis:
Volume provisioning dinamis memungkinkan Kubernetes mengotomatiskan manajemen siklus hidup PV, dengan pembuatan dan penghapusan ditangani oleh provisioner.
PV dibuat secara otomatis, mengurangi kompleksitas konfigurasi volume dan beban kerja administrator kluster.
Volume provisioning dinamis memastikan konsistensi kapasitas antara PVC dan PV yang dibuat oleh provisioner, memungkinkan perencanaan kapasitas penyimpanan yang optimal.
StorageClasses
StorageClass mendefinisikan kelas penyimpanan dan memungkinkan provisioning dinamis. Anda dapat menentukan parameter berbeda dalam StorageClass untuk mengotomatiskan pasokan dan penyesuaian sumber daya penyimpanan berdasarkan parameter tersebut. Setelah Anda menentukan bidang StorageClassName dalam PVC Anda, jika tidak ada PV yang cocok di kluster, sistem memicu provisioner yang ditentukan dalam bidang StorageClassName untuk secara otomatis membuat PV dan sumber daya penyimpanan backend yang diprovision secara dinamis berdasarkan StorageClass. Ini mengurangi beban pembuatan dan pemeliharaan PV. Contoh berikut menunjukkan cara membuat StorageClass untuk disk Alibaba Cloud. Untuk informasi lebih lanjut tentang StorageClass kustom untuk disk Alibaba Cloud, sistem file NAS, dan bucket OSS, lihat Gunakan volume disk yang diprovision secara dinamis, Gunakan volume NAS yang diprovision secara dinamis, dan Gunakan volume OSS yang diprovision secara dinamis.
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 | Deskripsi | |
| Penyedia sumber daya penyimpanan. Nilai valid:
| |
| Parameter disk cloud. | |
| Kebijakan reclaim disk cloud. Nilai default:
Jika Anda memiliki persyaratan tinggi untuk keamanan data, kami sarankan Anda menetapkan nilainya ke | |
| Untuk mengaktifkan ekspansi volume disk otomatis, atur nilainya ke | |
| Mode pengikatan disk. Nilai default:
| |
StorageClass Default
Kubernetes menyediakan fitur StorageClass default. Jika PVC tidak menentukan StorageClass, StorageClass default digunakan untuk memprovision PV untuk PVC. Untuk informasi lebih lanjut, lihat StorageClass Default.
StorageClass default berlaku untuk semua PVC. Lanjutkan dengan hati-hati jika kluster Anda menggunakan PVC dari berbagai jenis penyimpanan. Misalnya, Anda ingin membuat PV untuk PVC yang mendefinisikan sistem file NAS, tetapi StorageClass default mungkin secara otomatis membuat PV disk sebagai gantinya. Oleh karena itu, kluster ACK tidak menyediakan StorageClass default. Jika Anda ingin mengonfigurasi StorageClass default, lakukan langkah-langkah berikut.
Konfigurasikan StorageClass default.
Jalankan perintah berikut untuk menetapkan StorageClass alicloud-disk-topology-alltype sebagai StorageClass default:
CatatanDalam contoh ini, StorageClass alicloud-disk-topology-alltype digunakan.
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=trueSetelah StorageClass default dikonfigurasi, alicloud-disk-topology-alltype ditandai sebagai (default).
kubectl get scOutput yang diharapkan:
NAME PROVISIONER AGE alicloud-disk-topology-alltype (default) diskplugin.csi.alibabacloud.com 96mGunakan StorageClass Default
Gunakan template berikut untuk membuat PVC tanpa menentukan StorageClass:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20GiKluster secara otomatis membuat PV disk berdasarkan StorageClass default alicloud-disk-topology-alltype.
kubectl get pvcOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-pvc Bound d-bp18pbai447qverm**** 20Gi RWO alicloud-disk-topology-alltype 49s
Anda juga dapat menjalankan perintah berikut untuk menonaktifkan StorageClass default:
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-StorageClasses yang disediakan oleh Container Service for Kubernetes
StorageClass | Jenis Disk | Deskripsi |
alicloud-disk-efficiency | Disk cloud generasi sebelumnya. | |
alicloud-disk-ssd | Disk cloud generasi sebelumnya. | |
alicloud-disk-essd | Enterprise SSD (ESSD) Tingkat Performa 1 (PL1) yang dibuat oleh StorageClass default. | |
alicloud-disk-topology-alltype | Menyediakan opsi ketersediaan tinggi. Dalam mode ini, sistem pertama-tama mencoba membuat ESSD.
| Direkomendasikan untuk skenario multi-zona |
alibabacloud-cnfs-nas | Saat Anda membuat kluster, Anda dapat menggunakan StorageClass default untuk membuat volume NAS yang dikelola oleh Container Network File System (CNFS). Untuk informasi lebih lanjut, lihat Gunakan CNFS untuk mengelola volume NAS. | Digunakan untuk membuat volume NAS yang dikelola oleh CNFS. |
Referensi
Untuk informasi lebih lanjut tentang solusi penyimpanan yang disediakan oleh Container Service for Kubernetes, lihat Penyimpanan.