1. Pengantar
Menjalankan situs dan aplikasi itu tidak selalu mudah.
Masalah terjadi ketika seharusnya tidak terjadi, server mengalami crash, peningkatan permintaan menyebabkan lebih banyak resource yang digunakan, dan membuat perubahan tanpa periode nonaktif dapat menjadi rumit dan membuat stres.
Bayangkan alat yang dapat membantu Anda melakukan semua itu dan bahkan memungkinkan Anda mengotomatisasinya. Dengan GKE, semua itu tidak hanya mungkin, tetapi juga mudah! Dalam codelab ini, Anda akan berperan sebagai developer yang menjalankan situs e-commerce untuk perusahaan fiktif—Fancy Store. Karena ada masalah terkait penskalaan dan pemadaman, Anda ditugaskan untuk men-deploy aplikasi Anda ke GKE.
Latihan ini diurutkan untuk mencerminkan pengalaman developer cloud pada umumnya:
- Membuat cluster GKE.
- Buat container Docker.
- Deploy container ke GKE.
- Ekspos container melalui layanan.
- Menskalakan container ke beberapa replika.
- Ubah situs.
- Luncurkan versi baru tanpa periode nonaktif.
Diagram arsitektur

Yang akan Anda pelajari
- Cara membuat cluster GKE
- Cara membuat image Docker
- Cara men-deploy image Docker ke Kubernetes
- Cara menskalakan aplikasi di Kubernetes
- Cara melakukan update berkelanjutan di Kubernetes
Prasyarat
- Akun Google dengan akses administratif untuk membuat project atau project dengan peran pemilik project
- Pemahaman dasar tentang Docker dan Kubernetes (Jika Anda tidak memiliki pemahaman dasar, tinjau Docker dan Kubernetes sekarang.)
2. Penyiapan lingkungan
Penyiapan lingkungan mandiri
Jika Anda belum memiliki Akun Google, Anda harus membuatnya. Login ke Konsol Google Cloud dan buat project baru.


Ingat, project ID adalah nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!). Nama tersebut akan disebut sebagai PROJECT_ID nanti.
Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource Google Cloud. Pengguna baru Google Cloud memenuhi syarat untuk mendapatkan uji coba gratis senilai$300. Jika Anda bukan pengguna baru, jangan khawatir karena codelab ini tidak akan membuat Anda mengeluarkan lebih dari beberapa dolar. Namun, codelab ini dapat menghabiskan lebih banyak uang jika Anda menggunakan lebih banyak resource atau membiarkannya berjalan (lihat bagian "pembersihan" di akhir). Untuk mengetahui informasi selengkapnya, lihat Harga.
Cloud Shell
Meskipun Anda dapat mengoperasikan Google Cloud dan GKE dari jarak jauh dengan laptop, Anda akan menggunakan Cloud Shell—lingkungan command line yang berjalan di Cloud—untuk codelab ini.
Mesin virtual berbasis Debian ini memuat semua alat pengembangan yang akan Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Ini berarti bahwa semua yang Anda perlukan untuk codelab ini adalah browser (ya, ini berfungsi di Chromebook).
- Untuk mengaktifkan Cloud Shell dari Cloud Console, cukup klik Aktifkan Cloud Shell
(hanya perlu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan).
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID.
gcloud auth list
Output perintah
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika, untuk beberapa alasan, project belum disetel, cukup jalankan perintah berikut:
gcloud config set project <PROJECT_ID>
Mencari PROJECT_ID Anda? Periksa ID yang Anda gunakan di langkah-langkah penyiapan atau cari di dasbor Cloud Console:
Cloud Shell juga menetapkan beberapa variabel lingkungan secara default, yang mungkin berguna saat Anda menjalankan perintah di masa mendatang.
echo $GOOGLE_CLOUD_PROJECT
Output perintah
<PROJECT_ID>
- Terakhir, tetapkan zona dan konfigurasi project default.
gcloud config set compute/zone us-central1-f
Anda dapat memilih berbagai zona yang berbeda. Untuk mengetahui informasi selengkapnya, lihat Region & Zona.
3. Membuat cluster GKE
Setelah memiliki lingkungan developer yang berfungsi, Anda memerlukan cluster GKE untuk men-deploy situs Anda. Sebelum membuat cluster, Anda harus memastikan bahwa API yang tepat telah diaktifkan. Jalankan perintah berikut untuk mengaktifkan API container:
gcloud services enable container.googleapis.com
Sekarang, Anda dapat membuat cluster. Ikuti langkah-langkah di bawah untuk membuat cluster bernama fancy-cluster dengan 3 node:
gcloud container clusters create fancy-cluster --num-nodes 3
Mungkin diperlukan waktu beberapa menit untuk membuat cluster. Setelah itu, jalankan perintah berikut dan lihat tiga instance virtual machine (VM) worker cluster:
gcloud compute instances list
Output:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gke-fancy-cluster-default-pool-ad92506d-1ng3 us-east4-a n1-standard-1 10.150.0.7 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4fvq us-east4-a n1-standard-1 10.150.0.5 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4zs3 us-east4-a n1-standard-1 10.150.0.6 XX.XX.XX.XX RUNNING
Anda juga dapat melihat cluster dan informasi terkait di Konsol Cloud. Klik tombol menu di sudut kiri atas, scroll ke bawah ke Kubernetes Engine, lalu klik Clusters. Anda akan melihat cluster Anda yang bernama fancy-cluster.


Selamat! Anda telah membuat cluster pertama Anda.
4. Membuat clone repositori sumber
Karena ini adalah situs yang sudah ada, Anda hanya perlu meng-clone sumber dari repositori sehingga Anda dapat berfokus pada pembuatan image Docker dan deployment ke GKE.
Jalankan perintah berikut untuk meng-clone repositori sumber ke instance Cloud Shell Anda dan mengubahnya ke direktori yang sesuai. Anda juga akan menginstal dependensi Node.js agar dapat menguji aplikasi sebelum men-deploy-nya.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
Tindakan ini akan meng-clone repositori, mengubah direktori, dan menginstal dependensi yang diperlukan untuk menjalankan aplikasi Anda secara lokal. Mungkin perlu waktu beberapa menit untuk menjalankan skrip tersebut.
Lakukan uji tuntas dan uji aplikasi Anda. Jalankan perintah berikut untuk memulai server web Anda:
cd ~/monolith-to-microservices/monolith npm start
Output:
Monolith listening on port 8080!
Anda dapat melihat pratinjau aplikasi dengan mengklik ikon pratinjau web di menu Cloud Shell, lalu memilih Preview on port 8080.

Tindakan ini akan membuka jendela baru tempat Anda dapat melihat Fancy Store Anda beraksi.

Anda dapat menutup jendela tersebut setelah melihat situs. Tekan Control+C (Windows atau Mac) di jendela terminal untuk menghentikan proses server web.
5. Membuat container Docker dengan Cloud Build
Setelah file sumber Anda siap, saatnya untuk melakukan Dockerize pada aplikasi Anda.
Biasanya, Anda harus mengambil pendekatan dua langkah yang mencakup pembuatan container Docker dan mengirimkannya ke registry untuk menyimpan image yang ditarik dari GKE. Namun, Anda dapat mempermudah pekerjaan dengan menggunakan Cloud Build untuk membuat container Docker dan menempatkan image di Container Registry dengan satu perintah. (Untuk melihat proses manual pembuatan file docker dan pengirimannya, lihat Panduan memulai Container Registry.)
Cloud Build mengompresi file dari direktori dan memindahkannya ke bucket Cloud Storage. Proses build kemudian mengambil file dari bucket dan menggunakan Dockerfile untuk menjalankan proses build Docker. Karena Anda menentukan flag --tag dengan host sebagai gcr.io untuk image Docker, image Docker yang dihasilkan akan dikirim ke Container Registry.
Pertama, Anda perlu mengaktifkan Cloud Build API dengan menjalankan perintah berikut:
gcloud services enable cloudbuild.googleapis.com
Setelah API diaktifkan, jalankan perintah berikut di Cloud Shell untuk memulai proses build:
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
Proses tersebut memerlukan waktu beberapa menit, tetapi setelah selesai, Anda dapat melihat output berikut di terminal:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
Untuk melihat histori build atau mengamati prosesnya secara real time, Anda dapat membuka Konsol Cloud. Klik tombol menu di sudut kiri atas, scroll ke bawah ke Ci/CD, lalu klik Cloud Build, dan terakhir klik History. Di sana, Anda dapat melihat daftar build sebelumnya, tetapi seharusnya hanya ada satu build yang Anda buat.

Jika Anda mengklik Build ID, Anda dapat melihat semua detail untuk build tersebut, termasuk output log.
Di halaman detail build, Anda dapat melihat image container yang dibuat dengan mengklik Nama image di bagian informasi build.

6. Men-deploy container ke GKE
Setelah membuat container untuk situs dan mengirim container tersebut ke Container Registry, Anda dapat men-deploy-nya ke Kubernetes.
Untuk men-deploy dan mengelola aplikasi di cluster GKE, Anda harus berkomunikasi dengan sistem pengelolaan cluster Kubernetes. Anda biasanya melakukannya dengan menggunakan alat command line kubectl.
Kubernetes merepresentasikan aplikasi sebagai Pod, yaitu unit yang merepresentasikan sebuah container (atau sekelompok container yang terkait erat). Pod adalah unit terkecil yang dapat di-deploy di Kubernetes. Di sini, setiap Pod hanya berisi container monolit Anda.
Untuk men-deploy aplikasi, Anda harus membuat Deployment. Deployment mengelola beberapa salinan aplikasi Anda—yang disebut replika—dan menjadwalkannya untuk berjalan di node individual dalam cluster Anda. Dalam hal ini, Deployment hanya akan menjalankan satu Pod aplikasi Anda. Deployment memastikan hal ini dengan membuat ReplicaSet. ReplicaSet bertanggung jawab untuk memastikan jumlah replika yang ditentukan selalu berjalan.
Perintah kubectl create deployment akan menyebabkan Kubernetes membuat Deployment bernama monolith di cluster Anda dengan 1 replika.
Jalankan perintah berikut untuk men-deploy aplikasi Anda:
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
Memverifikasi deployment
Untuk memverifikasi bahwa Deployment berhasil dibuat, jalankan perintah berikut (Mungkin perlu waktu beberapa saat agar status Pod menjadi "Running"):
kubectl get all
Output:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-htm7z 1/1 Running 0 6m21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 20m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 20m
Output tersebut menunjukkan beberapa hal. Anda dapat melihat Deployment Anda yang aktif; ReplicaSet Anda, dengan jumlah Pod yang diinginkan sebanyak satu; dan Pod Anda, yang sedang berjalan. Sepertinya Anda berhasil membuat semuanya.
Untuk melihat setiap resource, Anda dapat menjalankan perintah berikut:
# Show pods kubectl get pods # Show deployments kubectl get deployments # Show replica sets kubectl get rs #You can also combine them kubectl get pods,deployments
Untuk melihat manfaat penuh Kubernetes, Anda dapat menyimulasikan crash server, menghapus Pod, dan melihat apa yang terjadi.
Salin nama pod Anda dari perintah sebelumnya dan jalankan perintah berikut untuk menghapusnya:
kubectl delete pod/<POD_NAME>
Jika cukup cepat, Anda dapat menjalankan perintah sebelumnya untuk melihat semuanya lagi dan Anda akan melihat dua Pod, satu menghentikan dan yang lainnya membuat atau menjalankan:
kubectl get all
Output:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 4s pod/monolith-7d8bc7bf68-htm7z 1/1 Terminating 0 9m35s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 24m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 24m
Mengapa hal ini terjadi? ReplicaSet melihat bahwa pod sedang dihentikan dan memicu pod baru untuk mempertahankan jumlah replika yang diinginkan. Nanti, Anda akan melihat cara melakukan penskalaan untuk memastikan ada beberapa instance yang berjalan, sehingga jika salah satunya tidak berfungsi, pengguna tidak akan mengalami periode nonaktif.
7. Mengekspos deployment GKE
Anda men-deploy aplikasi ke GKE, tetapi tidak memiliki cara untuk mengaksesnya di luar cluster. Secara default, container yang Anda jalankan di GKE tidak dapat diakses dari internet karena tidak memiliki alamat IP eksternal. Anda harus mengekspos aplikasi Anda secara eksplisit ke traffic dari internet melalui resource Service. Service menyediakan dukungan networking dan IP untuk Pod aplikasi Anda. GKE membuat IP eksternal dan load balancer (bergantung pada penagihan) untuk aplikasi Anda.
Jalankan perintah berikut untuk mengekspos situs Anda ke internet:
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080
Output:
service/monolith exposed
Mengakses layanan
GKE menetapkan alamat IP eksternal ke resource Service, bukan Deployment. Jika Anda ingin menemukan IP eksternal yang disediakan GKE untuk aplikasi Anda, Anda dapat memeriksa Service dengan perintah kubectl get service:
kubectl get service
Output:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d
Setelah Anda menentukan alamat IP eksternal untuk aplikasi Anda, salin alamat IP tersebut. Buka URL tersebut (seperti http://203.0.113.0) di browser Anda untuk memeriksa apakah aplikasi Anda dapat diakses.

Anda akan melihat situs yang sama dengan yang Anda uji sebelumnya. Selamat! Situs Anda berjalan sepenuhnya di Kubernetes.
8. Menskalakan deployment GKE
Sekarang setelah Anda memiliki instance aplikasi yang berjalan di GKE dan mengeksposnya ke internet, situs Anda menjadi sangat populer. Anda memerlukan cara untuk menskalakan aplikasi ke beberapa instance agar dapat menangani traffic. Pelajari cara menskalakan aplikasi Anda hingga tiga replika.
Jalankan perintah berikut untuk menskalakan deployment Anda hingga tiga replika:
kubectl scale deployment monolith --replicas=3
Output:
deployment.apps/monolith scaled
Memverifikasi deployment yang diskalakan
Untuk memverifikasi bahwa Deployment berhasil diskalakan, jalankan perintah berikut:
kubectl get all
Output:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 36m pod/monolith-7d8bc7bf68-7ds7q 1/1 Running 0 45s pod/monolith-7d8bc7bf68-c5kxk 1/1 Running 0 45s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 25h service/monolith LoadBalancer 10.27.253.64 XX.XX.XX.XX 80:32050/TCP 6m7s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 3 3 3 3 61m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 3 3 3 61m
Anda akan melihat tiga instance Pod Anda berjalan. Perhatikan juga bahwa Deployment dan ReplicaSet Anda sekarang memiliki jumlah yang diinginkan sebanyak tiga.
9. Membuat perubahan pada situs
Tim pemasaran meminta Anda mengubah halaman beranda situs Anda. Menurut mereka, halaman ini harus lebih informatif dengan menjelaskan apa itu perusahaan Anda dan apa yang sebenarnya Anda jual. Di bagian ini, Anda akan menambahkan teks ke beranda untuk memenuhi permintaan tim pemasaran. Sepertinya salah satu developer kami telah membuat perubahan itu dengan nama file index.js.new. Anda dapat menyalin file ke index.js dan perubahan Anda akan diterapkan. Ikuti petunjuk di bawah ini untuk melakukan perubahan yang sesuai.
Jalankan perintah berikut, salin file yang telah diperbarui itu ke nama file yang benar, dan cetak kontennya untuk memverifikasi perubahan:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Kode yang dihasilkan akan terlihat seperti ini:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}
Anda telah mengupdate komponen React, tetapi Anda perlu membangun aplikasi React untuk menghasilkan file statis. Jalankan perintah berikut untuk membangun aplikasi React dan menyalinnya ke direktori publik monolith:
cd ~/monolith-to-microservices/react-app npm run build:monolith
Setelah kode diperbarui, Anda perlu membangun ulang container Docker dan memublikasikannya ke Container Registry. Anda dapat menggunakan perintah yang sama seperti sebelumnya, kecuali kali ini, Anda akan mengupdate label versi.
Jalankan perintah berikut untuk memicu Cloud Build baru dengan versi image yang diperbarui 2.0.0:
cd ~/monolith-to-microservices/monolith
#Feel free to test your application
npm start
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
Tekan Control+C (Windows atau Mac) di jendela terminal untuk menghentikan proses server web.
Di bagian berikutnya, Anda akan menggunakan image tersebut untuk mengupdate aplikasi tanpa periode nonaktif.
10. Mengupdate situs tanpa periode nonaktif
Perubahan telah selesai dan tim pemasaran puas dengan pembaruan Anda. Saatnya mengupdate situs tanpa mengganggu pengguna. Ikuti petunjuk di bawah untuk memperbarui situs Anda.
Update berkelanjutan GKE memastikan aplikasi Anda tetap berjalan dan tersedia meskipun sistem mengganti instance image container lama Anda dengan yang baru di semua replika yang berjalan.
Dari command line, Anda dapat memberi tahu Kubernetes bahwa Anda ingin mengupdate image untuk Deployment Anda ke versi baru dengan perintah berikut:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
Output:
deployment.apps/monolith image updated
Memverifikasi Deployment
Anda dapat memvalidasi update Deployment dengan menjalankan perintah berikut:
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE monolith-584fbc994b-4hj68 1/1 Terminating 0 60m monolith-584fbc994b-fpwdw 1/1 Running 0 60m monolith-584fbc994b-xsk8s 1/1 Terminating 0 60m monolith-75f4cf58d5-24cq8 1/1 Running 0 3s monolith-75f4cf58d5-rfj8r 1/1 Running 0 5s monolith-75f4cf58d5-xm44v 0/1 ContainerCreating 0 1s
Anda akan melihat tiga Pod baru dibuat dan pod lama Anda dimatikan. Anda dapat mengetahui mana yang baru dan mana yang lama berdasarkan usianya. Pada akhirnya, Anda hanya akan melihat tiga Pod lagi, yang akan menjadi tiga Pod yang diperbarui.
Untuk memverifikasi perubahan, buka IP eksternal load balancer lagi dan perhatikan bahwa aplikasi Anda telah diupdate.
Jalankan perintah berikut untuk mencantumkan layanan dan melihat alamat IP jika Anda lupa:
kubectl get svc
Situs Anda akan menampilkan teks yang Anda tambahkan ke komponen halaman beranda.

11. Pembersihan
Menghapus repositori Git
cd ~ rm -rf monolith-to-microservices
Menghapus image Container Registry
CATATAN: Jika Anda membuat versi lain, Anda juga dapat menggunakan sintaksis yang sama untuk menghapus gambar tersebut. Codelab ini mengasumsikan bahwa Anda hanya memiliki dua tag.
# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet
# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
Menghapus artefak Cloud Build dari Cloud Storage
CATATAN: Jika Anda menggunakan Cloud Build untuk artefak selain codelab ini, Anda harus menghapus sumber secara manual dari bucket Cloud Storage gs://<PROJECT_ID>_cloudbuild/source.
# The following command will take all source archives from all builds and delete them from cloud storage
# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'
gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
Menghapus layanan GKE
kubectl delete service monolith kubectl delete deployment monolith
Menghapus cluster GKE
gcloud container clusters delete fancy-cluster
CATATAN: Perintah ini mungkin memerlukan waktu beberapa saat.
12. Selamat!
Anda telah men-deploy, menskalakan, dan mengupdate situs Anda di GKE. Anda kini memiliki pengalaman menggunakan Docker dan Kubernetes.