Tutorial ini menunjukkan cara membangun aplikasi web multi-tingkat menggunakan Google Kubernetes Engine (GKE).
Dalam tutorial ini, Anda akan melakukan beberapa hal berikut:
- Siapkan aplikasi web dengan alamat IP eksternal dan load balancer.
- Buat cluster Redis dengan satu master (leader) dan beberapa replika (follower).
Contoh ini menjelaskan konsep Kubernetes berikut:
- Konfigurasi deklaratif menggunakan file manifes YAML
- Deployment, yaitu resource Kubernetes yang menentukan konfigurasi untuk serangkaian Pod yang direplikasi
- Service untuk membuat load balancer internal dan eksternal bagi sekumpulan Pod
Tujuan
Untuk men-deploy dan menjalankan aplikasi di GKE:- Menyiapkan leader Redis
- Menyiapkan dua follower Redis
- Menyiapkan frontend web
- Buka situs
- Meningkatkan skala frontend web
Diagram berikut menunjukkan ringkasan arsitektur cluster yang Anda buat dengan menyelesaikan tujuan berikut:
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
Cloud Shell telah diinstal dengan software
yang Anda perlukan untuk tutorial ini, termasuk
kubectl dan
gcloud CLI. Jika tidak menggunakan Cloud Shell, Anda harus
menginstal gcloud CLI.
- 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.
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Create or select 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Create or select 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
Menetapkan variabel lingkungan:
export PROJECT_ID=PROJECT_ID export COMPUTE_LOCATION=COMPUTE_LOCATIONGanti kode berikut:
PROJECT_ID: Google Cloud Project ID AndaCOMPUTE_LOCATION: lokasi Compute Engine, sepertius-central1.
Buat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesUbah ke direktori kerja:
cd kubernetes-engine-samples/quickstarts/guestbook/Manifes berikut menjelaskan Deployment Kubernetes yang menjalankan satu replika Pod leader Redis:
Terapkan manifes ke cluster Anda:
kubectl apply -f redis-leader-deployment.yamlPastikan bahwa Pod leader Redis sedang berjalan:
kubectl get podsOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE redis-leader-343230949-qfvrq 1/1 Running 0 43sMungkin perlu waktu beberapa menit agar
STATUSberubah dariPendingmenjadiRunning.Manifes berikut menjelaskan Service untuk leader Redis:
Manifes ini mencakup serangkaian pemilih label. Label ini cocok dengan kumpulan label yang diterapkan di langkah sebelumnya. Oleh karena itu, Service ini merutekan traffic jaringan ke Pod leader Redis yang dibuat pada langkah sebelumnya.
Bagian
portsdari manifes mendeklarasikan pemetaan port tunggal. Service merutekan traffic diport: 6379ketargetPort: 6379container yang cocok dengan labelselectoryang ditentukan.containerPortyang digunakan dalam Deployment harus cocok dengantargetPortuntuk merutekan traffic ke Deployment.Terapkan manifes ke cluster Anda:
kubectl apply -f redis-leader-service.yamlPastikan GKE membuat Layanan:
kubectl get serviceOutputnya mirip dengan hal berikut ini:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.51.240.1 <none> 443/TCP 42s redis-leader 10.51.242.233 <none> 6379/TCP 12sManifes berikut menjelaskan Deployment untuk Pod follower Redis:
Terapkan manifes ke cluster Anda:
kubectl apply -f redis-follower-deployment.yamlPastikan bahwa kedua replika follower Redis berjalan:
kubectl get podsOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE redis-follower-76588f55b7-bnsq6 1/1 Running 0 27s redis-follower-76588f55b7-qvtws 1/1 Running 0 27s redis-leader-dd446dc55-kl7nl 1/1 Running 0 119sMungkin perlu waktu beberapa menit agar
STATUSberubah dariPendingmenjadiRunning.Manifes berikut menjelaskan Layanan untuk follower Redis:
Manifes ini menentukan Service berjalan di port 6379. Kolom
selectorService sesuai dengan Pod follower Redis yang dibuat pada langkah sebelumnya.Terapkan manifes ke cluster Anda:
kubectl apply -f redis-follower-service.yamlPastikan GKE membuat Layanan:
kubectl get serviceOutputnya mirip dengan hal berikut ini:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.51.240.1 <none> 443/TCP 1m redis-leader 10.51.242.233 <none> 6379/TCP 49s redis-follower 10.51.247.238 <none> 6379/TCP 3sManifes berikut menjelaskan Deployment untuk server web:
File manifes menentukan variabel lingkungan
GET_HOSTS_FROM=dns. Saat Anda memberikan konfigurasi ke aplikasi frontend web, aplikasi frontend akan menggunakan nama hostredis-followerdanredis-leaderuntuk melakukan pencarian DNS. Pencarian DNS menemukan alamat IP Layanan yang Anda buat pada langkah sebelumnya. Konsep ini disebut penemuan layanan DNS.Terapkan manifes ke cluster Anda:
kubectl apply -f frontend-deployment.yamlPastikan replika sedang berjalan:
kubectl get pods -l app=guestbook -l tier=frontendOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE frontend-7b78458576-8kp8s 1/1 Running 0 37s frontend-7b78458576-gg86q 1/1 Running 0 37s frontend-7b78458576-hz87g 1/1 Running 0 37sTingkatkan jumlah Pod
frontend:kubectl scale deployment frontend --replicas=5Outputnya mirip dengan hal berikut ini:
deployment.extensions/frontend scaledPastikan jumlah replika yang berjalan:
kubectl get podsOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE frontend-88237173-3s3sc 1/1 Running 0 1s frontend-88237173-twgvn 1/1 Running 0 1s frontend-88237173-5p257 1/1 Running 0 23m frontend-88237173-84036 1/1 Running 0 23m frontend-88237173-j3rvr 1/1 Running 0 23m redis-leader-343230949-qfvrq 1/1 Running 0 54m redis-follower-132015689-dp23k 1/1 Running 0 37m redis-follower-132015689-xq9v0 1/1 Running 0 37mAnda dapat mengurangi jumlah Pod
frontendmenggunakan perintah yang sama, dengan mengganti5dengan1.Hapus Layanan
frontend:kubectl delete service frontendHapus cluster GKE:
gcloud container clusters delete guestbook- Pelajari cara mengonfigurasi penskalaan otomatis Pod horizontal.
- Pelajari cara men-deploy WordPress di GKE dengan Persistent Disk dan Cloud SQL.
- Pelajari cara Mengonfigurasi nama domain dengan alamat IP statis.
- Pelajari tutorial Kubernetes Engine lainnya.
Menyiapkan lingkungan
Untuk menyiapkan lingkungan Anda, ikuti langkah-langkah berikut:
Membuat cluster GKE
Buat cluster GKE Autopilot atau Standard:
Autopilot
gcloud container clusters create-auto guestbook \
--location=${COMPUTE_LOCATION} \
Standar
gcloud container clusters create guestbook \
--location=${COMPUTE_LOCATION} \
--num-nodes=4
Hubungkan ke cluster
Konfigurasi kubectl untuk berkomunikasi dengan cluster:
gcloud container clusters get-credentials guestbook \
--location=${COMPUTE_LOCATION}
Menyiapkan leader Redis
Aplikasi ini menggunakan Redis untuk menyimpan datanya. Aplikasi menulis datanya ke instance leader Redis dan membaca data dari beberapa instance follower Redis.
Buat Layanan leader Redis
Aplikasi web perlu berkomunikasi dengan leader Redis untuk menulis datanya. Anda dapat membuat Service untuk mengirim proxy traffic ke Pod leader Redis.
Service adalah abstraksi Kubernetes yang menentukan kumpulan logis Pod dan kebijakan untuk memungkinkan akses ke Pod. Saat membuat Service, Anda mendeskripsikan Pod yang akan di-proxy berdasarkan label Pod.
Menyiapkan follower Redis
Meskipun leader Redis adalah Pod tunggal, Anda dapat membuatnya sangat tersedia dan memenuhi permintaan traffic dengan menambahkan beberapa follower Redis, atau replika.
Buat Layanan follower Redis
Aplikasi web harus berkomunikasi dengan follower Redis untuk membaca data. Agar follower Redis dapat ditemukan, Anda harus menyiapkan Service.
Menyiapkan frontend web aplikasi
Setelah Anda memiliki penyimpanan Redis untuk aplikasi, mulai server web. Seperti follower Redis, frontend di-deploy menggunakan Deployment Kubernetes.
Aplikasi web menggunakan frontend PHP, yang dikonfigurasi untuk berkomunikasi dengan Layanan follower atau leader Redis, bergantung pada apakah permintaan tersebut adalah permintaan baca atau tulis. Frontend mengekspos antarmuka JSON, dan menayangkan UI berbasis jQuery Ajax.
Menampakkan frontend pada alamat IP eksternal
Dengan konfigurasi saat ini, Service redis-follower dan redis-leader yang Anda buat pada langkah sebelumnya hanya dapat diakses dalam cluster GKE karena jenis default untuk Service adalah ClusterIP.
Layanan ClusterIP menyediakan satu alamat IP untuk kumpulan Pod yang ditunjuk oleh
Layanan. Alamat IP ini hanya dapat diakses di dalam cluster.
Agar Service frontend web dapat diakses secara eksternal, Anda dapat
menentukan type: LoadBalancer atau type: NodePort
dalam konfigurasi Service, bergantung pada persyaratan Anda.
Manifes berikut menjelaskan Service jenis LoadBalancer:
Deklarasi port di bagian ports menentukan port: 80 dan
targetPort tidak ditentukan. Jika Anda menghapus properti targetPort, setelan default-nya ditetapkan ke nilai kolom port. Dalam hal ini, Service ini merutekan
traffic eksternal di port 80 ke port 80 container di
Deployment frontend.
Terapkan manifes ke cluster Anda:
kubectl apply -f frontend-service.yaml
Saat Service frontend dibuat, GKE akan membuat
load balancer dan alamat IP eksternal. Resource ini
dikenai biaya.
Membuka situs aplikasi
Untuk mengakses situs aplikasi, dapatkan alamat IP eksternal Layanan
frontend:
kubectl get service frontend
Outputnya mirip dengan hal berikut ini:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend 10.51.242.136 109.197.92.229 80:32372/TCP 1m
Kolom EXTERNAL-IP mungkin menampilkan <pending> saat load balancer sedang dibuat. Proses ini dapat memerlukan waktu beberapa menit. Jika Anda melihat error seperti
Does not have minimum availability, tunggu beberapa menit. Error sementara ini terjadi karena GKE membuat ulang node untuk melakukan perubahan.
Salin alamat IP dan buka halaman di browser Anda:

Coba tambahkan beberapa entri dengan mengetik pesan, lalu klik Submit. Pesan yang Anda ketik akan muncul di frontend. Pesan ini menunjukkan bahwa data berhasil ditambahkan ke Redis melalui Layanan yang Anda buat.
Meningkatkan skala frontend web
Anggap aplikasi Anda telah berjalan selama beberapa waktu, dan tiba-tiba popularitasnya melonjak. Anda memutuskan untuk menambahkan lebih banyak server web ke frontend. Anda dapat melakukannya dengan meningkatkan jumlah Pod.
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
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource satu per satu
Jika Anda telah menggunakan project yang sudah ada dan tidak ingin menghapusnya, hapus resource individual tersebut.