129 lines
4.9 KiB
Markdown
129 lines
4.9 KiB
Markdown
---
|
|
title: Penyediaan Volume Dinamis
|
|
content_type: concept
|
|
weight: 40
|
|
---
|
|
|
|
<!-- overview -->
|
|
|
|
Penyediaan volume dinamis memungkinkan volume penyimpanan untuk dibuat sesuai permintaan (_on-demand_).
|
|
Tanpa adanya penyediaan dinamis (_dynamic provisioning_), untuk membuat volume penyimpanan baru, admin klaster secara manual harus
|
|
memanggil penyedia layanan cloud atau layanan penyimpanan, dan kemudian membuat [objek PersistentVolume](/id/docs/concepts/storage/persistent-volumes/)
|
|
sebagai representasi di Kubernetes. Fitur penyediaan dinamis menghilangkan kebutuhan admin klaster untuk menyediakan
|
|
penyimpanan sebelumnya (_pre-provision_). Dengan demikian, penyimpanan akan tersedia secara otomatis
|
|
ketika diminta oleh pengguna.
|
|
|
|
|
|
|
|
|
|
<!-- body -->
|
|
|
|
## Latar Belakang
|
|
|
|
Penyediaan volume dinamis diimplementasi berdasarkan objek API StorageClass dari
|
|
grup API `storage.k8s.io`. Seorang admin klaster dapat mendefinisikan berbagai macam
|
|
objek StorageClass sesuai kebutuhan, masing-masing menentukan *plugin volume* (disebut
|
|
juga *provisioner*) yang menyediakan sebuah volume beserta kumpulan parameter untuk
|
|
diteruskan oleh _provisioner_ ketika proses penyediaan.
|
|
|
|
Seorang klaster admin dapat mendefinisikan dan mengekspos berbagai templat penyimpanan
|
|
(dari sistem penyimpanan yang sama maupun berbeda) di dalam klaster, masing-masing dengan
|
|
kumpulan parameter tertentu. Desain ini memastikan bahwa pengguna tidak perlu khawatir betapa
|
|
rumitnya mekanisme penyediaan penyimpanan, tapi tetap memiliki kemampuan untuk
|
|
memilih berbagai macam pilihan penyimpanan.
|
|
|
|
Info lebih lanjut mengenai _storage class_ dapat dilihat [di sini](/id/docs/concepts/storage/storage-classes/).
|
|
|
|
## Mengaktifkan Penyediaan Dinamis (_Dynamic Provisioning_)
|
|
|
|
Untuk mengaktifkan penyediaan dinamis, seorang admin klaster perlu untuk
|
|
terlebih dahulu membuat (_pre-create_) satu atau beberapa objek StorageClass
|
|
untuk pengguna.
|
|
Objek StorageClass mendefinisikan _provisioner_ mana yang seharusnya digunakan
|
|
dan parameter apa yang seharusnya diberikan pada _provisioner_ tersebut saat
|
|
penyediaan dinamis dipanggil.
|
|
Manifestasi berikut ini membuat sebuah StorageClass "slow" yang
|
|
menyediakan _persistent_ disk standar.
|
|
|
|
```yaml
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: slow
|
|
provisioner: kubernetes.io/gce-pd
|
|
parameters:
|
|
type: pd-standard
|
|
```
|
|
|
|
Manifestasi berikut ini membuat sebuah StorageClass "fast" yang menyediakan
|
|
SSD _persistent_ disk.
|
|
|
|
```yaml
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: fast
|
|
provisioner: kubernetes.io/gce-pd
|
|
parameters:
|
|
type: pd-ssd
|
|
```
|
|
|
|
## Menggunakan Penyediaan Dinamis
|
|
|
|
Pengguna dapat melakukan permintaan untuk penyediaan penyimpanan dinamis dengan
|
|
memasukkan StorageClass di dalam PersistentVolumeClaim. Sebelum Kubernetes v1.6,
|
|
ini dapat dilakukan melalui anotasi `volume.beta.kubernetes.io/storage-class`.
|
|
Hanya saja, anotasi ini sudah usang sejak v1.6. Pengguna sekarang dapat dan seharusnya
|
|
menggunakan _field_ `storageClassName` dari objek PersistentVolumeClaim. Nilai
|
|
dari _field_ ini haruslah sesuai dengan nama StorageClass yang dikonfigurasi oleh
|
|
admin (lihat bagian [di bawah](#enabling-dynamic-provisioning)).
|
|
|
|
Untuk memilih StorageClass "fast", sebagai contoh, pengguna dapat membuat
|
|
PersistentVolumeClaim seperti ini:
|
|
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: PersistentVolumeClaim
|
|
metadata:
|
|
name: claim1
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
storageClassName: fast
|
|
resources:
|
|
requests:
|
|
storage: 30Gi
|
|
```
|
|
|
|
Klaim ini menghasilkan _persistent_ disk SSD yang disediakan secara otomatis.
|
|
Ketika klaim dihilangkan, volume akan musnah.
|
|
|
|
## Perilaku _Default_
|
|
|
|
Penyediaan dinamis dapat diaktifkan pada setiap klaster supaya semua klaim
|
|
dapat disediakan secara dinamis jika tidak ada StorageClass yang dispesifikasikan.
|
|
Seorang klaster admin dapat mengaktifkan perilaku ini dengan cara:
|
|
|
|
- Menandai satu objek StorageClass sebagai _default_;
|
|
- Memastikan bahwa [_admission controller_ `DefaultStorageClass`](/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)
|
|
telah aktif pada API server.
|
|
|
|
Seorang admin dapat menandai StorageClass yang spesifik sebagai _default_ dengan menambahkan
|
|
anotasi `storageclass.kubernetes.io/is-default-class`.
|
|
Ketika StorageClass default tersebut ada pada klaster dan pengguna membuat PersistentVolumeClaim
|
|
tanpa menspesifikasikan `storageClassName`, _admission controller_ `DefaultStorageClass` secara
|
|
otomatis menambahkan _field_ `storageClassName` dengan StorageClass _default_.
|
|
|
|
Perhatikan bahwa hanya bisa ada satu _default_ StorageClass pada sebuah klaster,
|
|
atau PersistentVolumeClaim tanpa menspesifikasikan `storageClassName` secara eksplisit
|
|
tidak bisa terbuat.
|
|
|
|
## Kesadaran (_Awareness_) Topologi
|
|
|
|
Pada klaster [Multi-Zona](/docs/setup/multiple-zones), Pod dapat tersebar di banyak Zona
|
|
pada sebuah Region. Penyimpanan dengan *backend* Zona-Tunggal seharusnya disediakan pada
|
|
Zona-Zona dimana Pod dijalankan. Hal ini dapat dicapai dengan mengatur
|
|
[Mode Volume Binding](/id/docs/concepts/storage/storage-classes/#volume-binding-mode).
|
|
|
|
|