Tutorial ini menunjukkan cara memaketkan aplikasi web di image container Docker, dan menjalankan image container tersebut di cluster Google Kubernetes Engine (GKE). Kemudian, Anda akan men-deploy aplikasi web itu sebagai set replika yang di-load balance yang dapat diskalakan sesuai kebutuhan pengguna Anda.
Tujuan
- Memaketkan aplikasi web contoh ke dalam image Docker.
- Mengupload image Docker ke Artifact Registry.
- Membuat cluster GKE.
- Men-deploy aplikasi contoh ke cluster.
- Mengelola penskalaan otomatis untuk deployment.
- Mengekspos aplikasi contoh ke internet.
- Men-deploy aplikasi contoh versi baru.
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
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Compute Engine, Artifact Registry, and Google Kubernetes Engine .
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Compute Engine, Artifact Registry, and Google Kubernetes Engine .
Mengaktifkan Cloud Shell
Cloud Shell telah diinstal dengan alat command line gcloud
, docker
, dan kubectl
yang digunakan dalam tutorial ini.
- Buka Konsol Google Cloud.
Klik tombol Activate Cloud Shell di bagian atas jendela Konsol Google Cloud.
Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah Konsol Google Cloud dan menampilkan prompt command line.
Membuat repositori
Dalam tutorial ini, Anda akan menyimpan image di Artifact Registry dan men-deploy-nya dari registry. Untuk panduan memulai ini, Anda akan membuat repositori bernama hello-repo
.
Tetapkan variabel lingkungan
PROJECT_ID
ke project ID Google Cloud (PROJECT_ID
) Anda. Anda akan menggunakan variabel lingkungan ini saat membangun image container dan mengirimkannya ke repositori.export PROJECT_ID=PROJECT_ID
Pastikan variabel lingkungan
PROJECT_ID
memiliki nilai yang benar:echo $PROJECT_ID
Tetapkan project ID Anda untuk Google Cloud CLI:
gcloud config set project $PROJECT_ID
Output:
Updated property [core/project].
Buat repositori
hello-repo
dengan perintah berikut:gcloud artifacts repositories create hello-repo \ --repository-format=docker \ --location=REGION \ --description="Docker repository"
Ganti
REGION
dengan region repositori, sepertius-west1
. Untuk melihat daftar lokasi yang tersedia, jalankan perintah:gcloud artifacts locations list
Membuat image container
Dalam tutorial ini, Anda akan men-deploy contoh aplikasi web yang disebut hello-app
, sebuah server web yang ditulis di Go yang merespons semua permintaan dengan pesan Hello, World!
di port 8080.
GKE menerima image Docker sebagai format deployment aplikasi.
Sebelum men-deploy hello-app
ke GKE, Anda harus memaketkan kode sumber hello-app
sebagai image Docker.
Untuk membuat image Docker, Anda memerlukan kode sumber dan Dockerfile. Dockerfile berisi petunjuk cara membuat image.
Download kode sumber
hello-app
dan Dockerfile dengan menjalankan perintah berikut:git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/quickstarts/hello-app
Buat image Docker dan beri tag untuk
hello-app
:docker build -t REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1 .
Perintah ini menginstruksikan Docker untuk membuat image menggunakan
Dockerfile
di direktori saat ini, menyimpannya ke lingkungan lokal, dan memberinya tag dengan nama, misalnyaus-west1-docker.pkg.dev/my-project/hello-repo/hello-app:v1
. Image ini akan dikirim ke Artifact Registry di bagian berikutnya.- Variabel
PROJECT_ID
mengaitkan image container dengan repositorihello-repo
di project Google Cloud Anda. - Awalan
us-west1-docker.pkg.dev
mengacu pada Artifact Registry, host regional untuk repositori Anda.
- Variabel
Jalankan perintah
docker images
untuk memverifikasi bahwa build berhasil:docker images
Output:
REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/my-project/hello-repo/hello-app v1 25cfadb1bf28 10 seconds ago 54 MB
Tambahkan binding kebijakan IAM ke akun layanan Anda:
gcloud artifacts repositories add-iam-policy-binding hello-repo \ --location=REGION \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role="roles/artifactregistry.reader"
Ganti
PROJECT_NUMBER
dengan nomor project untuk project Anda.
Menjalankan container secara lokal (opsional)
Uji image container Anda menggunakan mesin Docker lokal:
docker run --rm -p 8080:8080 REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1
Klik tombol Web Preview , lalu pilih nomor port
8080
. GKE akan membuka URL pratinjau pada layanan proxy-nya di jendela browser baru.
Mengirim image Docker ke Artifact Registry
Anda harus mengupload image container ke registry agar cluster GKE dapat mendownload dan menjalankan image container tersebut. Dalam tutorial ini, Anda akan menyimpan container di Artifact Registry.
Konfigurasi alat command line Docker untuk melakukan autentikasi ke Artifact Registry:
gcloud auth configure-docker REGION-docker.pkg.dev
Kirim image Docker yang baru saja Anda buat ke repositori:
docker push REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1
Membuat cluster GKE
Setelah image Docker disimpan di Artifact Registry, buat cluster GKE untuk menjalankan hello-app
. Cluster GKE terdiri atas kumpulan instance VM Compute Engine yang menjalankan Kubernetes, sistem orkestrasi cluster open source yang mendukung GKE.
Cloud Shell
Tetapkan region Compute Engine Anda:
gcloud config set compute/region REGION
Untuk cluster zona Standard, tetapkan zona Compute Engine yang terdekat dengan repositori Artifact Registry.
Buat cluster bernama
hello-cluster
:gcloud container clusters create-auto hello-cluster
Perlu waktu beberapa menit untuk membuat cluster GKE dan memeriksa kondisinya. Untuk menjalankan tutorial ini di cluster GKE Standard, gunakan perintah
gcloud container clusters create
.
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik add_box Create.
Untuk GKE Autopilot, klik Configure.
Di kolom Name, masukkan nama
hello-cluster
.Pilih region Compute Engine dari menu drop-down Region, misalnya
us-west1
.Klik Create.
Tunggu hingga cluster selesai dibuat. Jika cluster sudah siap, tanda centang akan muncul di samping nama cluster tersebut.
Men-deploy aplikasi contoh ke GKE
Sekarang Anda siap men-deploy image Docker yang telah dibuat ke cluster GKE.
Kubernetes merepresentasikan aplikasi sebagai Pod, yakni unit skalabel yang menampung satu atau beberapa container. Pod adalah unit terkecil yang dapat di-deploy di Kubernetes. Biasanya, Anda men-deploy Pod sebagai serangkaian replika yang dapat diskalakan dan didistribusikan bersama-sama di seluruh cluster. Salah satu cara untuk men-deploy set replika adalah melalui Deployment Kubernetes.
Di bagian ini, Anda akan membuat Deployment Kubernetes untuk menjalankan hello-app
di cluster Anda. Deployment ini memiliki replika (Pod). Satu Pod Deployment hanya berisi satu container: image Docker hello-app
.
Anda juga akan membuat resource HorizontalPodAutoscaler yang menskalakan jumlah Pod dari 3 menjadi angka antara 1 dan 5, berdasarkan beban CPU.
Cloud Shell
Pastikan Anda terhubung ke cluster GKE.
gcloud container clusters get-credentials hello-cluster --region REGION
Buat Deployment Kubernetes untuk image Docker
hello-app
Anda.kubectl create deployment hello-app --image=REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1
Tetapkan baseline replika Deployment ke 3.
kubectl scale deployment hello-app --replicas=3
Buat resource
HorizontalPodAutoscaler
untuk Deployment Anda.kubectl autoscale deployment hello-app --cpu-percent=80 --min=1 --max=5
Untuk melihat Pod yang dibuat, jalankan perintah berikut:
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE hello-app-784d7569bc-hgmpx 1/1 Running 0 90s hello-app-784d7569bc-jfkz5 1/1 Running 0 90s hello-app-784d7569bc-mnrrl 1/1 Running 0 95s
Konsol
Buka halaman Workloads di Konsol Google Cloud.
Klik add_box Deploy.
Di bagian Specify container, pilih Existing container image.
Di kolom Image path, klik Select.
Di panel Select container image, pilih image
hello-app
yang Anda kirim ke Artifact Registry, lalu klik Select.Di bagian Container, klik Done, lalu klik Continue.
Di bagian Configuration, di bawah Labels, masukkan
app
untuk Key danhello-app
untuk Value.Di bagian Configuration YAML, klik View YAML. Tindakan ini akan membuka file konfigurasi YAML yang menampilkan dua resource Kubernetes API yang akan di-deploy ke cluster: satu Deployment, dan satu
HorizontalPodAutoscaler
untuk Deployment tersebut.Klik Close, lalu klik Deploy.
Setelah Pod Deployment siap, halaman Deployment details akan terbuka.
Di bagian Managed pods, perhatikan tiga Pod yang berjalan untuk Deployment
hello-app
.
Mengekspos aplikasi contoh ke internet
Meskipun Pod memiliki alamat IP yang ditetapkan secara individual, IP tersebut hanya dapat dijangkau dari dalam cluster. Selain itu, Pod GKE dirancang agar bersifat efemeral, yang mulai atau berhenti berdasarkan kebutuhan penskalaan. Dan saat Pod tidak bekerja akibat adanya error, GKE otomatis men-deploy ulang Pod tersebut, dengan menetapkan alamat IP Pod baru setiap kali error terjadi.
Hal ini berarti bahwa untuk Deployment apa pun, kumpulan alamat IP yang terkait dengan kumpulan Pod aktif bersifat dinamis. Kita memerlukan cara untuk 1) mengelompokkan Pod ke dalam satu nama host statis, dan 2) mengekspos sekelompok Pod di luar cluster ke internet.
Service Kubernetes mengatasi kedua masalah ini.
Service mengelompokkan Pod ke dalam satu alamat IP statis, yang dapat dijangkau dari Pod mana pun di dalam cluster.
GKE juga menetapkan nama host DNS ke IP statis tersebut. Contoh, hello-app.default.svc.cluster.local
Jenis Service default di GKE disebut ClusterIP, di mana Service mendapatkan alamat IP yang hanya dapat dijangkau dari dalam cluster.
Untuk mengekspos Service Kubernetes di luar cluster, buat Service dengan jenis LoadBalancer
.
Jenis Service ini menghasilkan IP Load Balancer Eksternal untuk sekumpulan Pod yang dapat dijangkau melalui internet.
Di bagian ini, Anda akan mengekspos Deployment hello-app
ke internet menggunakan Service jenis LoadBalancer
.
Cloud Shell
Gunakan perintah
kubectl expose
untuk membuat Service Kubernetes untuk deploymenthello-app
:kubectl expose deployment hello-app --name=hello-app-service --type=LoadBalancer --port 80 --target-port 8080
Di sini, flag
--port
menentukan nomor port yang dikonfigurasi di Load Balancer, sedangkan flag--target-port
menentukan nomor port yang diproses oleh containerhello-app
.Jalankan perintah berikut guna mendapatkan detail Service untuk
hello-app-service
:kubectl get service
Output:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-app-service 10.3.251.122 203.0.113.0 80:30877/TCP 10s
Salin alamat
EXTERNAL_IP
ke papan klip (misalnya:203.0.113.0
).
Konsol
Buka halaman Workloads di Konsol Google Cloud.
Klik hello-app.
Dari halaman Detail deployment, klik list Tindakan > Ekspos.
Dalam dialog Expose, tetapkan Target port ke
8080
. Ini adalah port yang diproses containerhello-app
.Dari menu drop-down Service type, pilih Load balancer.
Klik Explore guna membuat Service Kubernetes untuk
hello-app
.Jika Load Balancer sudah siap, halaman Service details akan terbuka.
Scroll ke bawah ke kolom External endpoints, lalu salin alamat IP.
Setelah Pod hello-app
terekspos ke internet melalui Service Kubernetes, Anda dapat membuka tab browser baru dan menuju ke alamat IP Service yang telah Anda salin ke papan klip. Pesan Hello, World!
akan muncul, beserta kolom Hostname
. Hostname
sesuai dengan salah satu dari ketiga Pod hello-app
yang menyalurkan permintaan HTTP Anda ke browser.
Men-deploy aplikasi contoh versi baru
Di bagian ini, Anda akan mengupgrade hello-app
ke versi baru dengan membuat dan men-deploy image Docker baru ke cluster GKE.
Fitur update berkelanjutan GKE memungkinkan Anda mengupdate Deployment tanpa periode nonaktif. Selama update berkelanjutan, cluster GKE Anda secara bertahap mengganti Pod hello-app
yang ada dengan Pod yang berisi image Docker untuk versi baru.
Selama update, layanan load balancer hanya merutekan traffic ke Pod yang tersedia.
Kembali ke Cloud Shell, tempat Anda telah meng-clone kode sumber hello-app dan Dockerfile. Update fungsi
hello()
dalam filemain.go
untuk melaporkan versi baru2.0.0
.Buat dan beri tag image Docker
hello-app
yang baru.docker build -t REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v2 .
Kirim image ke Artifact Registry.
docker push REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v2
Sekarang Anda siap mengupdate Deployment Kubernetes hello-app
untuk menggunakan image Docker baru.
Cloud Shell
Terapkan update berkelanjutan ke Deployment
hello-app
yang ada dengan update image menggunakan perintahkubectl set image
:kubectl set image deployment/hello-app hello-app=REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v2
Lihat Pod aktif yang menjalankan image
v1
berhenti, dan Pod baru yang menjalankan imagev2
dimulai.watch kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE hello-app-89dc45f48-5bzqp 1/1 Running 0 2m42s hello-app-89dc45f48-scm66 1/1 Running 0 2m40s
Di tab terpisah, buka kembali IP Eksternal
hello-app-service
. Sekarang Anda akan melihatVersion
ditetapkan ke2.0.0.
Konsol
Buka halaman Workloads di Konsol Google Cloud.
Klik hello-app.
Di halaman Deployment details, klik list Actions > Rolling update.
Pada dialog Rolling update, tetapkan kolom Image of hello-app ke
REGION-docker.pkg.dev/PROJECT_ID/hello-repo/hello-app:v2
.Klik Update.
Di halaman Deployment details, periksa bagian Active Revisions. Sekarang Anda akan melihat dua Revisi, 1 dan 2. Revisi 1 terkait dengan Deployment awal yang Anda buat sebelumnya. Revisi 2 adalah update berkelanjutan yang baru saja Anda mulai.
Setelah beberapa saat, muat ulang halaman. Di bawah Managed pods, semua replika
hello-app
kini terkait dengan Revisi 2.Di tab terpisah, buka lagi alamat IP Service yang tadi Anda salin.
Version
harus2.0.0.
.
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus resource satu per satu.
Hapus Layanan: Tindakan ini akan membatalkan alokasi Cloud Load Balancer yang dibuat untuk Layanan Anda:
kubectl delete service hello-app-service
Menghapus cluster: Tindakan ini akan menghapus resource yang membentuk cluster, seperti instance komputasi, disk, dan resource jaringan:
gcloud container clusters delete hello-cluster --region REGION
Menghapus image container: Tindakan ini akan menghapus image Docker yang Anda kirim ke Artifact Registry.
gcloud artifacts docker images delete \ REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1 \ --delete-tags --quiet gcloud artifacts docker images delete \ REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v2 \ --delete-tags --quiet
Langkah selanjutnya
Pelajari Harga untuk GKE dan gunakan Kalkulator Harga untuk memperkirakan biaya.
Baca tutorial Load Balancer, yang menunjukkan konfigurasi load balancing lanjutan untuk aplikasi web.
Konfigurasi 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.
Cobalah sendiri
Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa GKE dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
Coba GKE gratis