Tutorial ini menunjukkan cara mem-build aplikasi web multi-tingkat menggunakan Google Kubernetes Engine (GKE).
Dalam tutorial ini, Anda akan melakukan beberapa hal berikut:
- Menyiapkan aplikasi web dengan alamat IP eksternal dan load balancer.
- Buat cluster Redis dengan satu master (pemimpin) dan beberapa replika (pengikut).
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
Dalam dokumen ini, Anda akan 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
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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
Menyiapkan lingkungan
Untuk menyiapkan lingkungan Anda, ikuti langkah-langkah berikut:
Menetapkan variabel lingkungan:
export PROJECT_ID=PROJECT_ID export COMPUTE_LOCATION=COMPUTE_LOCATION
Ganti kode berikut:
PROJECT_ID
: project ID Google Cloud AndaCOMPUTE_LOCATION
: Lokasi Compute Engine, sepertius-central1
.
Buat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Ubah ke direktori kerja:
cd kubernetes-engine-samples/quickstarts/guestbook/
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 menggunakan Redis untuk menyimpan datanya. Aplikasi menulis datanya ke instance leader Redis dan membaca data dari beberapa instance follower Redis.
Manifes berikut menjelaskan Deployment Kubernetes yang menjalankan satu replika Pod leader Redis:
Terapkan manifes ke cluster Anda:
kubectl apply -f redis-leader-deployment.yaml
Pastikan bahwa Pod leader Redis sedang berjalan:
kubectl get pods
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE redis-leader-343230949-qfvrq 1/1 Running 0 43s
Mungkin perlu waktu beberapa menit agar
STATUS
berubah dariPending
menjadiRunning
.
Membuat 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.
Manifes berikut menjelaskan Service untuk leader Redis:
Manifes ini menyertakan sekumpulan pemilih label. Label ini cocok dengan kumpulan label yang di-deploy di langkah sebelumnya. Oleh karena itu, Service ini merutekan traffic jaringan ke Pod leader Redis yang dibuat pada langkah sebelumnya.
Bagian
ports
dari manifes mendeklarasikan pemetaan port tunggal. Layanan merutekan traffic diport: 6379
ketargetPort: 6379
penampung yang cocok dengan labelselector
yang ditentukan.containerPort
yang digunakan dalam Deployment harus cocok dengantargetPort
untuk merutekan traffic ke Deployment.Terapkan manifes ke cluster Anda:
kubectl apply -f redis-leader-service.yaml
Pastikan GKE membuat Layanan:
kubectl get service
Outputnya 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 12s
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.
Manifes berikut menjelaskan Deployment untuk Pod follower Redis:
Terapkan manifes ke cluster Anda:
kubectl apply -f redis-follower-deployment.yaml
Pastikan bahwa kedua replika follower Redis berjalan:
kubectl get pods
Outputnya 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 119s
Mungkin perlu waktu beberapa menit agar
STATUS
berubah dariPending
menjadiRunning
.
Membuat Layanan follower Redis
Aplikasi web harus berkomunikasi dengan follower Redis untuk membaca data. Agar follower Redis dapat ditemukan, Anda harus menyiapkan Layanan.
Manifes berikut menjelaskan Layanan untuk follower Redis:
Manifes ini menentukan Service yang berjalan di port 6379. Kolom
selector
Service sesuai dengan Pod follower Redis yang dibuat pada langkah sebelumnya.Terapkan manifes ke cluster Anda:
kubectl apply -f redis-follower-service.yaml
Pastikan GKE membuat Layanan:
kubectl get service
Outputnya 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 3s
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 baca atau tulis. Frontend mengekspos antarmuka JSON, dan menayangkan UI berbasis jQuery Ajax.
Manifes 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-follower
danredis-leader
untuk melakukan pencarian DNS. Pencarian DNS menemukan alamat IP Service yang Anda buat pada langkah sebelumnya. Konsep ini disebut penemuan layanan DNS.Terapkan manifes ke cluster Anda:
kubectl apply -f frontend-deployment.yaml
Pastikan replika berjalan:
kubectl get pods -l app=guestbook -l tier=frontend
Outputnya 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 37s
Menampakkan frontend pada alamat IP eksternal
Dengan konfigurasi saat ini, Service redis-follower
dan redis-leader
yang Anda buat di langkah sebelumnya hanya dapat diakses dalam cluster GKE karena jenis default untuk Service adalah ClusterIP
.
Layanan ClusterIP
menyediakan satu alamat IP untuk kumpulan Pod tempat
Layanan mengarah. Alamat IP ini hanya dapat diakses di dalam cluster.
Agar Layanan frontend web dapat diakses secara eksternal, Anda dapat
menentukan type: LoadBalancer
atau type: NodePort
dalam konfigurasi Layanan, 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.
Buka 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 mungkin 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.
Tingkatkan jumlah Pod
frontend
:kubectl scale deployment frontend --replicas=5
Outputnya mirip dengan hal berikut ini:
deployment.extensions/frontend scaled
Pastikan jumlah replika yang berjalan:
kubectl get pods
Outputnya 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 37m
Anda dapat menskalakan jumlah Pod
frontend
dengan menggunakan perintah yang sama, mengganti5
dengan1
.
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.
Hapus Layanan
frontend
:kubectl delete service frontend
Hapus cluster GKE:
gcloud container clusters delete guestbook
Langkah selanjutnya
- 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.