Add translations for StorageClass in ID localization. (#15999)
* Add translations for StorageClass in ID localization. Apply suggestions from code review Fix missing translations. * Fix broken formatting.pull/16625/head
parent
d0abaa9f0d
commit
2ec966509e
|
@ -0,0 +1,788 @@
|
|||
---
|
||||
title: StorageClass
|
||||
content_template: templates/concept
|
||||
weight: 30
|
||||
---
|
||||
|
||||
{{% capture overview %}}
|
||||
|
||||
Dokumen ini mendeskripsikan konsep StorageClass yang ada pada Kubernetes.
|
||||
Sebelum lanjut membaca, sangat dianjurkan untuk memiliki pengetahuan terhadap
|
||||
[volumes](/docs/concepts/storage/volumes/) dan
|
||||
[peristent volume](/docs/concepts/storage/persistent-volumes) terlebih dahulu.
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture body %}}
|
||||
|
||||
## Pengenalan
|
||||
|
||||
Sebuah StorageClass menyediakan cara bagi administrator untuk
|
||||
mendeskripsikan "kelas" dari penyimpanan yang mereka sediakan.
|
||||
Kelas yang berbeda bisa saja memiliki perbedaan dari segi kualitas
|
||||
servis yang disediakan, pemulihan (_backup_) kebijakan, atau kebijakan lain yang ditentukan
|
||||
oleh administrator kluster. Kubernetes sendiri tidak dipengaruhi oleh
|
||||
kelas apakah yang digunakan pada mekanisme penyimpanan yang digunakan.
|
||||
Mekanisme ini seringkali disebut sebagai _"profiles"_ pada sistem penyimpanan
|
||||
yang lain.
|
||||
|
||||
## Sumber daya StorageClass
|
||||
|
||||
Setiap StorageClass (kelas penyimpanan) memiliki _field-field_ mendasar seperti
|
||||
`provisioner`, `parameters`, dan `reclaimPolicy`, yang digunakan ketika
|
||||
`PersistentVolume` yang dimiliki oleh kelas tersebut perlu disediakan (di-_provision_).
|
||||
|
||||
Nama yang digunakan oleh suatu StorageClass sifatnya penting, karena
|
||||
ini merupakan cara yang digunakan oleh pengguna untuk meminta
|
||||
penyimpanan dengan kelas tertentu. Administrator dapat menentukan
|
||||
nama dan parameter lain dari suatu kelas ketika membuat suatu objek `StorageClass`,
|
||||
dan objek yang sudah dibuat tidak dapat diubah lagi definisinya.
|
||||
|
||||
Administrator dapat memberikan spesifikasi StorageClass _default_ bagi
|
||||
PVC yang tidak membutuhkan kelas tertentu untuk dapat melakukan mekanisme _bind_:
|
||||
kamu dapat membaca [bagian `PersistentVolumeClaim`](/docs/concepts/storage/persistent-volumes/#class-1)
|
||||
untuk penjelasan lebih lanjut.
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: standard
|
||||
provisioner: kubernetes.io/aws-ebs
|
||||
parameters:
|
||||
type: gp2
|
||||
reclaimPolicy: Retain
|
||||
mountOptions:
|
||||
- debug
|
||||
volumeBindingMode: Immediate
|
||||
```
|
||||
|
||||
### _Provisioner_
|
||||
|
||||
Setiap kelas penyimpanan (_storage class_) memiliki sebuah _provisioner_ yang
|
||||
menentukan _plugin_ manakah yang digunakan ketika sebuah PV disediakan (di-_provision_).
|
||||
_Field_ ini haruslah didefinisikan.
|
||||
|
||||
| Plugin Volume | Provisioner Internal| Contoh Konfigurasi |
|
||||
| :--- | :---: | :---: |
|
||||
| AWSElasticBlockStore | ✓ | [AWS EBS](#aws-ebs) |
|
||||
| AzureFile | ✓ | [Azure File](#azure-file) |
|
||||
| AzureDisk | ✓ | [Azure Disk](#azure-disk) |
|
||||
| CephFS | - | - |
|
||||
| Cinder | ✓ | [OpenStack Cinder](#openstack-cinder)|
|
||||
| FC | - | - |
|
||||
| Flexvolume | - | - |
|
||||
| Flocker | ✓ | - |
|
||||
| GCEPersistentDisk | ✓ | [GCE PD](#gce-pd) |
|
||||
| Glusterfs | ✓ | [Glusterfs](#glusterfs) |
|
||||
| iSCSI | - | - |
|
||||
| Quobyte | ✓ | [Quobyte](#quobyte) |
|
||||
| NFS | - | - |
|
||||
| RBD | ✓ | [Ceph RBD](#ceph-rbd) |
|
||||
| VsphereVolume | ✓ | [vSphere](#vsphere) |
|
||||
| PortworxVolume | ✓ | [Portworx Volume](#portworx-volume) |
|
||||
| ScaleIO | ✓ | [ScaleIO](#scaleio) |
|
||||
| StorageOS | ✓ | [StorageOS](#storageos) |
|
||||
| Local | - | [Local](#local) |
|
||||
|
||||
Kamu tidak dibatasi untuk hanya menggunakan _provisioner_ internal yang disediakan
|
||||
pada list yang tersedia (yang memiliki nama dengan prefix "kubernetes.io" dan
|
||||
didistribusikan bersamaan dengan Kubernetes). Kamu juga dapat menjalankan dan
|
||||
mendefinisikan _provisioner_ eksternal yang merupakan program independen selama
|
||||
program tersebut menerapkan [spesifikasi](https://git.k8s.io/community/contributors/design-proposals/storage/volume-provisioning.md)
|
||||
yang didefinisikan oleh Kubernetes. Penulis dari _provisioner_ eksternal Kubernetes
|
||||
memiliki kuasa penuh akan tempat dimana kode sumber yang mereka tulis, bagaimana
|
||||
mekanisme penyediaan (_provisioning_) dilakukan, serta bagaimana hal tersebut dapat dijalankan,
|
||||
serta _plugin_ volume apakah yang digunakan (termasuk Flex), dkk.
|
||||
Repositori [kubernetes-incubator/external-storage](https://github.com/kubernetes-incubator/external-storage)
|
||||
menyimpan _library_ yang dibutukan untuk menulis _provisioner_ eksternal
|
||||
yang mengimplementasi spesifikasi serta beberapa _provisioner_ eksternal yang
|
||||
dipelihara oleh komunitas.
|
||||
|
||||
Sebagai contoh, NFS tidak menyediakan _provisioner_ internal, tetapi
|
||||
sebuah _provisioner_ eksternal dapat digunakan. Beberapa _provisioner_ eksternal
|
||||
dapat ditemukan di bawah repositori [kubernetes-incubator/external-storage](https://github.com/kubernetes-incubator/external-storage).
|
||||
Di sana juga terdapat beberapa kasus dimana vendor penyimpanan _3rd party_
|
||||
menyediakan _provisioner_ eksternal yang mereka sediakan sendiri.
|
||||
|
||||
### Perolehan Kembali untuk Kebijakan (_Reclaim Policy_)
|
||||
|
||||
_Persistent Volumes_ yang secara dinamis dibuat oleh sebuah kelas penyimpanan
|
||||
akan memiliki _reclaim policy_ yang didefinisikan di dalam _field_ `reclaimPolicy`
|
||||
dari kelas tersebut, yang nilainya dapat diisi dengan `Delete` atau `Retain`.
|
||||
Jika tidak terdapat `reclaimPolicy` yang dispesifikasikan ketika sebuah objek
|
||||
StorageClass dibuat, maka nilai default bagi kelas tersebut adalah `Delete`.
|
||||
|
||||
PersistentVolume yang dibuat secara manual dan diatur dengan menggunakan
|
||||
kelas penyimpanan akan menggunakan _reclaim policy_ apapun yang diberikan
|
||||
pada saat objek tersebut dibuat.
|
||||
|
||||
### Pilihan _Mount_
|
||||
|
||||
PersistentVolume yang secara dinamis dibuat oleh sebuah kelas penyimpanan
|
||||
akan memiliki pilihan _mount_ yang dapat dispesifikasikan pada _field_
|
||||
`mountOptions` dari kelas tersebut.
|
||||
|
||||
Jika sebuah _plugin_ volume tidak mendukung pilihan _mount_
|
||||
yang dispesifikasikan, mekanisme penyediaan (_provision_) akan digagalkan. Pilihan _mount_
|
||||
yang akan divalidasi pada kelas penyimpanan maupun PV, maka _mount_ tersebut
|
||||
akan gagal apabila salah satu dari keduanya bersifat invalid.
|
||||
|
||||
### Mode Volume _Binding_
|
||||
|
||||
_Field_ `volumeBindingMode` mengontrol kapan mekanisme [_binding_ volume dan
|
||||
_provisioning_ dinamis](/docs/concepts/storage/persistent-volumes/#provisioning)
|
||||
harus dilakukan.
|
||||
|
||||
Secara _default_, ketika mode `Immediate` yang mengindikasikan
|
||||
terjadinya volume _binding_ dan _provisioning_ dinamis terjadi ketika
|
||||
PersistentVolumeClaim dibuat. Untuk _backend_ penyimpanan yang dibatasi oleh
|
||||
topologi tertentu dan tidak dapat diakses secara global dari semua Node
|
||||
yang ada di kluster, PersistentVolume akan di-_bound_ atau di-_provision_
|
||||
tanpa perlu memenuhi persyaratan _scheduling_ dari Pod. Hal ini dapat menyebabkan
|
||||
adanya Pod yang tidak mendapatkan mekanisme _scheduling_.
|
||||
|
||||
Seorang administrator kluster dapat mengatasi hal tersebut dengan cara memberikan
|
||||
spesifikasi mode `WaitForFirstConsumer` yang akan memperlambat mekanisme _provisioning_
|
||||
dan _binding_ dari sebuah PersistentVolume hingga sebuah Pod yang menggunakan
|
||||
PersistentVolumeClaim dibuat. PersistentVolume akan dipilih atau di-_provisioning_
|
||||
sesuai dengan topologi yang dispesifikasikan oleh limitasi yang diberikan
|
||||
oleh mekanisme _scheduling_ Pod. Hal ini termasuk, tetapi tidak hanya terbatas pada,
|
||||
[persyaratan sumber daya](/docs/concepts/configuration/manage-compute-resources-container),
|
||||
[_node selector_](/docs/concepts/configuration/assign-pod-node/#nodeselector),
|
||||
[afinitas dan
|
||||
anti-afinitas Pod](/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity),
|
||||
serta [_taint_ dan _toleration_](/docs/concepts/configuration/taint-and-toleration).
|
||||
|
||||
Beberapa _plugin_ di bawah ini mendukung `WaitForFirstConsumer` dengan _provisioning_
|
||||
dinamis:
|
||||
|
||||
* [AWSElasticBlockStore](#aws-ebs)
|
||||
* [GCEPersistentDisk](#gce-pd)
|
||||
* [AzureDisk](#azure-disk)
|
||||
|
||||
Beberapa _plugin_ di bawah ini mendukung `WaitForFirstConsumer` dengan _binding_
|
||||
PersistentVolume yang terlebih dahulu dibuat:
|
||||
|
||||
* Semua hal di atas
|
||||
* [Lokal](#lokal)
|
||||
|
||||
{{< feature-state state="beta" for_k8s_version="1.14" >}}
|
||||
[Volume-volume CSI](/docs/concepts/storage/volumes/#csi) juga didukung
|
||||
dengan adanya _provisioning_ dinamis serta PV yang telah terlebih dahulu dibuat,
|
||||
meskipun demikian, akan lebih baik apabila kamu melihat dokumentasi
|
||||
untuk driver spesifik CSI untuk melihat topologi _key_ yang didukung
|
||||
beserta contoh penggunaannya. _Feature gate_ `CSINodeInfo` haruslah diaktifkan.
|
||||
|
||||
### Topologi yang Diizinkan
|
||||
|
||||
Ketika sebuah operator kluster memberikan spesifikasi `WaitForFirstConsumer` pada
|
||||
mode `binding` volume, mekanisme pembatasan (restriksi) `provisioning` tidak lagi dibutuhkan
|
||||
pada sebagian besar kasus. Meskipun begitu, apabila hal tersebut masih dibutuhkan,
|
||||
`field` `allowedTopologies` dapat dispesifikasikan.
|
||||
|
||||
Contoh ini memberikan demonstrasi bagaimana cara membatasi topologi
|
||||
dari volume yang di-_provision_ pada suatu zona spesifik serta harus digunakan
|
||||
sebagai pengganti parameter `zone` dam `zones` untuk `plugin` yang akan digunakan.
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: standard
|
||||
provisioner: kubernetes.io/gce-pd
|
||||
parameters:
|
||||
type: pd-standard
|
||||
volumeBindingMode: WaitForFirstConsumer
|
||||
allowedTopologies:
|
||||
- matchLabelExpressions:
|
||||
- key: failure-domain.beta.kubernetes.io/zone
|
||||
values:
|
||||
- us-central1-a
|
||||
- us-central1-b
|
||||
```
|
||||
|
||||
## Parameter-Parameter
|
||||
|
||||
Kelas-kelas penyimpanan memiliki parameter yang mendeskripsikan
|
||||
volume yang dimiliki oleh kelas penyimpanan tersebut. Parameter yang berbeda
|
||||
bisa saja diterima bergantung pada `provisioner`. Sebagai contohnya, nilai `io1`,
|
||||
untuk parameter `type`, dan parameter `iopsPerGB` spesifik terhadap EBS.
|
||||
Ketika sebuah parameter diabaikan, beberapa nilai _default_ akan digunakan sebagai
|
||||
gantinya.
|
||||
|
||||
### AWS EBS
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/aws-ebs
|
||||
parameters:
|
||||
type: io1
|
||||
iopsPerGB: "10"
|
||||
fsType: ext4
|
||||
```
|
||||
|
||||
* `type`: `io1`, `gp2`, `sc1`, `st1`. Lihat
|
||||
[dokumentasi AWS](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
|
||||
untuk detail lebih lanjut. Nilai _default_: `gp2`.
|
||||
* `zone` (_deprecated_): zona AWS. Jika tidak terdapat nilai `zone` atau `zones`
|
||||
yang dispesifikasikan, volume secara generik dijadwalkan dengan menggunakan
|
||||
penjadwalan `round-robin-ed` pada semua zona aktif yang ada pada kluster Kubernetes
|
||||
yang memiliki _node_.
|
||||
* `zones` (_deprecated_): Nilai terpisahkan koma yang merupakan barisan zona pada AWS.
|
||||
Jika tidak terdapat nilai `zone` atau `zones` yang dispesifikasikan,
|
||||
volume secara generik dijadwalkan dengan menggunakan penjadwalan
|
||||
`round-robin-ed` pada semua zona aktif yang ada pada kluster Kubernetes
|
||||
yang memiliki _node_.
|
||||
* `iopsPerGB`: hanya untuk volume `io1`. Operasi per detik per GiB. Volume _plugin_
|
||||
AWS mengalikan nilai ini dengan ukuran volume yang dibutuhkan untuk menghitung IOPS
|
||||
dari volume (nilai maksimum yang didukung adalah 20,000 IOPS baca [dokumentasi
|
||||
AWS](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html).
|
||||
Nilai masukan yang diharapkan merupakan string, misalnya `"10"`, bukan `10`.
|
||||
* `fsType`: fsType yang didukung oleh Kubernetes. Nilai _default_-nya adalah: `"ext4"`.
|
||||
* `encrypted`: menyatakan dimana volume EBS harus dienkripsi atau tidak.
|
||||
Nilai yang valid adalah `"true"` atau `"false"` (dalam string bukan boolean i.e. `"true"`, bukan `true`).
|
||||
* `kmsKeyId`: opsional. Merupakan nama dari Amazon Resource Name dari _key_ yang digunakan
|
||||
untuk melakukan enkripsi volume. Jika nilai ini tidak disediakan tetapi nilai dari
|
||||
_field_ `encrypted` adalah _true_, sebuah _key_ akan dibuat oleh AWS. Perhatikan dokumentasi AWS
|
||||
untuk mengetahui nilai yang valid bagi ARN.
|
||||
|
||||
{{< note >}}
|
||||
Parameter `zone` dan `zones` sudah terdeprekasi dan digantikan oleh
|
||||
[allowedTopologies](#topologi-yang-diizinkan)
|
||||
{{< /note >}}
|
||||
|
||||
### PD GCE
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/gce-pd
|
||||
parameters:
|
||||
type: pd-standard
|
||||
replication-type: none
|
||||
```
|
||||
|
||||
* `type`: `pd-standard` atau `pd-ssd`. Nilai _default_: `pd-standard`
|
||||
* `zone` (_deprecated_): zona GCE. Jika tidak terdapat nilai `zone` atau `zones`
|
||||
yang dispesifikasikan, volume secara generik dijadwalkan dengan menggunakan
|
||||
penjadwalan `round-robin-ed` pada semua zona aktif yang ada pada kluster Kubernetes
|
||||
yang memiliki _node_.
|
||||
* `zones` (_deprecated_): Nilai terpisahkan koma yang merupakan barisan zona.
|
||||
Jika tidak terdapat nilai `zone` atau `zones` yang dispesifikasikan,
|
||||
volume secara generik dijadwalkan dengan menggunakan penjadwalan
|
||||
`round-robin-ed` pada semua zona aktif yang ada pada kluster Kubernetes
|
||||
yang memiliki _node_.
|
||||
* `replication-type`: `none` atau `regional-pd`. Nilai _default_: `none`.
|
||||
|
||||
Jika `replication-type` diubah menjadi `none`, sebuah PD reguler (zonal) akan
|
||||
di-_provisioning_.
|
||||
|
||||
Jika `replication-type` diubah menjadi `regional-pd`, sebuah
|
||||
[_Persistent_ Disk Regional (PD Regional)](https://cloud.google.com/compute/docs/disks/#repds)
|
||||
akan di-_provisioning_. Pada kasus ini, pengguna harus menggunakan `zones`
|
||||
dan bukan `zone` untuk menspesifikasikan zona replikasi yang diinginkan. Jika terdapat
|
||||
tepat dua zona yang dispesifikasikan, PD Regional akan di-_provisioning_ pada
|
||||
zona replikasi yang diinginkan. Jika terdapat lebih dari 2 zona yang dispesifikasikan,
|
||||
Kubernetes akan memilih secara acak zona dari zona-zona yang dispesifikasikan. Jika
|
||||
parameter `zones` tidak diinisialisasi, Kubernetes akan memilih secara acak dari
|
||||
zona yang diatur oleh kluster Kubernetes.
|
||||
|
||||
{{< note >}}
|
||||
Parameter `zone` dan `zones` sudah _deprecated_ dan digantikan oleh
|
||||
[allowedTopologies](#topologi-yang-diizinkan)
|
||||
{{< /note >}}
|
||||
|
||||
### Glusterfs
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/glusterfs
|
||||
parameters:
|
||||
resturl: "http://127.0.0.1:8081"
|
||||
clusterid: "630372ccdc720a92c681fb928f27b53f"
|
||||
restauthenabled: "true"
|
||||
restuser: "admin"
|
||||
secretNamespace: "default"
|
||||
secretName: "heketi-secret"
|
||||
gidMin: "40000"
|
||||
gidMax: "50000"
|
||||
volumetype: "replicate:3"
|
||||
```
|
||||
|
||||
* `resturl`: Servis REST Gluster/URL servis Heketi yang digunakan untuk
|
||||
melakukan _provisioning_ volume gluster sesuai dengan kebutuhan. Format secara umum
|
||||
haruslah dalam bentuk `IPaddress:Port` dan hal ini merupakan parameter wajib untuk
|
||||
_provisioner_ dinamis GlusterFS. Jika servis Heketi diekspos sebagai servis yang dapat
|
||||
melakukan _routing_ pada pengaturan openshift/kubernetes, ini dapat memiliki
|
||||
format yang sesuai dengan `http://heketi-storage-project.cloudapps.mystorage.com`
|
||||
dimana fqdn yang ada merupakan URL servis Heketi yang dapat di-_resolve_.
|
||||
* `restauthenabled` : Servis REST Gluster menyediakan nilai boolean yang dapat digunakan
|
||||
untuk mengajukan `authentication` untuk server REST yang ada. Jika nilai yang disediakan
|
||||
adalah `"true"`, dengan kondisi dimana `restuser` dan `restuserkey` atau `secretNamespace` + `secretName`
|
||||
harus diisi. Opsi ini sudah_deprecated_, mekanisme otentikasi akan diizinkan apabila
|
||||
salah satu dari _field_ `restuser`, `restuserkey`, `secretName` atau `secretNamespace` diterapkan.
|
||||
* `restuser` : Pengguna servis REST Gluster/Heketi yang memiliki akses
|
||||
untuk membuat volume di dalam Trusted Pool Gluster.
|
||||
* `restuserkey` : Password pengguna servis REST Gluster/Heketi
|
||||
yang digunakan untuk mekanisme otentikasi server REST. Parameter ini _deprecated_
|
||||
dan digantikan dengan parameter `secretNamespace` + `secretName`.
|
||||
* `secretNamespace`, `secretName` : Identifikasi instans Secret yang mengandung
|
||||
password pengguna yang digunakan untuk berkomunikasi dengan servis REST Gluster.
|
||||
Parameter ini dianggap opsional, password kosong dapat digunakan ketika
|
||||
nilai dari `secretNamespace` dan `secretName` tidak dispesifikasikan.
|
||||
Secret yang disediakan haruslah memiliki tipe `"kubernetes.io/glusterfs"`,
|
||||
yang dapat dibuat dengan menggunakan mekanisme dibawah ini:
|
||||
|
||||
```
|
||||
kubectl create secret generic heketi-secret \
|
||||
--type="kubernetes.io/glusterfs" --from-literal=key='opensesame' \
|
||||
--namespace=default
|
||||
```
|
||||
|
||||
Contoh Secret dapat ditemukan pada berkas berikut
|
||||
[glusterfs-provisioning-secret.yaml](https://github.com/kubernetes/examples/tree/master/staging/persistent-volume-provisioning/glusterfs/glusterfs-secret.yaml).
|
||||
|
||||
* `clusterid`: `630372ccdc720a92c681fb928f27b53f` merupakan ID dari kluster
|
||||
yang akan digunakan oleh Heketi ketikan melakukan _provisioning_ volume. ID ini juga
|
||||
dapat berupa serangkaian list, misalnya: `"8452344e2becec931ece4e33c4674e4e,42982310de6c63381718ccfa6d8cf397"`.
|
||||
Parameter ini merupakan parameter opsional.
|
||||
* `gidMin`, `gidMax` : Nilai minimum dan maksimum dari GID untuk kelas penyimpanan (_storage class_).
|
||||
Sebuah nilai unik dari GID di dalam _range_ ( gidMin-gidMax ) ini akan digunakan untuk melakukan
|
||||
_provisioning_ volume secara dinamis. Nilai ini bersifat opsional. Jika tidak dispesifikasikan,
|
||||
volume akan secara default di-_provisioning_ dalam _range_ 2000-2147483647 yang merupakan nilai default
|
||||
dari gidMin dan gidMax.
|
||||
* `volumetype` : Tipe volume beserta paremeter-nya dapat diatur dengan menggunakan nilai opsional
|
||||
berikut. Jika tipe dari volume tidak dispesifikasikan, maka _provisioner_ akan memutuskan tipe
|
||||
volume apakah yang akan digunakan.
|
||||
|
||||
Sebagai contoh:
|
||||
|
||||
* Volume replika: `volumetype: replicate:3` dimana '3' merupakan jumlah replika.
|
||||
|
||||
* Persebaran (_Disperse_)/EC volume: `volumetype: disperse:4:2` dimana'4' merupakan data dan '2' merupakan jumlah redundansi.
|
||||
|
||||
* Distribusi volume: `volumetype: none`
|
||||
|
||||
Untuk tipe volume apa saja yang tersedia dan berbagai opsi administrasi yang ada, kamu dapat membaca
|
||||
[Petunjuk Administrasi](https://access.redhat.com/documentation/en-US/Red_Hat_Storage/3.1/html/Administration_Guide/part-Overview.html).
|
||||
|
||||
Untuk informasi lebih lanjut, kamu dapat membaca
|
||||
[Bagaimana Cara Mengatur Heketi](https://github.com/heketi/heketi/wiki/Setting-up-the-topology).
|
||||
|
||||
Ketika PersistentVolume di-_provisioning_ secara dinamis, plugin Gluster secara otomatis
|
||||
akan membuat _endpoint_ serta sebuah servis _headless_ dengan nama `gluster-dynamic-<claimname>`.
|
||||
_Endpoint_ dinamis dan servis secara otomatis akan dihapus ketika PVC dihapus.
|
||||
|
||||
### OpenStack Cinder
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: gold
|
||||
provisioner: kubernetes.io/cinder
|
||||
parameters:
|
||||
availability: nova
|
||||
```
|
||||
|
||||
* `availability`: Zona _Availability_. Jika tidak dispesifikasikan, secara umum volume akan
|
||||
diatur dengan menggunakan algoritma _round-robin_ pada semua zona aktif
|
||||
dimana kluster Kubernetes memiliki sebuah node.
|
||||
|
||||
{{< note >}}
|
||||
{{< feature-state state="deprecated" for_k8s_version="1.11" >}}
|
||||
_Provisioner_ internal OpenStack ini sudah _deprecated_. Kamu dapat menggunakan [_provider_ eksternal penyedia layanan _cloud_ untuk OpenStack](https://github.com/kubernetes/cloud-provider-openstack).
|
||||
{{< /note >}}
|
||||
|
||||
### vSphere
|
||||
|
||||
1. Buatlah sebuah StorageClass dengan menggunakan sebuah format disk yang dispesifikasikan oleh pengguna.
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: fast
|
||||
provisioner: kubernetes.io/vsphere-volume
|
||||
parameters:
|
||||
diskformat: zeroedthick
|
||||
```
|
||||
|
||||
`diskformat`: `thin`, `zeroedthick` dan `eagerzeroedthick`. Nilai default: `"thin"`.
|
||||
|
||||
2. Buatlah sebuah StorageClass dengan menggunakan sebuah format disk pada _datastore_ yang dispesifikasikan oleh pengguna.
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: fast
|
||||
provisioner: kubernetes.io/vsphere-volume
|
||||
parameters:
|
||||
diskformat: zeroedthick
|
||||
datastore: VSANDatastore
|
||||
```
|
||||
|
||||
`datastore`: Pengguna juga dapat menspesifikasikan _datastore_ pada StorageClass.
|
||||
Volume akan dibuat pada datastore yang dispesifikasikan pada kelas penyimpanan,
|
||||
dalam hal ini adalah `VSANDatastore`. _Field_ ini bersifat opsional. Jika _datastore_
|
||||
tidak dispesifikasikan, maka volume akan dibuat dengan menggunakan _datastore_ yang dispesifikasikan
|
||||
pada berkas konfigurasi vSphere yang digunakan untuk menginisialisasi penyedia layanan cloud vSphere.
|
||||
|
||||
3. Manajemen Kebijakan Penyimpanan di dalam Kubernetes
|
||||
|
||||
* Menggunakan kebijakan (_policy_) yang ada pada vCenter
|
||||
|
||||
Salah satu dari fitur paling penting yang ada pada vSphere untuk manajemen penyimpanan
|
||||
adalah manajemen bebasis _policy_. Storage Policy Based Management (SPBM) adalah _framework_
|
||||
yang menyediakan sebuah _control plane_ terpadu pada _data service_ yang meluas dan
|
||||
solusi penyimpanannya yang tersedia. SPBM memungkinkan administrator vSphere menghadapi
|
||||
permasalahan yang mungkin muncul seperti _capacity planning_, membedakan level servis, dan
|
||||
melakukan manajemen _headroom capacity_.
|
||||
|
||||
_Policy_ SPBM dapat dispesifikasikan pada StorageClass menggunakan parameter
|
||||
`storagePolicyName`.
|
||||
|
||||
* Dukungan _policy_ SAN virtual di dalam Kubernetes
|
||||
|
||||
Administrator _Vsphere Infrastructure_ (VI) akan memiliki kemampuan
|
||||
untuk menspesifikasikan Virtual SAN Storage Capabilities khusus
|
||||
selama masa _provisioning_ volume secara dinamis. Persyaratan kapabilitas
|
||||
penyimpanan diubah menjadi sebuah _policy_ Virtual SAN yang nantinya akan
|
||||
dimasukkan ke dalam lapisan Virtual SAN ketika sebuah _persitent volume_ (penyimpanan
|
||||
virtual) dibuat. Penyimpanan virtual kemudian akan didistribusikan pada semua
|
||||
_datastore_ Virtual SAN untuk memenuhi kebutuhan ini.
|
||||
|
||||
Kamu dapat melihat [_Policy_ Penyimpanan Berdasarkan Manajemen untuk _Provisioning_ Dinamis Volume](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/policy-based-mgmt.html)
|
||||
untuk detil lebih lanjut mengenai penggunaan _policy_ penyimpanan untuk manajemen _persistent volume_.
|
||||
|
||||
Terdapat beberapa
|
||||
[contoh vSphere](https://github.com/kubernetes/examples/tree/master/staging/volumes/vsphere)
|
||||
yang dapat kamu gunakan untuk mencoba manajemen _persistent volume_ di dalam Kubernetes untuk vSpehere.
|
||||
|
||||
### RBD Ceph
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: fast
|
||||
provisioner: kubernetes.io/rbd
|
||||
parameters:
|
||||
monitors: 10.16.153.105:6789
|
||||
adminId: kube
|
||||
adminSecretName: ceph-secret
|
||||
adminSecretNamespace: kube-system
|
||||
pool: kube
|
||||
userId: kube
|
||||
userSecretName: ceph-secret-user
|
||||
userSecretNamespace: default
|
||||
fsType: ext4
|
||||
imageFormat: "2"
|
||||
imageFeatures: "layering"
|
||||
```
|
||||
|
||||
* `monitors`: Monitor Ceph, merupakan nilai yang dipisahkan oleh koma (csv). Parameter ini dibutuhkan.
|
||||
* `adminId`: ID klien Ceph yang dapat digunakan untuk membuat images di dalam pool.
|
||||
Nilai _default_-nya adalah "admin".
|
||||
* `adminSecretName`: Nama Secret untuk `adminId`. Parameter ini dibutuhkan.
|
||||
Secret yang dibutuhkan haruslah memiliki tipe "kubernetes.io/rbd".
|
||||
* `adminSecretNamespace`: Namespace untuk `adminSecretName`. Nilai _default_-nya adalah "default".
|
||||
* `pool`: Pool Ceph RBD. Nilai _default_-nya adalah "rbd".
|
||||
* `userId`: Klien ID Ceph yang digunakan untuk melakukan pemetaan image RBD. Nilai _default_-nya sama dengan
|
||||
`adminId`.
|
||||
* `userSecretName`: Nama Secret Ceph untuk `userId` yang digunakan untuk memetakan image RBD.
|
||||
Secret ini harus berada pada namespace yang sama dengan PVC. Parameter ini dibutuhkan.
|
||||
Secret yang disediakan haruslah memiliki tipe "kubernetes.io/rbd", dibuat dengan cara:
|
||||
|
||||
```shell
|
||||
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \
|
||||
--from-literal=key='QVFEQ1pMdFhPUnQrSmhBQUFYaERWNHJsZ3BsMmNjcDR6RFZST0E9PQ==' \
|
||||
--namespace=kube-system
|
||||
```
|
||||
* `userSecretNamespace`: Namespace untuk `userSecretName`.
|
||||
* `fsType`: fsType yang didukung oleh kubernetes. Nilai _default_-nya adalah: `"ext4"`.
|
||||
* `imageFormat`: Format image Ceph RBD, nilai yang mungkin adalah "1" atau "2". Nilai _default_-nya adalah "2".
|
||||
* `imageFeatures`: Parameter ini bersifat opsional dan hanya dapat digunakan jika kamu mengganti nilai
|
||||
dari `imageFormat` ke "2". Saat ini fitur yang didukung hanyalah `layering`.
|
||||
Nilai _default_-nya adalah "", dan tidak ada fitur yang diaktifkan.
|
||||
|
||||
### Quobyte
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/quobyte
|
||||
parameters:
|
||||
quobyteAPIServer: "http://138.68.74.142:7860"
|
||||
registry: "138.68.74.142:7861"
|
||||
adminSecretName: "quobyte-admin-secret"
|
||||
adminSecretNamespace: "kube-system"
|
||||
user: "root"
|
||||
group: "root"
|
||||
quobyteConfig: "BASE"
|
||||
quobyteTenant: "DEFAULT"
|
||||
```
|
||||
|
||||
* `quobyteAPIServer`: API Server dari Quobyte dalam format
|
||||
`"http(s)://api-server:7860"`
|
||||
* `registry`: Registri Quobyte yang digunakan untuk melakukan _mount_ volume. Kamu dapat menspesifikasikan
|
||||
registri yang kamu inginkan dengan format pasangan ``<host>:<port>`` atau jika kamu ingin mendefinisikan
|
||||
beberapa registri sekaligus kamu dapat menempatkan koma diantara setiap pasangan ``<host>:<port>`` yang ada,
|
||||
misalnya ``<host1>:<port>,<host2>:<port>,<host3>:<port>``.
|
||||
Host dapat berupa alamat IP atau DNS.
|
||||
* `adminSecretNamespace`: Namespace `adminSecretName`. Nilai default-nya adalah "default".
|
||||
* `adminSecretName`: Secret yang mengandung informasi mengenai pengguna Quobyte dan
|
||||
password yang digunakan untuk melakukan otentikasi API server. Secret yang digunakan
|
||||
haruslah memiliki tipe "kubernetes.io/quobyte", yang dibuat dengan mekanisme berikut:
|
||||
|
||||
```shell
|
||||
kubectl create secret generic quobyte-admin-secret \
|
||||
--type="kubernetes.io/quobyte" --from-literal=key='opensesame' \
|
||||
--namespace=kube-system
|
||||
```
|
||||
|
||||
* `user`: Melakukan pemetaan terhadap semua akses yang dimiliki pengguna.
|
||||
Nilai _default_-nya adalah "root".
|
||||
* `group`: Melakukan pemetaan terhadap semua group. Nilai _default_-nya adalah "nfsnobody".
|
||||
* `quobyteConfig`: Menggunakan konfigurasi spesifik untuk membuat volume.
|
||||
Kamu dapat membuat sebuah file konfigurasi atau melakukan modifikasi terhadap konfigurasi yang sudah ada
|
||||
dengan menggunakan tatap muka Web atau CLI quobyte. Nilai _default_-nya adalah "BASE".
|
||||
* `quobyteTenant`: Menggunakan ID tenant yang dispesifikasikan untuk membuat/menghapus volume.
|
||||
_Tenant_ Quobyte haruslah sudah berada di dalam Quobyte. Nilai _default_-nya adalah "DEFAULT".
|
||||
|
||||
### Azure Disk
|
||||
|
||||
#### Kelas Penyimpanan Disk Azure yang Tidak Dikelola
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/azure-disk
|
||||
parameters:
|
||||
skuName: Standard_LRS
|
||||
location: eastus
|
||||
storageAccount: azure_storage_account_name
|
||||
```
|
||||
|
||||
* `skuName`: Akun penyimpanan Azure yang ada pada tingkatan Sku. Nilai _default_-nya adalah kosong.
|
||||
* `location`: Lokasi akun penyimpanan Azure. Nilai _default_-nya adalah kosong.
|
||||
* `storageAccount`: Nama akun penyimpanan Azure. Jika sebuan akun penyimpanan disediakan,
|
||||
akun tersebut haruslah berada pada grup sumber daya yang ada dengan kluster,
|
||||
dan `location` akan diabaikan. Jika sebuah akun penyimpanan tidak disediakan, sebuah akun penyimpanan
|
||||
baru akan dibuat pada grup sumber daya yang ada dengan kluster.
|
||||
|
||||
#### Kelas Penyimpanan Disk Azure yang Baru (mulai versi v1.7.2)
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/azure-disk
|
||||
parameters:
|
||||
storageaccounttype: Standard_LRS
|
||||
kind: Shared
|
||||
```
|
||||
|
||||
* `storageaccounttype`: Akun penyimpanan Azure yang ada pada tingkatan Sku. Nilai _default_-nya adalah kosong.
|
||||
* `kind`: Nilai yang mungkin adalah `shared` (default), `dedicated`, dan `managed`.
|
||||
Ketika `kind` yang digunakan adalah `shared`, semua disk yang tidak di-_manage_ akan
|
||||
dibuat pada beberapa akun penyimpanan yang ada pada grup sumber daya yang sama dengan kluster.
|
||||
Ketika `kind` yang digunakan adalah `dedicated`, sebuah akun penyimpanan
|
||||
baru akan dibuat pada grup sumber daya yang ada dengan kluster. Ketika `kind` yang digunakan adalah
|
||||
`managed`, semua disk yang dikelola akan dibuat pada grup sumber daya yang ada dengan kluster.
|
||||
|
||||
- VM premium dapat di-_attach_ baik pada Standard_LRS dan Premium_LRS disks, sementara Standard
|
||||
VM hanya dapat di-_attach_ pada disk Standard_LRS.
|
||||
- VM yang dikelola hanya dapat meng-_attach_ disk yang dikelola dan VM yang tidak dikelola hanya dapat
|
||||
meng-_attach_ disk yang tidak dikelola.
|
||||
|
||||
### Berkas Azure
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: azurefile
|
||||
provisioner: kubernetes.io/azure-file
|
||||
parameters:
|
||||
skuName: Standard_LRS
|
||||
location: eastus
|
||||
storageAccount: azure_storage_account_name
|
||||
```
|
||||
|
||||
* `skuName`: Akun penyimpanan Azure yang ada pada tingkatan Sku. Nilai _default_-nya adalah kosong.
|
||||
* `location`: Lokasi akun penyimpanan Azure. Nilai _default_-nya adalah kosong.
|
||||
* `storageAccount`: Nama akun penyimpanan Azure. Nilai _default_-nya adalah kosong. Jika sebuah penyimpanan
|
||||
tidak memiliki sebuah akun yang disediakan, semua akun penyimpanan yang diasosiasikan dengan
|
||||
grup sumber daya yang ada dan kemudian melakukan pencarian terhadap akun yang sesuai dengan
|
||||
`skuName` dan `location`. Jika sebuah akun penyimpanan disediakan, akun tersebut haruslah berada
|
||||
di dalam grup sumber daya yang sama dengan kluster, serta `skuName` dan `location` akan diabaikan.
|
||||
|
||||
Selama _provision_, sebuah secret dibuat untuk menyimpan _credentials_. Jika kluster
|
||||
menggunakan konsep [RBAC](/docs/reference/access-authn-authz/rbac/) dan
|
||||
[_Roles_ Controller](/docs/reference/access-authn-authz/rbac/#controller-roles),
|
||||
menambahkan kapabilitas `create` untuk sumber daya `secret` bagi clusterrole
|
||||
`system:controller:persistent-volume-binder`.
|
||||
|
||||
### Volume Portworx
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: portworx-io-priority-high
|
||||
provisioner: kubernetes.io/portworx-volume
|
||||
parameters:
|
||||
repl: "1"
|
||||
snap_interval: "70"
|
||||
io_priority: "high"
|
||||
|
||||
```
|
||||
|
||||
* `fs`: filesystem yang akan digunakan: `none/xfs/ext4` (nilai default-nya: `ext4`).
|
||||
* `block_size`: ukuran block dalam Kbytes (nilai _default_-nya: `32`).
|
||||
* `repl`: jumlah replika _synchronous_ yang dapat disediakan dalam bentuk
|
||||
faktor replikasi `1..3` (nilai _default_-nya: `1`) Nilai yang diharapkan dalam bentuk String
|
||||
`"1"` dan bukan `1`.
|
||||
* `io_priority`: menentukan apakah volume yang dibuat akan dari penyimpanan dengan kualitas
|
||||
tinggi atau rendah dengan urutan prioritas `high/medium/low` (nilai _default_-nya: `low`).
|
||||
* `snap_interval`: interval waktu dalam menit yang digunakan untuk melakukan _trigger_ _snapshots_.
|
||||
_Snapshots_ dibuat secara inkremen berdasarkan perbedaan yang ada dengan _snapshot_ yang dibuat sebelumnya,
|
||||
nilai perbedaan 0 akan menonaktifkan pembuatan _snapshot_ (nilai default-nya: `0`). Sebuah string merupakan nilai
|
||||
yang diharapkan `"70"` dan bukan `70`.
|
||||
* `aggregation_level`: menspesifikasikan jumlah _chunks_ dimana volume akan didistribusikan,
|
||||
0 mengindikasikan volume yang _non-aggregate_ (nilai default-nya: `0`). Sebuah string merupakan nilai
|
||||
yang diharapkan `"0"` dan bukan `0`.
|
||||
* `ephemeral`: menentukan apakah volume harus dihapus setelah di-_unmount_
|
||||
atau harus tetap ada. Penggunaan `emptyDir` dapat diubah menjadi true dan penggunaan
|
||||
`persistent volumes` untuk basisdata seperti Cassandra harus diubah menjadi false`,
|
||||
true/false` (nilai default-nya: `false`). Sebuah string merupakan nilai
|
||||
yang diharapkan `"true"` dan bukan `true`.
|
||||
|
||||
### ScaleIO
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: slow
|
||||
provisioner: kubernetes.io/scaleio
|
||||
parameters:
|
||||
gateway: https://192.168.99.200:443/api
|
||||
system: scaleio
|
||||
protectionDomain: pd0
|
||||
storagePool: sp1
|
||||
storageMode: ThinProvisioned
|
||||
secretRef: sio-secret
|
||||
readOnly: false
|
||||
fsType: xfs
|
||||
```
|
||||
|
||||
* `provisioner`: atribut yang nilainya merupakan `kubernetes.io/scaleio`
|
||||
* `gateway`: alamat _gateway_ ScaleIO (wajib)
|
||||
* `system`: nama sistem ScaleIO (wajib)
|
||||
* `protectionDomain`: nama domain proteksi ScaleIO (wajib)
|
||||
* `storagePool`: nama pool volume penyimpanan (wajib)
|
||||
* `storageMode`: mode _provisioning_ penyimpanan: `ThinProvisioned` (default) atau
|
||||
`ThickProvisioned`
|
||||
* `secretRef`: penunjuk pada objek Secret yang dikonfigurasi (wajib)
|
||||
* `readOnly`: menentukan mode akses terhadap volume yang di-_mount_ (nilai default-nya: false)
|
||||
* `fsType`: filesystem yang digunakan untuk volume (nilai default-nya: ext4)
|
||||
|
||||
Plugin volume ScaleIO Kubernetes membutuhkan objek Secret yang suda dikonfigurasi sebelumnya.
|
||||
Secret ini harus dibuat dengan tipe `kubernetes.io/scaleio` dan menggunakan namespace yang sama
|
||||
dengan PVC yang dirujuk, seperti ditunjukkan pada contoh yang ada:
|
||||
|
||||
```shell
|
||||
kubectl create secret generic sio-secret --type="kubernetes.io/scaleio" \
|
||||
--from-literal=username=sioadmin --from-literal=password=d2NABDNjMA== \
|
||||
--namespace=default
|
||||
```
|
||||
|
||||
### StorageOS
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: fast
|
||||
provisioner: kubernetes.io/storageos
|
||||
parameters:
|
||||
pool: default
|
||||
description: Kubernetes volume
|
||||
fsType: ext4
|
||||
adminSecretNamespace: default
|
||||
adminSecretName: storageos-secret
|
||||
```
|
||||
|
||||
* `pool`: Nama kapasitas distribusi StorageOS yang digunakan untuk melakukan
|
||||
_provisioning_ volume. _Pool_ default akan digunakan apabila nilainya tidak dispesifikasikan.
|
||||
* `description`: Deskripsi untuk melakukan _assignment_ volume yang baru dibuat secara dinamis.
|
||||
Semua deskripsi volume akan bernilai sama untuk kelas penyimpanan yang sama, meskipun begitu
|
||||
kelas penyimpanan yang berbeda dapat digunakan untuk membuat deskripsi yang berbeda untuk penggunaan
|
||||
yang berbeda. Nilai default-nya adalah `Kubernetes volume`.
|
||||
* `fsType`: Tipe filesystem default yang digunakan. Perhatikan bahwa aturan
|
||||
yang didefinisikan oleh pengguna di dalam StirageOS dapat meng-_override_ nilai ini.
|
||||
Nilai default-nya adalah `ext4`.
|
||||
* `adminSecretNamespace`: Namespace dimana konfigurasi secret API berada. Hal ini bersifat wajib
|
||||
apabila adminSecretName diaktifkan.
|
||||
* `adminSecretName`: Nama secret yang digunakan untuk memperoleh _credentials_ StorageOS
|
||||
API. Jika tidak dispesifikasikan, nilaidefault akan digunakan.
|
||||
|
||||
Plugin volume dapat menggunakan objek Secret untuk menspesifikasikan
|
||||
endpoint dan kredensial yang digunakan untuk mengakses API StorageOS.
|
||||
Hal ini hanya akan dibutuhkan apabila terdapat perubahan pada nilai _default_.
|
||||
Secret ini harus dibuat dengan tipe `kubernetes.io/storageos`,
|
||||
seperti ditunjukkan pada contoh yang ada:
|
||||
|
||||
```shell
|
||||
kubectl create secret generic storageos-secret \
|
||||
--type="kubernetes.io/storageos" \
|
||||
--from-literal=apiAddress=tcp://localhost:5705 \
|
||||
--from-literal=apiUsername=storageos \
|
||||
--from-literal=apiPassword=storageos \
|
||||
--namespace=default
|
||||
```
|
||||
|
||||
Secret yang digunakan untuk melakukan _provisioning_ volume secara dinamis
|
||||
dapat dibuat di namespace apapun dan dirujuk dengan menggunakan parameter `adminSecretNamespace`.
|
||||
Secret yang digunakan oleh volume yang sedang di-_provisioning_ harus dibuat pada namespace yang sama
|
||||
dengan PVC yang merujuk secret tersebut.
|
||||
|
||||
### Lokal
|
||||
|
||||
{{< feature-state for_k8s_version="v1.14" state="stable" >}}
|
||||
|
||||
```yaml
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
name: local-storage
|
||||
provisioner: kubernetes.io/no-provisioner
|
||||
volumeBindingMode: WaitForFirstConsumer
|
||||
```
|
||||
|
||||
Volume lokal tidak mendukung adanya _provisioning_ secara dinamis,
|
||||
meskipun begitu sebuah StorageClass akan tetap dibuat untuk mencegah terjadinya _bind_ volume
|
||||
sampai _scheduling_ pod dilakukan. Hal ini dispesifikasikan oleh mode _binding_ volume
|
||||
`WaitForFirstConsumer`.
|
||||
|
||||
Memperlambat _binding_ volume mengizinkan _scheduler_ untuk memastikan
|
||||
batasan _scheduling_ semua pod ketika memilih PersistentVolume untuk sebuah PersistentVolumeClaim.
|
||||
|
||||
{{% /capture %}}
|
|
@ -16,4 +16,3 @@ tags:
|
|||
<!--more-->
|
||||
|
||||
Selalu perhatikan mekanisme untuk mem-<i>backup</i> data etcd pada kluster Kubernetes kamu. Untuk informasi lebih lanjut tentang etcd, lihat [dokumentasi etcd](https://github.com/coreos/etcd/blob/master/Documentation/docs.md).
|
||||
|
||||
|
|
Loading…
Reference in New Issue