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.
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
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Di konsol Google Cloud, 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.
- Di Cloud Shell, aktifkan GKE dan
Cloud SQL Admin API:
gcloud services enable container.googleapis.com sqladmin.googleapis.com
Menyiapkan lingkungan Anda
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.
Tetapkan variabel lingkungan
PROJECT_ID
ke project ID Google Cloud (project-id) Anda.export PROJECT_ID=project-id
Download file manifes aplikasi dari repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Ubah ke direktori dengan file
wordpress-persistent-disks
:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
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.
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
Di Cloud Shell, buat instance bernama
mysql-wordpress-instance
:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
Tambahkan nama koneksi instance sebagai variabel lingkungan:
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
Buat database untuk WordPress guna menyimpan datanya:
gcloud sql databases create wordpress --instance $INSTANCE_NAME
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
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
Tambahkan alamat email akun layanan sebagai variabel lingkungan:
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')
Tambahkan peran
cloudsql.client
ke akun layanan Anda:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
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
.Buat secret Kubernetes untuk kredensial MySQL:
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORD
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
.
Siapkan file dengan mengganti variabel lingkungan
INSTANCE_CONNECTION_NAME
:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
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.
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.
Buat Layanan untuk
type:LoadBalancer
:kubectl create -f $WORKING_DIR/wordpress-service.yaml
Perlu waktu beberapa menit untuk membuat load balancer.
Tonton deployment dan tunggu hingga layanan memiliki alamat IP eksternal yang ditetapkan:
kubectl get svc -l app=wordpress --watch
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
Catat kolom alamat
EXTERNAL_IP
untuk digunakan nanti.
Menyiapkan blog WordPress
Di bagian ini, Anda menyiapkan blog WordPress.
Di browser, buka URL berikut, ganti external-ip-address dengan alamat
EXTERNAL_IP
layanan yang mengekspos instance WordPress Anda:http://external-ip-address
Di halaman penginstalan WordPress, pilih bahasa, lalu klik Lanjutkan.
Selesaikan halaman Informasi yang dibutuhkan, lalu klik Instal WordPress.
Klik Login.
Masukkan nama pengguna dan sandi yang telah Anda buat sebelumnya.
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
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- 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.
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.
Hapus Deployment:
kubectl delete deployment wordpress
Menghapus PVC untuk WordPress:
kubectl delete pvc wordpress-volumeclaim
Perintah ini juga otomatis menghapus PV dan Persistent Disk.
Hapus cluster GKE:
gcloud container clusters delete $CLUSTER_NAME
Hapus instance Cloud SQL:
gcloud sql instances delete $INSTANCE_NAME
Hapus peran dari akun layanan:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Hapus akun layanan:
gcloud iam service-accounts delete $SA_EMAIL
Langkah selanjutnya
- Konfigurasikan IP statis dan nama domain untuk aplikasi Anda.
Pelajari tutorial Kubernetes Engine lainnya.
Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.