diff --git a/content/id/docs/concepts/storage/volume-snapshots.md b/content/id/docs/concepts/storage/volume-snapshots.md new file mode 100644 index 0000000000000..30697bdfd41c9 --- /dev/null +++ b/content/id/docs/concepts/storage/volume-snapshots.md @@ -0,0 +1,132 @@ +--- +title: VolumeSnapshot +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} +Laman ini menjelaskan tentang fitur VolumeSnapshot pada Kubernetes. Sebelum lanjut membaca, sangat disarankan untuk memahami [PersistentVolume](/docs/concepts/storage/persistent-volumes/) terlebih dahulu. + +{{% /capture %}} + + +{{% capture body %}} + +## Pengenalan + +Seperti halnya sumber daya API PersistentVolume dan PersistentVolumeClaim yang digunakan oleh para pengguna dan administrator untuk menyediakan volume, sumber daya API VolumeSnapshotContent dan VolumeSnapshot digunakan mereka untuk membuat _snapshot_ volume. + +VolumeSnapshotContent merupakan suatu _snapshot_ yang diambil dari sebuah volume dari dalam kluster yang telah disediakan oleh administrator. Sepert layaknya PersistentVolume, VolumeSnapshotContent juga merupakan bagian dari sumber daya kluster. + +VolumeSnapshot merupakan suatu permintaan _snapshot_ dari volume oleh pengguna. Mirip seperti halnya PersistentVolumeClaim. + +Walaupun VolumeSnapshot membuat pengguna bisa mengonsumsi abstraksi dari sumber daya penyimpanan, administrator kluster tetap perlu +menawarkan berbagai macam tipe VolumeSnapshotContent, tanpa perlu mengekspos pengguna pada detail bagaimana _snapshot_ +volume tersebut harus tersediakan. Bagi yang memerlukan hal ini, ada yang namanya sumber daya VolumeSnapshotClass. + +Para pengguna tetap perlu mengetahui beberapa hal di bawah ketika menggunakan fitur ini: + +* Objek API VolumeSnapshot, VolumeSnapshotContent, dan VolumeSnapshotClass adalah CRD, bukan bagian dari API inti. +* Fitur VolumeSnapshot hanya tersedia untuk CSI _driver_. +* Sebagai bagian dari proses _deploy_, tim Kubernetes menyediakan Container _sidecar_ bantuan untuk _controller snapshot_ berrnama `external-snapshotter`. Container ini melakukan _watch_ pada objek VolumeSnapshot dan memicu operasi CreateSnapshot dan DeleteSnapshot terhadap sebuah _endpoint_ CSI. +* _Driver_ CSI ada yang telah implementasi fitur VolumeSnapshot, ada juga yang belum. _Driver_ CSI yang telah menyediakan dukungan terhadap fitur VolumeSnapshot kemungkinan besar menggunakan `external-snapshotter`. +* _Driver_ CSI yang mendukung VolumeSnapshot akan secara otomatis melakukan instalasi CRD untuk VolumeSnapshot. + +## Siklus hidup VolumeSnapshot dan VolumeSnapshotContent + +VolumeSnapshotContent merupakan bagian dari sumber daya kluster. VolumeSnapshot merupakan permintaan terhadap sumber daya tersebut. Interaksi antara VolumeSnapshotContent dan VolumeSnapshot mengikuti siklus hidup berikut ini: + +### Penyediaan VolumeSnapshot + +Ada dua cara untuk menyediakan _snapshot_: secara statis maupun dinamis. + +#### Statis +Seorang adminstrator kluster membuat beberapa VolumeSnapshotContent, yang masing-masing memiliki detail tentang penyimpanan sebenarnya yang dapat dipergunakan oleh para pengguna. VolumeSnapshotContent tersebut dapat dikonsumsi melalui API Kubernetes. + +#### Dinamis +Ketika VolumeSnapshotContent yang dibuat oleh administrator tidak ada yang sesuai dengan VolumeSnapshot yang dibuat pengguna, kluster bisa saja +mencoba untuk menyediakan sebuah VolumeSnapshot secara dinamis, khususnya untuk objek VolumeSnapshot. +Proses penyediaan ini berdasarkan VolumeSnapshotClasses: VolumeSnapshot harus meminta sebuah [VolumeSnapshotClass]((/docs/concepts/storage/volume-snapshot-classes/)) +dan administrator harus membuat serta mengatur _class_ tersebut supaya penyediaan dinamis bisa terjadi. + +### Ikatan (_Binding_) + +Seorang pengguna akan membuat (atau telah membuat, dalam kasus penyediaan dinamis) sebuah VolumeSnapshot dengan ukuran penyimpanan yang diminta beserta mode akses tertentu. Suatu _loop_ kontrol melakukan _watch_ terhadap VolumeSnapshot baru, mencari VolumeSnapshotContent yang sesuai (jika memungkinkan), dan mengikat (_bind_) keduanya. Jika VolumeSnapshotContent secara dinamis disediakan untuk VolumeSnapshot yang baru, +_loop_ akan terus mengikat VolumeSnapshotContent dengan VolumeSnapshot. Ketika telah terikat (_bound_), VolumeSnapshot _bind_ bersifat eksklusif, terlepas dari bagaimana proses _bind_ dilakukan. Ikatan (_binding_) antara suatu VolumeSnapshot dengan VolumeSnapshotContent bersifat 1:1 _mapping_. + +VolumeSnapshot akan tetap tidak terikat (_unbound_) tanpa ada batas waktu, jika VolumeSnapshotContent yang sesuai tidak ditemukan. VolumeSnapshot akan menjadi terikat (_bound_) ketika VolumeSnapshotContent yang sesuai menjadi ada. + +### PersistentVolumeClaim dengan _in-Use Protection_ + +Tujuan dari objek PersistentVolumeClaim dengan fitur _in Use Protection_ adalah memastikan objek API PVC yang masih dalam penggunaan (_in-use_) tidak akan dihilangkan dari sistem (penghilangan akan menyebabkan hilangnya data). + +Jika sebuah PVC sedang digunakan secara aktif oleh proses _snapshot_ yang digunakan sebagai sumbernya (_source_), artinya PVC sedang dalam penggunaan (_in-use_). Jika seorang pengguna menghapus suatu objek API PVC saat dalam penggunaan sebagai sumber _snapshot_, objek PVC tidak akan dihilangkan segera. Namun, penghapusan objek PVC akan ditunda sampai PVCC tidak lagi secara aktif digunakan oleh proses _snapshot_ manapun. Suatu PVC tidak lagi diguunakan sebagai suumber _snapshot_ ketika `ReadyToUse` dari `Status` _snapshot_ menjadi `true`. + +### Penghapusan + +Proses penghapusan akan menghilangkan objek VolumeSnapshot dari API Kubernetes, beserta aset penyimpanan terkait pada infrastruktur eksternal. + +## VolumeSnapshotContent + +Setiap VolumeSnapshotContent memiliki sebuah _spec_, yang merepresentasikan spesifikasi dari _snapshot_ volume tersebut. + +```yaml +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotContent +metadata: + name: new-snapshot-content-test +spec: + snapshotClassName: csi-hostpath-snapclass + source: + name: pvc-test + kind: PersistentVolumeClaim + volumeSnapshotSource: + csiVolumeSnapshotSource: + creationTime: 1535478900692119403 + driver: csi-hostpath + restoreSize: 10Gi + snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002 +``` + +### _Class_ + +Suatu VolumeSnapshotContent dapat memiliki suatu _class_, yang didapat dengan mengatur atribut +`snapshotClassName` dengan nama dari [VolumeSnapshotClass](/docs/concepts/storage/volume-snapshot-classes/). +VolumeSnapshotContent dari _class_ tertentu hanya dapat terikat (_bound_) dengan VolumeSnapshot yang +"meminta" _class_ tersebut. VolumeSnapshotContent tanpa `snapshotClassName` tidak memiliki _class_ dan hanya dapat +terikat (_bound_) dengan VolumeSnapshot yang "meminta" untuk tidak menggunakan _class_. + +## VolumeSnapshot + +Masing-masing VolumeSnapshot memiliki sebuah _spec_ dan status, yang merepresentasikan spesifikasi dan status dari _snapshot_ volume tersebut. + +```yaml +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshot +metadata: + name: new-snapshot-test +spec: + snapshotClassName: csi-hostpath-snapclass + source: + name: pvc-test + kind: PersistentVolumeClaim +``` + +### _Class_ + +Suatu VolumeSnapshot dapat meminta sebuah _class_ tertentu dengan mengatur nama dari +[VolumeSnapshotClass](/docs/concepts/storage/volume-snapshot-classes/) +menggunakan atribut `snapshotClassName`. +Hanya VolumeSnapshotContent dari _class_ yang diminta, memiliki `snapshotClassName` yang sama +dengan VolumeSnapshot, dapat terikat (_bound_) dengan VolumeSnapshot tersebut. + +## Penyediaan (_Provisioning_) Volume dari _Snapshot_ + +Kamu dapat menyediakan sebuah volume baru, yang telah terisi dengan data dari suatu _snapshot_, dengan +menggunakan _field_ `dataSource` pada objek PersistentVolumeClaim. + +Untuk detailnya bisa dilihat pada [VolumeSnapshot and Mengembalikan Volume dari _Snapshot_](/docs/concepts/storage/persistent-volumes/#volume-snapshot-and-restore-volume-from-snapshot-support). + +{{% /capture %}}