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
Irvi Aini 2019-09-30 17:05:40 +02:00 committed by Kubernetes Prow Robot
parent d0abaa9f0d
commit 2ec966509e
2 changed files with 788 additions and 1 deletions

View File

@ -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 %}}

View File

@ -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).