Container Service for Kubernetes (ACK) mendukung beberapa backend penyimpanan—disk cloud, sistem file File Storage NAS (NAS), dan bucket Object Storage Service (OSS)—yang dapat Anda pasang ke beban kerja yang berjalan di kluster Anda. Topik ini menjelaskan konsep penyimpanan inti yang perlu Anda pahami sebelum mengonfigurasi penyimpanan persisten: volume, PersistentVolume (PV), PersistentVolumeClaim (PVC), dan StorageClass.
Volume
Sistem file kontainer bersifat sementara—file yang ditulis di dalam kontainer akan hilang ketika kontainer direstart. Kubernetes memperkenalkan abstraksi volume untuk mengatasi hal ini: volume menghubungkan Pod ke penyimpanan eksternal, bertahan melewati restart kontainer selama masa hidup Pod, serta dapat dibagikan di antara kontainer dalam Pod yang sama maupun antara Pod dan lingkungan eksternal.
ACK mendukung jenis volume berikut:
| Jenis | Deskripsi |
|---|---|
| Penyimpanan lokal | Volume lokal node seperti hostPath dan emptyDir. Data terikat pada node tertentu dan tidak tersedia jika node tersebut mati. Tidak cocok untuk beban kerja stateful yang mungkin dijadwalkan ulang. |
| Penyimpanan jaringan | Volume penyimpanan remote seperti Ceph, GlusterFS, NFS, dan iSCSI. Data disimpan pada layanan remote, bukan pada node tertentu, tetapi layanan penyimpanan 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 dasar sebagai objek independen. Gunakan PVC untuk beban kerja yang memerlukan penyimpanan tahan lama dan portabel. |
Catatan penggunaan:
Sebuah Pod dapat memasang beberapa volume, termasuk beberapa jenis sekaligus.
Semua kontainer dalam satu Pod berbagi volume yang dipasang ke Pod tersebut.
Volume mengikuti siklus hidup Pod. Apakah data dasar tetap ada setelah Pod dihapus bergantung pada jenis volume dan konfigurasinya.
Untuk data 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*:
PersistentVolume (PV) adalah bagian penyimpanan yang disediakan di dalam kluster. Bayangkan PV seperti node: sebagaimana node merupakan sumber daya kluster yang dikonsumsi oleh Pod, PV adalah sumber daya penyimpanan yang dikonsumsi oleh PVC. PV memiliki siklus hidup sendiri, terlepas dari Pod mana pun.
PersistentVolumeClaim (PVC) adalah permintaan penyimpanan. Bayangkan PVC seperti Pod: sebagaimana Pod meminta CPU dan memori dari node, PVC meminta kapasitas penyimpanan dan mode akses dari PV.
Pemisahan ini berarti pengembang aplikasi mendeklarasikan penyimpanan yang mereka butuhkan (melalui PVC), sedangkan administrator kluster mengelola cara penyediaan penyimpanan tersebut (melalui PV).
Contoh PV
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: FilesystemContoh PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
volumeName: pv-exampleAturan binding
PV dan PVC memiliki hubungan satu-ke-satu: satu PV hanya terikat dengan satu PVC. Sebelum PVC dapat digunakan oleh Pod, Kubernetes harus menemukan PV yang memenuhi semua persyaratan berikut:
| Bidang | Persyaratan |
|---|---|
volumeMode | Harus sesuai dengan mode volume PVC |
accessModes | Harus mencakup mode akses yang diminta oleh PVC |
storageClassName | Jika ditentukan dalam PVC, PV harus memiliki StorageClass yang sama |
| Label selector | PV harus sesuai dengan pemilih label apa pun yang didefinisikan dalam PVC |
storage | Kapasitas PV harus minimal sebesar yang diminta oleh PVC |
Cara kerja bidang `storage`:
Kubernetes menggunakan
storageuntuk mencocokkan dan mengikat PV ke PVC.Dalam penyediaan dinamis, nilai
storagepada PVC menentukan kapasitas PV yang disediakan dan sumber daya penyimpanan dasarnya (misalnya, disk cloud).Untuk jenis penyimpanan yang mendukung resizing, nilai
storagepada PVC menetapkan kapasitas target setelah skala keluar.storageadalah batas kapasitas logis. Throughput penulisan aktual bergantung pada media penyimpanan dasar, bukan pada bidangstorage.
Mode akses volume
Gunakan bidang accessModes untuk menentukan cara volume dapat dipasang:
| Mode akses | Singkatan | Deskripsi | Contoh |
|---|---|---|---|
| ReadWriteOnce | RWO | Baca-tulis oleh satu node | Disk Alibaba Cloud |
| ReadOnlyMany | ROX | Hanya-baca oleh banyak node | Bucket OSS |
| ReadWriteMany | RWX | Baca-tulis oleh banyak node | Sistem file NAS |
Cara volume disediakan
ACK mendukung dua alur kerja penyediaan: statis dan dinamis.
Penyediaan statis
Dalam penyediaan statis, administrator kluster membuat PV terlebih dahulu. Anda dapat menyediakan secara statis disk cloud, sistem file NAS, dan bucket OSS.
Administrator menganalisis kebutuhan penyimpanan Pod dan mengalokasikan sumber daya penyimpanan terlebih dahulu (misalnya, disk cloud atau sistem file NAS).
Administrator membuat PV yang menggambarkan sumber daya tersebut, termasuk kapasitas dan konfigurasinya.
Pengembang membuat PVC yang mendeklarasikan kebutuhan beban kerja mereka.
Ketika Pod dibuat, Kubernetes mengikat PVC ke PV yang sesuai, sehingga Pod dapat mengakses penyimpanan tersebut.
Penyediaan dinamis
Dalam penyediaan dinamis, provisioner CSI membuat PV secara otomatis saat PVC diajukan. Anda dapat menyediakan secara dinamis disk cloud, sistem file NAS, dan bucket OSS.
Administrator membuat StorageClass yang mendefinisikan jenis penyimpanan dan provisioner. Misalnya,
diskplugin.csi.alibabacloud.commenyediakan disk cloud.Pengembang membuat PVC yang mereferensikan StorageClass. Tidak diperlukan pembuatan PV secara manual.
Ketika Pod dibuat, provisioner CSI membaca StorageClass, membuat PV dan sumber daya penyimpanan dasarnya, lalu mengikat PV ke PVC.
Penyediaan dinamis memiliki tiga keunggulan dibanding penyediaan statis:
Manajemen siklus hidup otomatis: provisioner menangani pembuatan dan penghapusan PV secara otomatis.
Mengurangi beban operasional: administrator mengelola StorageClass, bukan PV individual.
Konsistensi kapasitas: PV dan sumber daya penyimpanan dasar selalu disediakan sesuai dengan kapasitas yang diminta oleh PVC.
StorageClasses
StorageClass mendefinisikan jenis penyimpanan, provisioner, dan parameter yang digunakan untuk penyediaan dinamis. Ketika 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: WaitForFirstConsumerParameter utama
| Parameter | Deskripsi |
|---|---|
provisioner | Driver CSI yang membuat sumber daya penyimpanan. Gunakan diskplugin.csi.alibabacloud.com untuk disk cloud, nasplugin.csi.alibabacloud.com untuk sistem file NAS, atau ossplugin.csi.alibabacloud.com untuk bucket OSS. |
parameters | Parameter spesifik driver, seperti jenis disk, jenis sistem file, dan pengaturan performa. |
reclaimPolicy | Apa yang terjadi pada PV dan penyimpanan dasar ketika PVC dihapus. Delete (default) menghapus PV dan disk cloud. Retain menyimpan keduanya—Anda harus menghapusnya secara manual. Tetapkan ke Retain jika keamanan data menjadi prioritas. |
allowVolumeExpansion | Tetapkan ke true untuk mengaktifkan ekspansi disk online. |
volumeBindingMode | Kapan PV disediakan. Lihat tabel di bawah. |
Memilih `volumeBindingMode`:
| Mode | Kapan PV dibuat | Disarankan untuk |
|---|---|---|
Immediate (default) | Saat PVC dibuat, sebelum Pod dijadwalkan | Kluster single-zone |
WaitForFirstConsumer | 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 disediakan di Zona A tetapi Pod dijadwalkan ke Zona B, Pod tersebut gagal berjalan. Dengan WaitForFirstConsumer, provisioner menunggu hingga Pod dijadwalkan, lalu membuat disk di zona tempat Pod tersebut berjalan.
Cara kerja `WaitForFirstConsumer`:
Ketika PVC dibuat, provisioner tidak langsung membuat PV. Provisioner menunggu hingga Pod mengonsumsi PVC tersebut. Setelah scheduler menempatkan Pod pada suatu node, scheduler menulis hasil penjadwalan (wilayah dan node) ke metadata PVC. Provisioner membaca informasi ini dan membuat PV—serta disk dasarnya—di zona yang tepat.
StorageClass default
Kubernetes mendukung StorageClass default yang secara otomatis menyediakan PV untuk setiap PVC yang tidak menentukan nama StorageClass.
Kluster ACK tidak mengonfigurasi StorageClass default secara bawaan. StorageClass default berlaku untuk semua PVC yang tidak mencantumkan storageClassName. Jika kluster Anda menggunakan beberapa jenis penyimpanan, StorageClass default dapat menyediakan jenis penyimpanan yang salah untuk suatu PVC. Aktifkan hanya jika semua PVC Anda menggunakan jenis penyimpanan yang sama.
Menetapkan StorageClass default:
Jalankan perintah berikut untuk menandai alicloud-disk-topology-alltype sebagai default:
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=trueVerifikasi perubahan:
kubectl get scOutput yang diharapkan:
NAME PROVISIONER AGE
alicloud-disk-topology-alltype (default) diskplugin.csi.alibabacloud.com 96mMembuat PVC tanpa menentukan StorageClass:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20GiKluster secara otomatis membuat PV disk cloud menggunakan 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 49sHapus StorageClass default:
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-StorageClass yang disediakan oleh ACK
| StorageClass | Jenis disk | Catatan |
|---|---|---|
alicloud-disk-efficiency | Ultra disk | Disk cloud generasi sebelumnya |
alicloud-disk-ssd | Standard SSD | Disk cloud generasi sebelumnya |
alicloud-disk-essd | ESSD | Enterprise SSD Performance Level 1 (PL1) |
alicloud-disk-topology-alltype | Multi-jenis | Mencoba ESSD terlebih dahulu, lalu standard SSD, kemudian ultra disk. Direkomendasikan untuk kluster multi-zona. |
alibabacloud-cnfs-nas | NAS (Container Network File System) | Membuat volume NAS yang dikelola oleh Container Network File System (CNFS) |
StorageClass alicloud-disk-topology-alltype memilih jenis disk terbaik yang tersedia saat penyediaan:
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: WaitForFirstConsumerLangkah selanjutnya
Untuk daftar lengkap opsi penyimpanan dan panduan cara penggunaannya, lihat Penyimpanan.
Untuk instruksi langkah demi langkah tentang penyediaan jenis penyimpanan tertentu, lihat: