Dokumen ini mendeskripsikan konsep StorageClass yang ada pada Kubernetes. Sebelum lanjut membaca, sangat dianjurkan untuk memiliki pengetahuan terhadap volumes dan peristent volume terlebih dahulu.
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 klaster. 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.
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
untuk penjelasan lebih lanjut.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
mountOptions:
- debug
volumeBindingMode: Immediate
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 |
AzureFile | ✓ | Azure File |
AzureDisk | ✓ | Azure Disk |
CephFS | - | - |
Cinder | ✓ | OpenStack Cinder |
FC | - | - |
Flexvolume | - | - |
Flocker | ✓ | - |
GCEPersistentDisk | ✓ | GCE PD |
Glusterfs | ✓ | Glusterfs |
iSCSI | - | - |
Quobyte | ✓ | Quobyte |
NFS | - | - |
RBD | ✓ | Ceph RBD |
VsphereVolume | ✓ | vSphere |
PortworxVolume | ✓ | Portworx Volume |
ScaleIO | ✓ | ScaleIO |
StorageOS | ✓ | StorageOS |
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 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 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. Di sana juga terdapat beberapa kasus dimana vendor penyimpanan 3rd party menyediakan provisioner eksternal yang mereka sediakan sendiri.
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.
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.
Field volumeBindingMode
mengontrol kapan mekanisme binding volume dan
provisioning dinamis
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 klaster, 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 klaster 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,
node selector,
afinitas dan
anti-afinitas Pod,
serta taint dan toleration.
Beberapa plugin di bawah ini mendukung WaitForFirstConsumer
dengan provisioning
dinamis:
Beberapa plugin di bawah ini mendukung WaitForFirstConsumer
dengan binding
PersistentVolume yang terlebih dahulu dibuat:
Kubernetes 1.14
beta
beta
(misalnya v2beta3
).Volume-volume 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.
Ketika sebuah operator klaster 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.
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
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.
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
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 klaster 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 klaster 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.
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.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 klaster 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 klaster 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)
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 klaster Kubernetes.
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 sudahdeprecated, 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.
clusterid
: 630372ccdc720a92c681fb928f27b53f
merupakan ID dari klaster
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.
Untuk informasi lebih lanjut, kamu dapat membaca Bagaimana Cara Mengatur Heketi.
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.
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 klaster Kubernetes memiliki sebuah node.Catatan:FEATURE STATE:Kubernetes 1.11
deprecatedFitur ini deprecated. Untuk informasi lebih lanjut mengenai tingkatan ini, silahkan merujuk pada Kubernetes Deprecation PolicyProvisioner internal OpenStack ini sudah deprecated. Kamu dapat menggunakan provider eksternal penyedia layanan cloud untuk OpenStack.
Buatlah sebuah StorageClass dengan menggunakan sebuah format disk yang dispesifikasikan oleh pengguna.
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"
.
Buatlah sebuah StorageClass dengan menggunakan sebuah format disk pada datastore yang dispesifikasikan oleh pengguna.
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.
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 untuk detil lebih lanjut mengenai penggunaan policy penyimpanan untuk manajemen persistent volume.
Terdapat beberapa contoh vSphere yang dapat kamu gunakan untuk mencoba manajemen persistent volume di dalam Kubernetes untuk vSpehere.
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:
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.
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:
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”.
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 klaster,
dan location
akan diabaikan. Jika sebuah akun penyimpanan tidak disediakan, sebuah akun penyimpanan
baru akan dibuat pada grup sumber daya yang ada dengan klaster.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 klaster.
Ketika kind
yang digunakan adalah dedicated
, sebuah akun penyimpanan
baru akan dibuat pada grup sumber daya yang ada dengan klaster. Ketika kind
yang digunakan adalah
managed
, semua disk yang dikelola akan dibuat pada grup sumber daya yang ada dengan klaster.
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.
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 klaster, serta skuName
dan location
akan diabaikan.Selama provision, sebuah secret dibuat untuk menyimpan credentials. Jika klaster
menggunakan konsep RBAC dan
Roles Controller,
menambahkan kapabilitas create
untuk sumber daya secret
bagi clusterrole
system:controller:persistent-volume-binder
.
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
.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:
kubectl create secret generic sio-secret --type="kubernetes.io/scaleio" \
--from-literal=username=sioadmin --from-literal=password=d2NABDNjMA== \
--namespace=default
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:
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.
Kubernetes v1.14
stable
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.
Apakah halaman ini berguna?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.