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.
This commit is contained in:
committed by
Kubernetes Prow Robot
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-->
|
<!--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).
|
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).
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user