Men-deploy WordPress di GKE dengan Persistent Disk dan Cloud SQL


Tutorial ini menunjukkan cara menyiapkan deployment WordPress replika tunggal di Google Kubernetes Engine (GKE) menggunakan database MySQL. Daripada menginstal MySQL, Anda dapat menggunakan Cloud SQL yang menyediakan versi MySQL terkelola. WordPress menggunakan PersistentVolumes (PV) dan PersistentVolumeClaims (PVC) untuk menyimpan data.

PV adalah representasi volume penyimpanan di cluster yang disediakan oleh admin, atau disediakan secara dinamis oleh Kubernetes, untuk memenuhi permintaan yang dibuat dalam PVC. PVC adalah permintaan penyimpanan kelas penyimpanan tertentu oleh pengguna yang dapat dipenuhi oleh PV. PV dan PVC tidak bergantung pada siklus proses Pod dan mempertahankan data melalui mulai ulang, penjadwalan ulang, dan bahkan penghapusan Pod. WordPress menggunakan Persistent Disk sebagai penyimpanan untuk mendukung PV.

Latar belakang

WordPress adalah alat blogging yang menggunakan database relasional untuk menyimpan artikel blog serta objek dan metadatanya yang terkait, serta sistem file lokal untuk menyimpan aset, seperti gambar dalam postingan blog. Tutorial ini menggunakan image Docker WordPress resmi dari Docker Hub.

Secara umum, sistem file root container tidak cocok untuk menyimpan data persisten. Container yang Anda jalankan di GKE biasanya adalah entity sekali pakai, dan pengelola cluster dapat menghapus, mengeluarkan, atau menjadwalkan ulang container apa pun yang menjadi tidak tersedia karena kegagalan node atau penyebab lainnya. Jika node gagal, semua data yang disimpan ke sistem file root container akan hilang.

Dengan menggunakan PV yang didukung oleh Persistent Disk, Anda dapat menyimpan data platform WordPress di luar container. Dengan cara ini, meskipun container dihapus, datanya akan tetap ada. Dengan kelas penyimpanan default, Persistent Disk (dan juga data Anda) tidak akan berpindah bersama Pod jika Pod dijadwalkan ulang ke node lain. Ada berbagai cara untuk menangani pemindahan data, tetapi berada di luar cakupan tutorial ini. Untuk mengetahui informasi selengkapnya, lihat Volume Persistent dengan Persistent Disk.

WordPress memerlukan PV untuk menyimpan data. Untuk tutorial ini, Anda akan menggunakan kelas penyimpanan default untuk membuat Persistent Disk secara dinamis dan membuat PVC untuk deployment.

Tujuan

  • Membuat cluster GKE.
  • Membuat PV dan PVC yang didukung oleh Persistent Disk.
  • Membuat instance Cloud SQL untuk MySQL
  • Men-deploy WordPress.
  • Menyiapkan blog WordPress Anda.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  7. Di Cloud Shell, aktifkan GKE dan Cloud SQL Admin API:
    gcloud services enable container.googleapis.com sqladmin.googleapis.com
    

Menyiapkan lingkungan Anda

  1. Di Cloud Shell, tetapkan region default untuk Google Cloud CLI:

    gcloud config set compute/region region
    

    Ganti kode berikut:

    • region: Pilih region yang paling dekat dengan Anda. Untuk mengetahui informasi selengkapnya, lihat Region dan Zona.
  2. Tetapkan variabel lingkungan PROJECT_ID ke project ID Google Cloud (project-id) Anda.

    export PROJECT_ID=project-id
    

  3. Download file manifes aplikasi dari repositori GitHub:

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. Ubah ke direktori dengan file wordpress-persistent-disks:

    cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
    
  5. Tetapkan variabel lingkungan WORKING_DIR:

    WORKING_DIR=$(pwd)
    

    Untuk tutorial ini, Anda akan membuat objek Kubernetes menggunakan file manifes dalam format YAML.

Membuat cluster GKE

Anda membuat cluster GKE untuk menghosting container aplikasi WordPress.

  • Di Cloud Shell, buat cluster GKE bernama persistent-disk-tutorial:

    CLUSTER_NAME=persistent-disk-tutorial
    gcloud container clusters create-auto $CLUSTER_NAME
    

    Setelah dibuat, hubungkan ke cluster baru Anda:

    gcloud container clusters get-credentials $CLUSTER_NAME --region REGION
    

Membuat PV dan PVC yang didukung oleh Persistent Disk

Buat PVC sebagai penyimpanan yang diperlukan untuk WordPress. GKE memiliki resource StorageClass default terinstal, sehingga Anda dapat menyediakan PV secara dinamis yang didukung oleh Persistent Disk. Anda menggunakan file wordpress-volumeclaim.yaml untuk membuat PVC yang diperlukan untuk deployment.

File manifes ini menjelaskan PVC yang meminta penyimpanan sebesar 200 GB. Resource StorageClass belum ditentukan dalam file, sehingga PVC ini menggunakan resource StorageClass default untuk menyediakan PV yang didukung oleh Persistent Disk.

  1. Di Cloud Shell, deploy file manifes:

    kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
    

    Perlu waktu hingga sepuluh detik untuk menyediakan PV yang didukung oleh Persistent Disk dan mengikatnya ke PVC Anda. Anda dapat memeriksa statusnya dengan perintah berikut:

    kubectl get persistentvolumeclaim
    

    Output menampilkan PersistentVolumeClaim dengan status Pending, mirip dengan berikut ini:

    NAME                    STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    wordpress-volumeclaim   Pending                                      standard-rwo   5s
    

    PersistentVolumeClaim ini tetap dalam status Pending sampai Anda menggunakannya nanti dalam tutorial ini.

Membuat instance Cloud SQL untuk MySQL

  1. Di Cloud Shell, buat instance bernama mysql-wordpress-instance:

    INSTANCE_NAME=mysql-wordpress-instance
    gcloud sql instances create $INSTANCE_NAME
    
  2. Tambahkan nama koneksi instance sebagai variabel lingkungan:

    export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \
        --format='value(connectionName)')
    
  3. Buat database untuk WordPress guna menyimpan datanya:

    gcloud sql databases create wordpress --instance $INSTANCE_NAME
    
  4. Buat pengguna database bernama wordpress dan sandi untuk WordPress guna mengautentikasi ke instance:

    CLOUD_SQL_PASSWORD=$(openssl rand -base64 18)
    gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \
        --password $CLOUD_SQL_PASSWORD
    

    Jika menutup sesi Cloud Shell, Anda akan kehilangan sandi. Catat sandi tersebut karena Anda akan memerlukannya nanti dalam tutorial.

Anda telah menyelesaikan penyiapan database untuk blog WordPress baru Anda.

Men-deploy WordPress

Sebelum dapat men-deploy WordPress, Anda harus membuat akun layanan. Anda membuat secret Kubernetes untuk menyimpan kredensial akun layanan dan secret lainnya untuk menyimpan kredensial database.

Mengonfigurasi akun layanan dan membuat secret

  1. Agar aplikasi WordPress Anda dapat mengakses instance MySQL melalui proxy Cloud SQL, buat akun layanan:

    SA_NAME=cloudsql-proxy
    gcloud iam service-accounts create $SA_NAME --display-name $SA_NAME
    
  2. Tambahkan alamat email akun layanan sebagai variabel lingkungan:

    SA_EMAIL=$(gcloud iam service-accounts list \
        --filter=displayName:$SA_NAME \
        --format='value(email)')
    
  3. Tambahkan peran cloudsql.client ke akun layanan Anda:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --role roles/cloudsql.client \
        --member serviceAccount:$SA_EMAIL
    
  4. Buat kunci untuk akun layanan:

    gcloud iam service-accounts keys create $WORKING_DIR/key.json \
        --iam-account $SA_EMAIL
    

    Perintah ini akan mendownload salinan file key.json.

  5. Buat secret Kubernetes untuk kredensial MySQL:

    kubectl create secret generic cloudsql-db-credentials \
        --from-literal username=wordpress \
        --from-literal password=$CLOUD_SQL_PASSWORD
    
  6. Buat secret Kubernetes untuk kredensial akun layanan:

    kubectl create secret generic cloudsql-instance-credentials \
        --from-file $WORKING_DIR/key.json
    

Men-deploy WordPress

Langkah berikutnya adalah men-deploy container WordPress Anda di cluster GKE.

File manifes wordpress_cloudsql.yaml menjelaskan Deployment yang membuat satu Pod yang menjalankan container dengan instance WordPress. Container ini membaca variabel lingkungan WORDPRESS_DB_PASSWORD yang berisi secret cloudsql-db-credentials yang Anda buat.

File manifes ini juga mengonfigurasi container WordPress untuk berkomunikasi dengan MySQL melalui proxy Cloud SQL yang berjalan di container file bantuan. Nilai alamat host ditetapkan pada variabel lingkungan WORDPRESS_DB_HOST.

  1. Siapkan file dengan mengganti variabel lingkungan INSTANCE_CONNECTION_NAME:

    cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \
        $WORKING_DIR/wordpress_cloudsql.yaml
    
  2. Deploy file manifes wordpress_cloudsql.yaml:

    kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
    

    Perlu waktu beberapa menit untuk men-deploy file manifes ini saat Persistent Disk dipasang ke node komputasi.

  3. Tonton deployment untuk melihat perubahan status menjadi running:

    kubectl get pod -l app=wordpress --watch
    

    Saat output menampilkan status Running, Anda dapat melanjutkan ke langkah berikutnya.

    NAME                     READY     STATUS    RESTARTS   AGE
    wordpress-387015-02xxb   2/2       Running   0          2m47s
    

Mengekspos layanan WordPress

Pada langkah sebelumnya, Anda telah men-deploy container WordPress, tetapi saat ini container tidak dapat diakses dari luar cluster Anda karena tidak memiliki alamat IP eksternal. Anda dapat mengekspos aplikasi WordPress ke traffic dari internet dengan membuat dan mengonfigurasi Layanan Kubernetes dengan load balancer eksternal terlampir. Untuk mempelajari lebih lanjut cara mengekspos aplikasi menggunakan Layanan di GKE, lihat panduan cara kerja.

  1. Buat Layanan untuk type:LoadBalancer:

    kubectl create -f $WORKING_DIR/wordpress-service.yaml
    

    Perlu waktu beberapa menit untuk membuat load balancer.

  2. Tonton deployment dan tunggu hingga layanan memiliki alamat IP eksternal yang ditetapkan:

    kubectl get svc -l app=wordpress --watch
    
  3. Jika output menampilkan alamat IP eksternal, Anda dapat melanjutkan ke langkah berikutnya. Perhatikan bahwa IP eksternal Anda berbeda dengan contoh berikut.

    NAME        CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
    wordpress   10.51.243.233   203.0.113.3    80:32418/TCP   1m
    
  4. Catat kolom alamat EXTERNAL_IP untuk digunakan nanti.

Menyiapkan blog WordPress

Di bagian ini, Anda menyiapkan blog WordPress.

  1. Di browser, buka URL berikut, ganti external-ip-address dengan alamat EXTERNAL_IP layanan yang mengekspos instance WordPress Anda:

    http://external-ip-address
    
  2. Di halaman penginstalan WordPress, pilih bahasa, lalu klik Lanjutkan.

  3. Selesaikan halaman Informasi yang dibutuhkan, lalu klik Instal WordPress.

  4. Klik Login.

  5. Masukkan nama pengguna dan sandi yang telah Anda buat sebelumnya.

  6. Anda sekarang memiliki situs blog. Untuk mengunjungi blog Anda, buka URL berikut di browser:

    http://external-ip-address
    

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

Jika Anda telah menggunakan project yang sudah ada dan tidak ingin menghapusnya, hapus resource individual tersebut.

  1. Hapus layanan:

    kubectl delete service wordpress
    

    Tunggu hingga load balancer yang disediakan untuk Layanan wordpress dihapus. Load balancer dihapus secara asinkron di latar belakang.

    Tonton proses penghapusan:

    watch gcloud compute forwarding-rules list
    

    Load balancer akan dihapus saat Anda melihat output berikut:

    Listed 0 items.
    
  2. Hapus Deployment:

    kubectl delete deployment wordpress
    
  3. Menghapus PVC untuk WordPress:

    kubectl delete pvc wordpress-volumeclaim
    

    Perintah ini juga otomatis menghapus PV dan Persistent Disk.

  4. Hapus cluster GKE:

    gcloud container clusters delete $CLUSTER_NAME
    
  5. Hapus instance Cloud SQL:

    gcloud sql instances delete $INSTANCE_NAME
    
  6. Hapus peran dari akun layanan:

    gcloud projects remove-iam-policy-binding $PROJECT_ID \
        --role roles/cloudsql.client \
        --member serviceAccount:$SA_EMAIL
    
  7. Hapus akun layanan:

    gcloud iam service-accounts delete $SA_EMAIL
    

Langkah selanjutnya