Skip to content

Commit 82f6f82

Browse files
authored
Merge pull request #50225 from za/translate-tutorial-wordpress-stateful
Initial commit on translating wordpress tutorial persistent volume
2 parents f0842ad + 349747d commit 82f6f82

File tree

3 files changed

+373
-0
lines changed

3 files changed

+373
-0
lines changed
Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
---
2+
title: "Contoh: Men-deploy WordPress dan MySQL dengan Persistent Volumes"
3+
content_type: tutorial
4+
weight: 20
5+
card:
6+
name: tutorials
7+
weight: 40
8+
title: "Contoh Stateful: WordPress dengan Persistent Volumes"
9+
---
10+
11+
<!-- overview -->
12+
Tutorial ini menunjukkan cara untuk men-deploy situs WordPress dan database MySQL menggunakan Minikube. Kedua aplikasi ini menggunakan PersistentVolumes dan PersistentVolumeClaims untuk menyimpan data.
13+
14+
[PersistentVolume](/docs/concepts/storage/persistent-volumes/) (PV) adalah bagian dari penyimpanan di dalam kluster yang telah disediakan secara manual oleh administrator, atau secara dinamis disediakan oleh Kubernetes menggunakan [StorageClass](/docs/concepts/storage/storage-classes).
15+
16+
[PersistentVolumeClaim](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) (PVC) adalah permintaan penyimpanan oleh pengguna yang dapat dipenuhi oleh PV. PersistentVolumes dan PersistentVolumeClaims bersifat independen dari siklus hidup Pod dan mempertahankan data meskipun Pod di-restart, dijadwalkan ulang, atau bahkan dihapus.
17+
18+
{{< warning >}}
19+
Deployment ini tidak cocok untuk kasus penggunaan produksi, karena menggunakan Pod WordPress dan MySQL instance tunggal. Pertimbangkan untuk menggunakan [WordPress Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/wordpress) untuk mendeploy WordPress di lingkungan produksi.
20+
{{< /warning >}}
21+
22+
{{< note >}}
23+
File yang disediakan dalam tutorial ini menggunakan API Deployment GA dan spesifik untuk Kubernetes versi 1.9 dan yang lebih baru. Jika Anda ingin menggunakan tutorial ini dengan versi Kubernetes yang lebih lama, harap perbarui versi API sesuai kebutuhan, atau rujuk ke versi tutorial sebelumnya.
24+
{{< /note >}}
25+
26+
## {{% heading "objectives" %}}
27+
28+
* Membuat PersistentVolumeClaims dan PersistentVolumes
29+
* Membuat `kustomization.yaml` dengan
30+
* generator Secret
31+
* konfigurasi sumber daya MySQL
32+
* konfigurasi sumber daya WordPress
33+
* Terapkan direktori kustomisasi dengan `kubectl apply -k ./`
34+
* Bersihkan sumber daya
35+
36+
## {{% heading "prerequisites" %}}
37+
38+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
39+
40+
Contoh yang ditunjukkan di halaman ini bekerja dengan `kubectl` versi 1.27 dan yang lebih baru.
41+
42+
Unduh file konfigurasi berikut:
43+
44+
1. [mysql-deployment.yaml](/examples/application/wordpress/mysql-deployment.yaml)
45+
46+
1. [wordpress-deployment.yaml](/examples/application/wordpress/wordpress-deployment.yaml)
47+
48+
<!-- lessoncontent -->
49+
50+
## Membuat PersistentVolumeClaims dan PersistentVolumes
51+
52+
MySQL dan WordPress masing-masing memerlukan PersistentVolume untuk menyimpan data. PersistentVolumeClaims mereka akan dibuat pada langkah deployment.
53+
54+
Banyak lingkungan kluster memiliki StorageClass default yang sudah di-instal. Ketika StorageClass tidak ditentukan dalam PersistentVolumeClaim, StorageClass default kluster akan digunakan.
55+
56+
Ketika PersistentVolumeClaim dibuat, PersistentVolume akan disediakan secara dinamis berdasarkan konfigurasi StorageClass.
57+
58+
{{< warning >}}
59+
Di kluster lokal, StorageClass default menggunakan provisioner `hostPath`. Volume `hostPath` hanya cocok untuk pengembangan dan pengujian. Dengan volume `hostPath`, data Anda akan disimpan di `/tmp` pada node tempat Pod dijadwalkan dan tidak akan berpindah antar node. Jika sebuah Pod mati dan dijadwalkan ke node lain di kluster, atau node di-reboot, data akan hilang.
60+
{{< /warning >}}
61+
62+
{{< note >}}
63+
Jika Anda menjalankan kluster yang memerlukan provisioner `hostPath`, flag `--enable-hostpath-provisioner` harus diatur pada komponen `controller-manager`.
64+
{{< /note >}}
65+
66+
{{< note >}}
67+
Jika Anda memiliki kluster Kubernetes yang berjalan di Google Kubernetes Engine, silakan ikuti [panduan ini](https://cloud.google.com/kubernetes-engine/docs/tutorials/persistent-disk).
68+
{{< /note >}}
69+
70+
## Membuat kustomization.yaml
71+
72+
### Menambahkan Generator Secret
73+
74+
[Secret](/docs/concepts/configuration/secret/) adalah objek yang menyimpan data sensitif seperti kata sandi atau kunci. Sejak versi 1.14, `kubectl` mendukung pengelolaan objek Kubernetes menggunakan file kustomisasi. Anda dapat membuat Secret menggunakan generator di `kustomization.yaml`.
75+
76+
Tambahkan generator Secret di `kustomization.yaml` dengan perintah berikut. Anda perlu mengganti `KATA_SANDI` dengan kata sandi yang ingin Anda gunakan.
77+
78+
```shell
79+
cat <<EOF >./kustomization.yaml
80+
secretGenerator:
81+
- name: mysql-pass
82+
literals:
83+
- password=KATA_SANDI
84+
EOF
85+
```
86+
87+
## Menambahkan Konfigurasi Sumber Daya untuk MySQL dan WordPress
88+
89+
Manifest berikut menjelaskan Deployment MySQL instance tunggal. Kontainer MySQL memasang PersistentVolume di /var/lib/mysql. Variabel lingkungan `MYSQL_ROOT_PASSWORD` mengatur kata sandi database dari Secret.
90+
91+
{{% code_sample file="application/wordpress/mysql-deployment.yaml" %}}
92+
93+
Manifest berikut menjelaskan Deployment WordPress instance tunggal. Kontainer WordPress memasang PersistentVolume di `/var/www/html` untuk file data situs web. Variabel lingkungan `WORDPRESS_DB_HOST` mengatur nama Layanan MySQL yang didefinisikan di atas, dan WordPress akan mengakses database melalui Layanan. Variabel lingkungan `WORDPRESS_DB_PASSWORD` mengatur kata sandi database dari Secret yang dihasilkan oleh kustomize.
94+
95+
{{% code_sample file="application/wordpress/wordpress-deployment.yaml" %}}
96+
97+
1. Unduh file konfigurasi deployment MySQL.
98+
99+
```shell
100+
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
101+
```
102+
103+
2. Unduh file konfigurasi WordPress.
104+
105+
```shell
106+
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
107+
```
108+
109+
3. Tambahkan mereka ke file `kustomization.yaml`.
110+
111+
```shell
112+
cat <<EOF >>./kustomization.yaml
113+
resources:
114+
- mysql-deployment.yaml
115+
- wordpress-deployment.yaml
116+
EOF
117+
```
118+
119+
## Terapkan dan Verifikasi
120+
121+
`kustomization.yaml` berisi semua sumber daya untuk mendeploy situs WordPress dan database MySQL. Anda dapat menerapkan direktori dengan
122+
123+
```shell
124+
kubectl apply -k ./
125+
```
126+
127+
Sekarang Anda dapat memverifikasi bahwa semua objek ada.
128+
129+
1. Verifikasi bahwa Secret ada dengan menjalankan perintah berikut:
130+
131+
```shell
132+
kubectl get secrets
133+
```
134+
135+
Responsnya akan seperti ini:
136+
137+
```
138+
NAME TYPE DATA AGE
139+
mysql-pass-c57bb4t7mf Opaque 1 9s
140+
```
141+
142+
2. Verifikasi bahwa PersistentVolume telah disediakan secara dinamis.
143+
144+
```shell
145+
kubectl get pvc
146+
```
147+
148+
{{< note >}}
149+
Mungkin memerlukan waktu beberapa menit untuk PV disediakan dan terikat.
150+
{{< /note >}}
151+
152+
Responsnya akan seperti ini:
153+
154+
```
155+
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
156+
mysql-pv-claim Bound pvc-8cbd7b2e-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s
157+
wp-pv-claim Bound pvc-8cd0df54-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s
158+
```
159+
160+
3. Verifikasi bahwa Pod sedang berjalan dengan menjalankan perintah berikut:
161+
162+
```shell
163+
kubectl get pods
164+
```
165+
166+
{{< note >}}
167+
Mungkin memerlukan waktu beberapa menit untuk Status Pod menjadi `RUNNING`.
168+
{{< /note >}}
169+
170+
Responsnya akan seperti ini:
171+
172+
```
173+
NAME READY STATUS RESTARTS AGE
174+
wordpress-mysql-1894417608-x5dzt 1/1 Running 0 40s
175+
```
176+
177+
4. Verifikasi bahwa Layanan sedang berjalan dengan menjalankan perintah berikut:
178+
179+
```shell
180+
kubectl get services wordpress
181+
```
182+
183+
Responsnya akan seperti ini:
184+
185+
```
186+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
187+
wordpress LoadBalancer 10.0.0.89 <pending> 80:32406/TCP 4m
188+
```
189+
190+
{{< note >}}
191+
Minikube hanya dapat mengekspos Layanan melalui `NodePort`. EXTERNAL-IP selalu pending.
192+
{{< /note >}}
193+
194+
5. Jalankan perintah berikut untuk mendapatkan Alamat IP untuk Layanan WordPress:
195+
196+
```shell
197+
minikube service wordpress --url
198+
```
199+
200+
Responsnya akan seperti ini:
201+
202+
```
203+
http://1.2.3.4:32406
204+
```
205+
206+
6. Salin alamat IP, dan muat halaman di browser Anda untuk melihat situs Anda.
207+
208+
Anda akan melihat halaman pengaturan WordPress yang mirip dengan tangkapan layar berikut.
209+
210+
![wordpress-init](https://raw.githubusercontent.com/kubernetes/examples/master/mysql-wordpress-pd/WordPress.png)
211+
212+
{{< warning >}}
213+
Jangan biarkan instalasi WordPress Anda di halaman ini. Jika pengguna lain menemukannya, mereka dapat mengatur situs web di instance Anda dan menggunakannya untuk menyajikan konten berbahaya.<br/><br/>
214+
Instal WordPress dengan membuat nama pengguna dan kata sandi atau hapus instance Anda.
215+
{{< /warning >}}
216+
217+
## {{% heading "cleanup" %}}
218+
219+
1. Jalankan perintah berikut untuk menghapus Secret, Deployment, Service, dan PersistentVolumeClaim Anda:
220+
221+
```shell
222+
kubectl delete -k ./
223+
```
224+
225+
## {{% heading "whatsnext" %}}
226+
227+
* Pelajari lebih lanjut tentang [Introspeksi dan Debugging](/docs/tasks/debug/debug-application/debug-running-pod/)
228+
* Pelajari lebih lanjut tentang [Jobs](/docs/concepts/workloads/controllers/job/)
229+
* Pelajari lebih lanjut tentang [Port Forwarding](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
230+
* Pelajari cara [Mendapatkan Shell ke Kontainer](/docs/tasks/debug/debug-application/get-shell-running-container/)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: wordpress-mysql
5+
labels:
6+
app: wordpress
7+
spec:
8+
ports:
9+
- port: 3306
10+
selector:
11+
app: wordpress
12+
tier: mysql
13+
clusterIP: None
14+
---
15+
apiVersion: v1
16+
kind: PersistentVolumeClaim
17+
metadata:
18+
name: mysql-pv-claim
19+
labels:
20+
app: wordpress
21+
spec:
22+
accessModes:
23+
- ReadWriteOnce
24+
resources:
25+
requests:
26+
storage: 20Gi
27+
---
28+
apiVersion: apps/v1
29+
kind: Deployment
30+
metadata:
31+
name: wordpress-mysql
32+
labels:
33+
app: wordpress
34+
spec:
35+
selector:
36+
matchLabels:
37+
app: wordpress
38+
tier: mysql
39+
strategy:
40+
type: Recreate
41+
template:
42+
metadata:
43+
labels:
44+
app: wordpress
45+
tier: mysql
46+
spec:
47+
containers:
48+
- image: mysql:8.0
49+
name: mysql
50+
env:
51+
- name: MYSQL_ROOT_PASSWORD
52+
valueFrom:
53+
secretKeyRef:
54+
name: mysql-pass
55+
key: password
56+
- name: MYSQL_DATABASE
57+
value: wordpress
58+
- name: MYSQL_USER
59+
value: wordpress
60+
- name: MYSQL_PASSWORD
61+
valueFrom:
62+
secretKeyRef:
63+
name: mysql-pass
64+
key: password
65+
ports:
66+
- containerPort: 3306
67+
name: mysql
68+
volumeMounts:
69+
- name: mysql-persistent-storage
70+
mountPath: /var/lib/mysql
71+
volumes:
72+
- name: mysql-persistent-storage
73+
persistentVolumeClaim:
74+
claimName: mysql-pv-claim
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: wordpress
5+
labels:
6+
app: wordpress
7+
spec:
8+
ports:
9+
- port: 80
10+
selector:
11+
app: wordpress
12+
tier: frontend
13+
type: LoadBalancer
14+
---
15+
apiVersion: v1
16+
kind: PersistentVolumeClaim
17+
metadata:
18+
name: wp-pv-claim
19+
labels:
20+
app: wordpress
21+
spec:
22+
accessModes:
23+
- ReadWriteOnce
24+
resources:
25+
requests:
26+
storage: 20Gi
27+
---
28+
apiVersion: apps/v1
29+
kind: Deployment
30+
metadata:
31+
name: wordpress
32+
labels:
33+
app: wordpress
34+
spec:
35+
selector:
36+
matchLabels:
37+
app: wordpress
38+
tier: frontend
39+
strategy:
40+
type: Recreate
41+
template:
42+
metadata:
43+
labels:
44+
app: wordpress
45+
tier: frontend
46+
spec:
47+
containers:
48+
- image: wordpress:6.2.1-apache
49+
name: wordpress
50+
env:
51+
- name: WORDPRESS_DB_HOST
52+
value: wordpress-mysql
53+
- name: WORDPRESS_DB_PASSWORD
54+
valueFrom:
55+
secretKeyRef:
56+
name: mysql-pass
57+
key: password
58+
- name: WORDPRESS_DB_USER
59+
value: wordpress
60+
ports:
61+
- containerPort: 80
62+
name: wordpress
63+
volumeMounts:
64+
- name: wordpress-persistent-storage
65+
mountPath: /var/www/html
66+
volumes:
67+
- name: wordpress-persistent-storage
68+
persistentVolumeClaim:
69+
claimName: wp-pv-claim

0 commit comments

Comments
 (0)