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
Di dokumen ini, Anda akan menggunakan komponen Google Cloudyang 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, baca bagian 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- 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_IDke project IDGoogle Cloud Anda (project-id).export PROJECT_ID=project-id
Download file manifes aplikasi dari repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesUbah ke direktori dengan file
wordpress-persistent-disks:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disksTetapkan 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_NAMESetelah dibuat, hubungkan ke cluster baru Anda:
gcloud container clusters get-credentials $CLUSTER_NAME --location 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.yamlPerlu 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 persistentvolumeclaimOutput 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
Pendingsampai 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_NAMETambahkan 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_NAMEBuat pengguna database bernama
wordpressdan 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_PASSWORDJika 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_NAMETambahkan alamat email akun layanan sebagai variabel lingkungan:
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')Tambahkan peran
cloudsql.clientke akun layanan Anda:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAILBuat kunci untuk akun layanan:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAILPerintah 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_PASSWORDBuat 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.yamlDeploy file manifes
wordpress_cloudsql.yaml:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yamlPerlu 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 --watchSaat 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 Service untuk
type:LoadBalancer:kubectl create -f $WORKING_DIR/wordpress-service.yamlPerlu 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 --watchJika 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_IPuntuk digunakan nanti.
Menyiapkan blog WordPress
Di bagian ini, Anda menyiapkan blog WordPress.
Di browser, buka URL berikut, ganti external-ip-address dengan alamat
EXTERNAL_IPlayanan 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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the 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 wordpressTunggu hingga load balancer yang disediakan untuk Layanan
wordpressdihapus. Load balancer dihapus secara asinkron di latar belakang.Tonton proses penghapusan:
watch gcloud compute forwarding-rules listLoad balancer akan dihapus saat Anda melihat output berikut:
Listed 0 items.Hapus Deployment:
kubectl delete deployment wordpressMenghapus PVC untuk WordPress:
kubectl delete pvc wordpress-volumeclaimPerintah ini juga otomatis menghapus PV dan Persistent Disk.
Hapus cluster GKE:
gcloud container clusters delete $CLUSTER_NAME --location=$REGIONHapus instance Cloud SQL:
gcloud sql instances delete $INSTANCE_NAMEHapus peran dari akun layanan:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAILHapus akun layanan:
gcloud iam service-accounts delete $SA_EMAIL
Langkah berikutnya
- 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.