Contoh: Men-deploy WordPress dan MySQL dengan Persistent Volumes

Tutorial ini menunjukkan cara untuk men-deploy situs WordPress dan database MySQL menggunakan Minikube. Kedua aplikasi ini menggunakan PersistentVolumes dan PersistentVolumeClaims untuk menyimpan data.

PersistentVolume (PV) adalah bagian dari penyimpanan di dalam klaster yang telah disediakan secara manual oleh administrator, atau secara dinamis disediakan oleh Kubernetes menggunakan StorageClass.

PersistentVolumeClaim (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.

Tujuan

  • Membuat PersistentVolumeClaims dan PersistentVolumes
  • Membuat kustomization.yaml dengan
    • generator Secret
    • konfigurasi sumber daya MySQL
    • konfigurasi sumber daya WordPress
  • Terapkan direktori kustomisasi dengan kubectl apply -k ./
  • Bersihkan sumber daya

Sebelum kamu memulai

Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu belum memiliki klaster, kamu dapat membuatnya dengan menggunakan minikube, atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:

Untuk melihat versi, tekan kubectl version.

Contoh yang ditunjukkan di halaman ini bekerja dengan kubectl versi 1.27 dan yang lebih baru.

Unduh file konfigurasi berikut:

  1. mysql-deployment.yaml

  2. wordpress-deployment.yaml

Membuat PersistentVolumeClaims dan PersistentVolumes

MySQL dan WordPress masing-masing memerlukan PersistentVolume untuk menyimpan data. PersistentVolumeClaims mereka akan dibuat pada langkah deployment.

Banyak lingkungan klaster memiliki StorageClass default yang sudah di-instal. Ketika StorageClass tidak ditentukan dalam PersistentVolumeClaim, StorageClass default klaster akan digunakan.

Ketika PersistentVolumeClaim dibuat, PersistentVolume akan disediakan secara dinamis berdasarkan konfigurasi StorageClass.

Membuat kustomization.yaml

Menambahkan Generator Secret

Secret adalah objek yang menyimpan data sensitif seperti kata sandi atau kunci. Sejak versi 1.14, kubectl mendukung pengelolaan objek Kubernetes menggunakan file kustomisasi. kamu dapat membuat Secret menggunakan generator di kustomization.yaml.

Tambahkan generator Secret di kustomization.yaml dengan perintah berikut. kamu perlu mengganti KATA_SANDI dengan kata sandi yang ingin kamu gunakan.

cat <<EOF >./kustomization.yaml
secretGenerator:
- name: mysql-pass
  literals:
  - password=KATA_SANDI
EOF

Menambahkan Konfigurasi Sumber Daya untuk MySQL dan WordPress

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.

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
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:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_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

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.

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
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:6.2.1-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        - name: WORDPRESS_DB_USER
          value: wordpress
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim
  1. Unduh file konfigurasi deployment MySQL.

    curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
    
  2. Unduh file konfigurasi WordPress.

    curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
    
  3. Tambahkan mereka ke file kustomization.yaml.

    cat <<EOF >>./kustomization.yaml
    resources:
      - mysql-deployment.yaml
      - wordpress-deployment.yaml
    EOF
    

Terapkan dan Verifikasi

kustomization.yaml berisi semua sumber daya untuk mendeploy situs WordPress dan database MySQL. kamu dapat menerapkan direktori dengan

kubectl apply -k ./

Sekarang kamu dapat memverifikasi bahwa semua objek ada.

  1. Verifikasi bahwa Secret ada dengan menjalankan perintah berikut:

    kubectl get secrets
    

    Responsnya akan seperti ini:

    NAME                    TYPE                                  DATA   AGE
    mysql-pass-c57bb4t7mf   Opaque                                1      9s
    
  2. Verifikasi bahwa PersistentVolume telah disediakan secara dinamis.

    kubectl get pvc
    

    Responsnya akan seperti ini:

    NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    mysql-pv-claim   Bound     pvc-8cbd7b2e-4044-11e9-b2bb-42010a800002   20Gi       RWO            standard           77s
    wp-pv-claim      Bound     pvc-8cd0df54-4044-11e9-b2bb-42010a800002   20Gi       RWO            standard           77s
    
  3. Verifikasi bahwa Pod sedang berjalan dengan menjalankan perintah berikut:

    kubectl get pods
    

    Responsnya akan seperti ini:

    NAME                               READY     STATUS    RESTARTS   AGE
    wordpress-mysql-1894417608-x5dzt   1/1       Running   0          40s
    
  4. Verifikasi bahwa Layanan sedang berjalan dengan menjalankan perintah berikut:

    kubectl get services wordpress
    

    Responsnya akan seperti ini:

    NAME        TYPE            CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    wordpress   LoadBalancer    10.0.0.89    <pending>     80:32406/TCP   4m
    
  5. Jalankan perintah berikut untuk mendapatkan Alamat IP untuk Layanan WordPress:

    minikube service wordpress --url
    

    Responsnya akan seperti ini:

    http://1.2.3.4:32406
    
  6. Salin alamat IP, dan muat halaman di browser kamu untuk melihat situs kamu.

    kamu akan melihat halaman pengaturan WordPress yang mirip dengan tangkapan layar berikut.

    wordpress-init

Bersihkan

  1. Jalankan perintah berikut untuk menghapus Secret, Deployment, Service, dan PersistentVolumeClaim kamu:

    kubectl delete -k ./
    

Selanjutnya

Last modified March 29, 2025 at 11:53 AM PST: fix: standardizing word 'klaster' outside glossary (b452fb2ffd)