Skip to content

Commit c913cc9

Browse files
authored
Merge pull request #21389 from mufti1/id-configure-persistent-volume-storage
id add bahasa translation for task configure persistent volume storage
2 parents 7f3041a + 31b6ae2 commit c913cc9

File tree

4 files changed

+327
-0
lines changed

4 files changed

+327
-0
lines changed
Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
---
2+
title: Mengatur Pod untuk Penyimpanan dengan PersistentVolume
3+
content_template: templates/task
4+
weight: 60
5+
---
6+
7+
{{% capture overview %}}
8+
9+
Laman ini akan menjelaskan bagaimana kamu dapat mengatur sebuah Pod dengan menggunakan
10+
{{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}}
11+
untuk penyimpanan.
12+
Berikut ringkasan prosesnya:
13+
14+
1. Kamu, sebagai seorang administrator klaster, membuat sebuah PersistentVolume yang didukung oleh penyimpanan
15+
fisik. Kamu tidak mengaitkan volume dengan Pod apapun.
16+
17+
2. Kamu, sekarang mengambil peran sebagai seorang _developer_ / pengguna klaster, membuat sebuah
18+
PersistentVolumeClaim yang secara otomatis terikat dengan PersistentVolume yang sesuai.
19+
20+
3. Kamu membuat sebuah Pod yang menggunakan PersistentVolumeClaim di atas untuk penyimpanan.
21+
22+
{{% /capture %}}
23+
24+
{{% capture prerequisites %}}
25+
26+
* Kamu membutuhkan sebuah klaster Kubernetes yang hanya memiliki satu Node, dan
27+
{{< glossary_tooltip text="kubectl" term_id="kubectl" >}}
28+
alat baris perintah yang sudah diatur untuk berkomunikasi dengan klaster kamu. Jika kamu
29+
tidak memiliki sebuah klaster dengan Node tunggal, kamu dapat membuatnya dengan
30+
[Minikube](/docs/getting-started-guides/minikube).
31+
32+
* Familiar dengan materi di
33+
[Persistent Volumes](/id/docs/concepts/storage/persistent-volumes/).
34+
35+
{{% /capture %}}
36+
37+
{{% capture steps %}}
38+
39+
## Membuat sebuah berkas index.html di dalam Node kamu
40+
41+
Buka sebuah _shell_ ke Node tunggal di klaster kamu. Bagaimana kamu membuka sebuah _shell_ tergantung
42+
dengan bagaimana kamu mengatur klaster kamu. Contoh, jika kamu menggunakan Minikube, kamu
43+
dapat membuka sebuah _shell_ ke Node kamu dengan memasukkan `minikube ssh`.
44+
45+
Di dalam _shell_ kamu pada Node itu, buat sebuah direktori dengan nama `/mnt/data`:
46+
47+
```shell
48+
# Asumsikan Node kamu menggunakan "sudo" untuk menjalankan perintah
49+
# sebagai superuser
50+
sudo mkdir /mnt/data
51+
```
52+
53+
54+
Di dalam direktori `/mnt/data`, buat sebuah berkas dengan nama `index.html`:
55+
56+
```shell
57+
# Disini kembali asumsikan bahwa Node kamu menggunakan "sudo" untuk menjalankan perintah
58+
# sebagai superuser
59+
sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
60+
```
61+
62+
{{< note >}}
63+
Jika Node kamu menggunakan alat untuk mengakses _superuser_ selain dengan `sudo`, kamu dapat
64+
membuat ini bekerja jika mengganti `sudo` dengan nama dari alat lainnya.
65+
{{< /note >}}
66+
67+
Menguji bahwa berkas `index.html` ada:
68+
69+
```shell
70+
cat /mnt/data/index.html
71+
```
72+
73+
Keluaran akan seperti ini:
74+
```
75+
Hello from Kubernetes storage
76+
```
77+
78+
Sekarang kamu dapat menutup _shell_ di Node kamu.
79+
80+
## Membuat sebuah PersistentVolume
81+
82+
Pada latihan ini, kamu akan membuat sebuah *hostPath* PersistentVolume. Kubernetes mendukung
83+
hostPath untuk pengembangan dan pengujian di dalam klaster Node tunggal. Sebuah hostPath
84+
PersistentVolume menggunakan berkas atau direktori di dalam Node untuk meniru penyimpanan terhubung jaringan (NAS, _network-attached storage_).
85+
86+
Di dalam klaster _production_, kamu tidak dapat menggunakan hostPath. Sebagai gantinya sebuah administrator klaster
87+
akan menyediakan sumberdaya jaringan seperti Google Compute Engine _persistent disk_,
88+
_NFS share_, atau sebuah Amazon Elastic Block Store volume. Administrator klaster juga dapat
89+
menggunakan [StorageClass](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#storageclass-v1-storage)
90+
untuk mengatur
91+
[_provisioning_ secara dinamis](https://kubernetes.io/blog/2016/10/dynamic-provisioning-and-storage-in-kubernetes).
92+
93+
Berikut berkas konfigurasi untuk hostPath PersistentVolume:
94+
95+
{{< codenew file="pods/storage/pv-volume.yaml" >}}
96+
97+
Berkas konfigurasi tersebut menentukan bahwa volume berada di `/mnt/data` pada
98+
klaster Node. Konfigurasi tersebut juga menentukan ukuran dari 10 gibibytes dan
99+
mode akses `ReadWriteOnce`, yang berarti volume dapat di pasang sebagai
100+
_read-write_ oleh Node tunggal. Konfigurasi ini menggunakan [nama dari StorageClass](/id/docs/concepts/storage/persistent-volumes/#kelas)
101+
`manual` untuk PersistentVolume, yang akan digunakan untuk mengikat
102+
permintaan PeristentVolumeClaim ke PersistentVolume ini.
103+
104+
Membuat sebuah PersistentVolume:
105+
106+
```shell
107+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml
108+
```
109+
110+
Melihat informasi tentang PersistentVolume:
111+
112+
```shell
113+
kubectl get pv task-pv-volume
114+
```
115+
116+
Keluaran menunjuk PersistentVolume memliki sebuah `STATUS` dari `Available`. Ini
117+
berarti PersistentVolume belum terikat ke PersistentVolumeClaim.
118+
119+
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
120+
task-pv-volume 10Gi RWO Retain Available manual 4s
121+
122+
## Membuat sebuah PersistentVolumeClaim
123+
124+
Langkah selanjutnya adalah membuat sebuah PersistentVolumeClaim. Pod menggunakan PersistentVolumeClaim
125+
untuk meminta penyimpanan fisik. Pada latihan ini, kamu akan membuat sebuah PersistentVolumeClaim
126+
yang meminta sebuah volume minimal tiga gibibytes dengan mode akses _read-write_
127+
setidaknya untuk satu Node.
128+
129+
Berikut berkas konfigurasi untuk PersistentVolumeClaim:
130+
131+
{{< codenew file="pods/storage/pv-claim.yaml" >}}
132+
133+
Membuat sebuah PersistentVolumeClaim:
134+
135+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
136+
137+
Setelah membuat sebuah PersistentVolumeClaim, Kubernetes _control plane_ terlihat
138+
untuk sebuah PersistentVolumeClaim yang memenuhi persyaratan _claim's_. Jika
139+
_control plane_ menemukan PersistentVolume yang cocok dengan StorageClass, maka
140+
akan mengikat _claim_ ke dalam volume tersebut.
141+
142+
Lihat kembali PersistentVolume:
143+
144+
```shell
145+
kubectl get pv task-pv-volume
146+
```
147+
148+
Sekarang keluaran menunjukan sebuah `STATUS` dari `Bound`.
149+
150+
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
151+
task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 2m
152+
153+
Lihat PersistentVolumeClaim:
154+
155+
```shell
156+
kubectl get pvc task-pv-claim
157+
```
158+
159+
Keluaran menunjukan PersistentVolumeClaim terlah terikat dengan PersistentVolume,
160+
`task-pv-volume`.
161+
162+
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
163+
task-pv-claim Bound task-pv-volume 10Gi RWO manual 30s
164+
165+
## Membuat sebuah Pod
166+
167+
Langkah selanjutnya adalah membuat sebuah Pod yang akan menggunakan PersistentVolumeClaim sebagai volume.
168+
169+
Berikut berkas konfigurasi untuk Pod:
170+
171+
{{< codenew file="pods/storage/pv-pod.yaml" >}}
172+
173+
Perhatikan bahwa berkas konfigurasi Pod menentukan sebuah PersistentVolumeClaim, tetapi
174+
tidak menentukan PeristentVolume. Dari sudut pandang Pod, _claim_ adalah volume.
175+
176+
Membuat Pod:
177+
178+
```shell
179+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-pod.yaml
180+
```
181+
182+
Pastikan bahwa Container di dalam Pod berjalan:
183+
184+
```shell
185+
kubectl get pod task-pv-pod
186+
```
187+
188+
Mendapatkan sebuah _shell_ ke Container yang sedang berjalan di Pod kamu:
189+
190+
```shell
191+
kubectl exec -it task-pv-pod -- /bin/bash
192+
```
193+
194+
Di dalam _shell_, pastikan bahwa nginx menyajikan berkas `index.html` dari dalam
195+
hostPath volume:
196+
197+
```shell
198+
# Pastikan kamu menjalankan 3 perintah ini di dalam shell root yang berasal dari
199+
# "kubectl exec" dari langkah sebelumnya
200+
apt update
201+
apt install curl
202+
curl http://localhost/
203+
```
204+
205+
Keluaran akan menunjukan sebuah teks yang telah kamu tulis di berkas `index.html`
206+
di dalam hostPath volume:
207+
208+
Hello from Kubernetes storage
209+
210+
211+
Jika kamu melihat pesan tersebut, kamu telah berhasil mengatur sebuah Pod
212+
untuk menggunakan penyimpanan dari PersistentVolumeClaim.
213+
214+
## Membersihkan
215+
216+
Hapus Pod, PersistentVolumeClaim dan PersistentVolume:
217+
218+
```shell
219+
kubectl delete pod task-pv-pod
220+
kubectl delete pvc task-pv-claim
221+
kubectl delete pv task-pv-volume
222+
```
223+
224+
Jika kamu belum memiliki _shell_ yang telah dibuka ke Node di klaster kamu,
225+
buka _shell_ baru dengan cara yang sama yang telah kamu lakukan sebelumnya.
226+
227+
Di dalam _shell_ Node kamu, hapus berkas dan direktori yang telah kamu buat:
228+
229+
```shell
230+
# Asumsikan Node kamu menggunakan "sudo" untuk menjalankan perintah
231+
# sebagai superuser
232+
sudo rm /mnt/data/index.html
233+
sudo rmdir /mnt/data
234+
```
235+
236+
Sekarang kamu dapat menutup _shell_ Node kamu.
237+
238+
{{% /capture %}}
239+
240+
241+
{{% capture discussion %}}
242+
243+
## Kontrol akses
244+
245+
Penyimpanan yang telah terkonfigurasi dengan group ID (GID) memungkinkan akses menulis hanya dari Pod yang menggunakan
246+
GID yang sama. GID yang tidak cocok atau hilang akan menyebabkan kesalahan izin ditolak. Untuk mengurangi
247+
kebutuhan koordinasi dengan pengguna, administrator dapat membuat anotasi sebuah PersistentVolume
248+
dengan GID. Kemudian GID akan otomatis ditambahkan ke Pod yang menggunakan PersistentVolume.
249+
250+
Gunakan anotasi `pv.beta.kubernetes.io/gid` sebagai berikut:
251+
```yaml
252+
apiVersion: v1
253+
kind: PersistentVolume
254+
metadata:
255+
name: pv1
256+
annotations:
257+
pv.beta.kubernetes.io/gid: "1234"
258+
```
259+
Ketika sebuah Pod mengkonsumsi PersistentVolume yang memiliki anotasi GID, anotasi GID tersebut
260+
akan diterapkan ke semua container di dalam Pod dengan cara yang sama yang ditentukan di dalam GID Pod security context.
261+
Settiap GID, baik berasal dari anotasi PersistentVolume atau Pod, diterapkan pada proses pertama yang dijalankan
262+
di setiap container.
263+
264+
{{< note >}}
265+
Ketika sebuah Pod mengkonsumsi PersistentVolume, GID yang terkait dengan PersistentVolume
266+
tidak ada di dalam sumberdaya Pod itu sendiri.
267+
{{< /note >}}
268+
269+
{{% /capture %}}
270+
271+
272+
{{% capture whatsnext %}}
273+
274+
* Belajar lebih lanjut tentang [PersistentVolume](/id/docs/concepts/storage/persistent-volumes/).
275+
* Baca [dokumen perancangan Penyimpanan _Persistent_](https://git.k8s.io/community/contributors/design-proposals/storage/persistent-storage.md).
276+
277+
### Referensi
278+
279+
* [PersistentVolume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolume-v1-core)
280+
* [PersistentVolumeSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumespec-v1-core)
281+
* [PersistentVolumeClaim](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaim-v1-core)
282+
* [PersistentVolumeClaimSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaimspec-v1-core)
283+
284+
{{% /capture %}}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: task-pv-claim
5+
spec:
6+
storageClassName: manual
7+
accessModes:
8+
- ReadWriteOnce
9+
resources:
10+
requests:
11+
storage: 3Gi
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: task-pv-pod
5+
spec:
6+
volumes:
7+
- name: task-pv-storage
8+
persistentVolumeClaim:
9+
claimName: task-pv-claim
10+
containers:
11+
- name: task-pv-container
12+
image: nginx
13+
ports:
14+
- containerPort: 80
15+
name: "http-server"
16+
volumeMounts:
17+
- mountPath: "/usr/share/nginx/html"
18+
name: task-pv-storage
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: PersistentVolume
3+
metadata:
4+
name: task-pv-volume
5+
labels:
6+
type: local
7+
spec:
8+
storageClassName: manual
9+
capacity:
10+
storage: 10Gi
11+
accessModes:
12+
- ReadWriteOnce
13+
hostPath:
14+
path: "/mnt/data"

0 commit comments

Comments
 (0)