Pendahuluan
Sebagai sistem manajemen konten paling populer secara global, WordPress menjalankan situs web dengan berbagai ukuran, baik dari segi jumlah konten maupun lalu lintas web. Menerapkan WordPress di Kubernetes adalah cara yang efisien untuk mengaktifkan penskalaan horizontal situs web dan berhasil menangani lonjakan lalu lintas situs web.
Tutorial ini menjelaskan dua metode penerapan WordPress di Kubernetes - menggunakan diagram Helm dan membuat penerapan Anda dari awal.
Prasyarat
- Kluster Kubernetes dengan kubectl
- Helm 3
- Hak istimewa administratif pada sistem
Men-deploy WordPress di Kubernetes dengan Helm Chart
Bagan helm dilengkapi dengan instalasi aplikasi yang telah dikonfigurasi sebelumnya yang dapat digunakan dengan beberapa perintah sederhana.
- Tambahkan repositori yang berisi diagram Helm WordPress yang ingin Anda terapkan:
helm repo add [repo-name] [repo-address]
Sistem mengonfirmasi penambahan repositori yang berhasil. Contoh menggunakan grafik Bitnami.
2. Perbarui repositori Helm lokal:
helm repo update
3. Instal bagan menggunakan perintah helm install.
helm install [release-name] [repo-address]
Tunggu hingga bagan di-deploy.
4. Layanan WordPress menggunakan LoadBalancer sebagai cara untuk mengekspos layanan. Jika Anda menggunakan minikube, buka jendela terminal lain dan ketik perintah berikut untuk mengemulasi LoadBalancer:
minikube tunnel
5. Saat minikube menampilkan Berjalan status, perkecil jendela dan kembali ke yang sebelumnya.
6. Periksa kesiapan penerapan dengan mengetik:
kubectl get all
Perintah tersebut mencantumkan dan menunjukkan status pod, layanan, dan penerapan.
7. Setelah Pod dan deployment siap, gunakan perintah berikut untuk mengekspor SERVICE_IP
variabel lingkungan:
export SERVICE_IP=$(kubectl get svc --namespace default wp-test-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
8. Sekarang gunakan perintah echo untuk menampilkan alamat IP layanan:
echo "WordPress URL: http://$SERVICE_IP/"
9. Ketikkan alamat tersebut ke dalam bilah alamat browser Anda. Instalasi WordPress dimulai.
Menyebarkan WordPress di Kubernetes dengan Volume Persisten
Saat menggunakan WordPress menggunakan konfigurasi khusus, Anda perlu membuat serangkaian file YAML untuk WordPress dan database yang akan digunakan aplikasi. Contoh di bawah ini menggunakan MySQL, tetapi Anda juga dapat memilih MariaDB.
1. Gunakan editor teks untuk membuat file YAML guna menyediakan penyimpanan untuk database MySQL.
nano mysql-storage.yaml
File mendefinisikan volume penyimpanan persisten (PV) dan mengklaim penyimpanan itu dengan PersistentVolumeClaim (PVC). Contoh menggunakan konfigurasi berikut:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Simpan file dan keluar.
2. Buat konfigurasi penerapan MySQL YAML.
nano mysql-deployment.yaml
File penerapan berisi data yang terkait dengan gambar kontainer dan penyimpanan. claimName
deklarasi di bagian bawah harus sesuai dengan nama PVC yang Anda buat di Langkah 1 .
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
Simpan file dan keluar.
3. Buat konfigurasi layanan YAML untuk database.
nano mysql-service.yaml
File tersebut menentukan port yang digunakan WordPress untuk terhubung ke layanan:
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
Simpan file dan keluar.
4. Sekarang buat file YAML yang sama untuk WordPress itu sendiri. Mulailah dengan alokasi penyimpanan:
nano wordpress-storage.yaml
Contoh menggunakan konfigurasi berikut:
apiVersion: v1
kind: PersistentVolume
metadata:
name: wp-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Simpan file dan keluar.
5. Buat file penerapan:
nano wordpress-deployment.yaml
File menyediakan gambar Docker dan menghubungkan penerapan WordPress dengan PVC:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:5.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
Simpan file dan keluar.
6. Buat layanan YAML:
nano wordpress-service.yaml
Contoh menggunakan LoadBalancer untuk mengekspos layanan:
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
Simpan file dan keluar.
7. Buat file kustomization.yaml, yang akan digunakan untuk menerapkan konfigurasi dengan mudah:
nano kustomization.yaml
File berisi dua bagian:
secretGenerator
menghasilkan rahasia Kubernetes yang meneruskan info login ke container.resources
bagian daftar semua file yang akan berpartisipasi dalam konfigurasi. Buat daftar file yang Anda buat di langkah sebelumnya.
secretGenerator:
- name: mysql-pass
literals:
- password=test123
resources:
- mysql-storage.yaml
- mysql-deployment.yaml
- mysql-service.yaml
- wordpress-storage.yaml
- wordpress-deployment.yaml
- wordpress-service.yaml
Simpan file dan keluar.
8. Terapkan file yang terdaftar di kustomization.yaml dengan perintah berikut:
kubectl apply -k ./
Sistem mengonfirmasi keberhasilan pembuatan rahasia, layanan, PV, PVC, dan penerapan:
9. Periksa apakah pod dan penerapan sudah siap:
kubectl get all
10. Jika Anda menggunakan minikube, buka jendela terminal lain dan mulai minikube tunnel untuk menyediakan emulasi penyeimbangan beban:
minikube tunnel
Setelah emulasi berjalan, perkecil jendela dan kembali ke yang sebelumnya.
11. Ketik perintah berikut untuk mengekspos URL layanan yang akan Anda gunakan untuk mengakses instance WordPress yang diterapkan:
minikube service wordpress-service --url
URL ditampilkan sebagai output perintah:
12. Salin URL dan tempel ke browser web Anda. Instalasi WordPress dimulai.