Tutorial ini menunjukkan cara men-deploy aplikasi web dalam container di cluster Google Kubernetes Engine (GKE).
Halaman ini ditujukan bagi Operator dan Developer yang menyediakan dan mengonfigurasi resource cloud serta men-deploy aplikasi dan layanan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang dirujuk dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud
Sebelum membaca halaman ini, pastikan Anda sudah memahami Kubernetes.
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_IDke Google Cloud project ID (PROJECT_ID). Anda akan menggunakan variabel lingkungan ini saat mem-build image container dan mengirimkannya ke repositori.export PROJECT_ID=PROJECT_IDPastikan variabel lingkungan
PROJECT_IDmemiliki nilai yang benar:echo $PROJECT_IDTetapkan project ID Anda untuk Google Cloud CLI:
gcloud config set project $PROJECT_IDOutput:
Updated property [core/project].Buat repositori
hello-repodengan perintah berikut:gcloud artifacts repositories create hello-repo \ --repository-format=docker \ --location=REGION \ --description="Docker repository"Ganti
REGIONdengan region repositori, sepertius-west1. Untuk melihat daftar lokasi yang tersedia, jalankan perintah:gcloud artifacts locations list
Membangun image Docker hello-app
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-appdan Dockerfile dengan menjalankan perintah berikut:git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/quickstarts/hello-appBuat 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
Dockerfiledi 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_IDmengaitkan image container dengan repositorihello-repodi project Google Cloud Anda. - Awalan
us-west1-docker.pkg.devmengacu pada Artifact Registry, host regional untuk repositori Anda.
- Variabel
Jalankan perintah
docker imagesuntuk memverifikasi bahwa build berhasil:docker imagesOutput:
REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/my-project/hello-repo/hello-app v1 25cfadb1bf28 10 seconds ago 54 MBTambahkan 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_NUMBERdengan nomor project untuk project Anda.
(Opsional) Jalankan container Docker Anda secara lokal
Uji image container Anda menggunakan mesin Docker lokal:
docker run --rm -p 8080:8080 REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1Klik 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.devKirim 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 REGIONUntuk cluster zona Standard, tetapkan zona Compute Engine yang terdekat dengan repositori Artifact Registry.
Buat cluster bernama
hello-cluster:gcloud container clusters create-auto hello-clusterPerlu 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
Di konsol Google Cloud , buka halaman Create an Autopilot cluster.
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 hello-app 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-clusterBuat Deployment Kubernetes untuk image Docker
hello-appAnda.kubectl create deployment hello-app --image=REGION-docker.pkg.dev/${PROJECT_ID}/hello-repo/hello-app:v1Tetapkan baseline replika Deployment ke 3.
kubectl scale deployment hello-app --replicas=3Buat resource
HorizontalPodAutoscaleruntuk Deployment Anda.kubectl autoscale deployment hello-app --cpu-percent=80 --min=1 --max=5Untuk melihat Pod yang dibuat, jalankan perintah berikut:
kubectl get podsOutput:
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-appyang Anda kirim ke Artifact Registry, lalu klik Select.Di bagian Container, klik Done, lalu klik Continue.
Di bagian Configuration, di bawah Labels, masukkan
appuntuk Key danhello-appuntuk 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
HorizontalPodAutoscaleruntuk 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 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 exposeuntuk membuat Service Kubernetes untuk deploymenthello-app:kubectl expose deployment hello-app --name=hello-app-service --type=LoadBalancer --port 80 --target-port 8080Di sini, flag
--portmenentukan nomor port yang dikonfigurasi di Load Balancer, sedangkan flag--target-portmenentukan nomor port yang diproses oleh containerhello-app.Jalankan perintah berikut guna mendapatkan detail Service untuk
hello-app-service:kubectl get serviceOutput:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-app-service 10.3.251.122 203.0.113.0 80:30877/TCP 10sSalin alamat
EXTERNAL_IPke papan klip (misalnya:203.0.113.0).
Konsol
Buka halaman Workloads di konsol Google Cloud .
Klik hello-app.
Dari halaman Deployment details, klik list Actions > Expose.
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 versi baru hello-app
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 Kubernetes 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.gountuk melaporkan versi baru2.0.0.Buat dan beri tag image Docker
hello-appyang 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-appyang 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:v2Lihat Pod aktif yang menjalankan image
v1berhenti, dan Pod baru yang menjalankan imagev2dimulai.watch kubectl get podsOutput:
NAME READY STATUS RESTARTS AGE hello-app-89dc45f48-5bzqp 1/1 Running 0 2m42s hello-app-89dc45f48-scm66 1/1 Running 0 2m40sDi tab terpisah, buka kembali IP Eksternal
hello-app-service. Sekarang Anda akan melihatVersionditetapkan 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-appkini terkait dengan Revisi 2.Di tab terpisah, buka lagi alamat IP Service yang tadi Anda salin.
Versionharus2.0.0..