Ini adalah tutorial kelima dan terakhir dalam jalur pembelajaran yang mengajarkan cara memodularisasi dan membuat container aplikasi monolitik.
Jalur pembelajaran terdiri dari tutorial berikut:
- Ringkasan
- Memahami monolith
- Modularisasi monolit
- Menyiapkan aplikasi modular untuk di-build dalam container
- Memasukkan aplikasi modular ke dalam container
- Men-deploy aplikasi ke cluster GKE (tutorial ini)
Dalam tutorial sebelumnya, Mengontainerkan aplikasi modular, Anda menyiapkan aplikasi Cymbal Books modular untuk deployment. Anda telah membuat modul aplikasi dalam container, menguji container yang dihasilkan, dan mengirim image container ke Artifact Registry.
Dalam tutorial ini, Anda akan men-deploy aplikasi dalam container ke cluster Google Kubernetes Engine. Langkah ini menyelesaikan transformasi aplikasi Cymbal Books menjadi sistem modular dan skalabel yang berjalan di cluster Kubernetes.
Biaya
Mengikuti langkah-langkah dalam tutorial ini akan menimbulkan biaya pada akun Google Cloud Anda. Biaya dimulai saat Anda mengaktifkan GKE dan men-deploy aplikasi contoh Cymbal Books. Biaya ini mencakup biaya per cluster untuk GKE, seperti yang diuraikan di halaman Harga, dan biaya untuk menjalankan VM Compute Engine.
Untuk menghindari biaya yang tidak perlu, pastikan Anda menonaktifkan GKE atau menghapus project setelah menyelesaikan tutorial ini.
Sebelum memulai
Sebelum memulai tutorial ini, pastikan Anda telah menyelesaikan tutorial sebelumnya dalam seri ini. Untuk mengetahui ringkasan seluruh seri, dan link ke tutorial tertentu, lihat Jalur Pembelajaran: Mengubah aplikasi monolitik menjadi aplikasi GKE - Ringkasan.
Secara khusus, Anda harus telah melakukan langkah-langkah dalam tutorial sebelumnya, yaitu Mengontainerkan aplikasi modular.
Menyiapkan cluster GKE
Sebelum dapat men-deploy aplikasi Cymbal Books modular, Anda harus membuat cluster GKE terlebih dahulu. Cluster ini menyediakan infrastruktur tempat container aplikasi Anda akan berjalan.
Dalam tutorial ini, Anda menggunakan gcloud CLI untuk membuat cluster. Atau, Anda dapat menggunakan konsolGoogle Cloud , yang menyediakan antarmuka pengguna grafis (GUI) untuk membuat dan mengelola Google Cloud resource seperti cluster GKE.
Membuat dan memverifikasi cluster GKE
Cluster GKE menyediakan resource komputasi yang diperlukan untuk menjalankan container Anda di Kubernetes. Ikuti langkah-langkah berikut untuk membuat cluster menggunakan gcloud CLI.
Buka Google Cloud console.
Di konsol, klik tombol Activate Cloud Shell:
Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah di konsol.
Tetapkan project default Anda di Google Cloud CLI:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan project ID project yang Anda buat atau pilih di bagian pilih atau buat project Google Cloud pada tutorial sebelumnya. Project ID adalah string unik yang membedakan project Anda dari semua project lain di Google Cloud. Untuk menemukan project ID, buka pemilih project. Di halaman tersebut, Anda dapat melihat project ID untuk setiap project Google Cloud Anda.Buat cluster GKE:
gcloud container clusters create CLUSTER_NAME \ --zone=ZONE \ --num-nodes=2
Ganti kode berikut:
CLUSTER_NAME
: nama untuk cluster Anda, seperticymbal-cluster
.ZONE
: zona tempat Anda ingin membuat cluster, sepertius-central1-a
ataueurope-west1-b
. Untuk mengetahui daftar lengkap zona yang tersedia, lihat Region dan zona.
Ambil kredensial cluster agar CLI
kubectl
dapat terhubung ke cluster:gcloud container clusters get-credentials CLUSTER_NAME \ --zone=ZONE
Perintah ini mengupdate file konfigurasi Kubernetes Anda, yang disimpan secara default di
~/.kube/config
. File konfigurasi ini berisi kredensial yang diperlukankubectl
untuk berinteraksi dengan cluster GKE Anda.Pastikan
kubectl
terhubung ke cluster dengan mencantumkan node cluster:kubectl get nodes
Jika penyiapan berhasil, perintah ini akan mencantumkan node di cluster GKE Anda. Karena Anda membuat cluster dengan
--num-nodes=2
, Anda akan melihat informasi tentang dua node, mirip dengan berikut:NAME STATUS ROLES AGE VERSION gke-nov18-default-pool-6a8f9caf-bryg Ready <none> 30s v1.30.8-gke.1128000 gke-nov18-default-pool-6a8f9caf-ut0i Ready <none> 30s v1.30.8-gke.1128000
Dalam contoh ini, kedua node berada dalam status
Ready
. Status ini berarti cluster GKE siap menghosting workload yang di-containerisasi.
Deploy aplikasi
Setelah membuat cluster GKE, Anda dapat men-deploy aplikasi Cymbal Books ke cluster tersebut. Untuk men-deploy aplikasi ke cluster, Anda menerapkan manifes Kubernetes ke cluster.
Terapkan manifes Kubernetes
Di Cloud Shell, deploy aplikasi ke cluster GKE dengan menjalankan perintah berikut:
Buka direktori root aplikasi dalam container:
cd kubernetes-engine-samples/quickstarts/monolith-to-microservices/containerized/
Terapkan manifes Kubernetes:
kubectl apply -f kubernetes_manifest.yaml
Perintah sebelumnya menginstruksikan Kubernetes untuk membuat resource yang ditentukan dalam
file kubernetes-manifest.yaml
. Resource ini mencakup Layanan, Deployment, dan Pod.
Anda pertama kali menemukan Layanan di bagian
Ubah kode modular dalam tutorial
Siapkan aplikasi modular untuk penampungan.
Dalam tutorial tersebut, Anda memperbarui kode aplikasi untuk menggunakan Nama layanan, bukan
localhost
. Pembaruan tersebut memungkinkan Kubernetes merutekan permintaan antar-modul dan memastikan bahwa modul dapat berkomunikasi satu sama lain dalam cluster.
Sekarang, saat Anda menerapkan manifes, Kubernetes akan membuat Layanan di dalam cluster.
Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster. Bagian berikutnya menjelaskan apa itu Pod.
Apa yang dimaksud dengan Pod Kubernetes?
Dalam tutorial sebelumnya, Anda membuat image container untuk setiap modul aplikasi Cymbal Books. Misalnya, Anda membuat image container berdasarkan modul home_app
dan book_details_app
.
Saat Anda menggunakan perintah kubectl apply
untuk men-deploy manifes Kubernetes, Kubernetes akan menarik image container Anda dari Artifact Registry ke dalam cluster. Di cluster, image container menjadi container, dan container berjalan di dalam Pod.
Pod adalah lingkungan terisolasi tempat container berjalan, dan melakukan tugas-tugas berikut:
- Mengalokasikan CPU dan memori: Pod menyediakan resource yang dibutuhkan container untuk beroperasi.
- Menyediakan jaringan: setiap Pod memiliki alamat IP-nya sendiri. Hal ini memungkinkan Pod berkomunikasi dengan Pod lain.
Pod berjalan di node, yang merupakan mesin yang menyediakan daya komputasi untuk cluster. Kubernetes secara otomatis menetapkan Pod ke node dan mendistribusikan Pod di seluruh node cluster untuk mengurangi risiko kelebihan beban pada satu node. Distribusi ini membantu cluster menggunakan resource komputasi dan memori secara efisien.
Memverifikasi Deployment
Setelah Anda menerapkan manifes Kubernetes dengan perintah kubectl apply
, verifikasi
bahwa aplikasi berhasil di-deploy ke cluster. Untuk memverifikasi
Deployment, periksa apakah Pod dan Layanan berjalan dengan benar.
Periksa Pod
Untuk melihat Pod di cluster Anda, jalankan perintah berikut:
kubectl get pods
Perintah ini mencantumkan Pod dan statusnya saat ini. Cari kolom STATUS untuk mengonfirmasi bahwa semua Pod ditandai sebagai Running
, yang menunjukkan bahwa Pod tersebut berhasil berjalan dan siap melayani permintaan. Output yang diharapkan akan terlihat seperti berikut:
NAME READY STATUS RESTARTS AGE
home-app-67d59c6b6d-abcde 1/1 Running 0 30s
book-details-app-6d8bcbc58f-xyz 1/1 Running 0 30s
book-reviews-app-75db4c4d7f-def 1/1 Running 0 30s
images-app-7f8c75c79c-ghi 1/1 Running 0 30s
Status Pod awalnya muncul sebagai Pending
saat dibuat dan
container-nya sedang dalam proses dimulai. Jika Pod tetap Pending
selama
jangka waktu yang lama, cluster mungkin tidak memiliki cukup resource agar Pod tersebut
dapat memasuki status Running
yang sehat. Jika Pod memiliki status CrashLoopBackOff
,
mungkin ada masalah dengan container. Langkah-langkah pemecahan masalah akan diberikan
di bagian selanjutnya dalam tutorial ini.
Periksa Layanan
Layanan memungkinkan komunikasi antar-Pod dan memungkinkan klien eksternal (misalnya, pengguna, skrip otomatis, atau alat pemantauan) mengakses aplikasi. Untuk melihat Layanan di cluster Anda, jalankan perintah berikut:
kubectl get services
Output dari perintah ini akan terlihat seperti berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
home-app-service LoadBalancer 10.12.3.4 35.185.1.2 80:30837/TCP 30s
details-service ClusterIP 10.12.3.5 <none> 80/TCP 30s
reviews-service ClusterIP 10.12.3.6 <none> 80/TCP 30s
images-service LoadBalancer 10.12.3.7 34.125.6.3 80:32014/TCP 30s
Kolom utama yang perlu diamati dalam output adalah sebagai berikut:
TYPE
: kolom ini menunjukkan cara Layanan diekspos. Layanan jenisLoadBalancer
menyediakan akses eksternal ke aplikasi.EXTERNAL-IP
: untuk Layanan berjenisLoadBalancer
, kolomEXTERNAL-IP
menampilkan alamat IP publik yang dapat dimasukkan pengguna ke browser web mereka untuk mengakses aplikasi. Untuk Layanan berjenisClusterIP
, kolom ini kosong karena LayananClusterIP
hanya dapat diakses dalam cluster.
Melakukan pengujian deployment
Setelah men-deploy aplikasi Cymbal Books ke cluster GKE, verifikasi bahwa aplikasi dapat diakses dan bahwa container dapat berkomunikasi satu sama lain.
Mengakses aplikasi
Pastikan aplikasi dapat diakses dengan mengikuti langkah-langkah berikut:
Ambil alamat IP eksternal untuk
home-app-service
:kubectl get services
Cari kolom
**EXTERNAL-IP**
di output, dan catat alamat IP yang terkait denganhome-app-service
.Buka browser web dan masukkan URL berikut:
http://EXTERNAL-IP
Ganti
EXTERNAL-IP
dengan alamat IP yang Anda temukan di langkah sebelumnya.Pastikan halaman beranda aplikasi Cymbal Books dimuat dengan benar.
Memverifikasi komunikasi antarlayanan
Kontainer di aplikasi Cymbal Books mengandalkan Layanan untuk bertukar informasi. Pastikan bahwa penampung dapat berkomunikasi secara efektif dengan mengikuti langkah-langkah berikut:
Ambil alamat IP eksternal untuk
home-app-service
seperti yang dijelaskan sebelumnya.Gunakan antarmuka aplikasi untuk menguji interaksi antar-penampung. Untuk melakukannya, pastikan fitur berikut berfungsi dengan mengklik semua link yang tersedia di antarmuka aplikasi:
- Periksa gambar sampul buku: pastikan gambar sampul buku dimuat dengan benar di halaman beranda dan halaman detail buku. Jika ya,
container
home_app
danbook_details_app
berhasil berkomunikasi dengan containerimages_app
. - Melihat detail buku: membuka halaman detail buku dari halaman beranda. Jika Anda melihat detail buku, penampung
home_app
berkomunikasi dengan benar denganbook_details_app
. - Melihat ulasan buku: klik link ulasan buku untuk memverifikasi bahwa penampung
home_app
dapat berkomunikasi dengan penampungbook_reviews_app
.
- Periksa gambar sampul buku: pastikan gambar sampul buku dimuat dengan benar di halaman beranda dan halaman detail buku. Jika ya,
container
Aplikasi Anda kini berjalan di cluster GKE.
Selamat! Anda telah melihat cara mengubah aplikasi monolitik menjadi sistem modular berbasis container yang berjalan di cluster GKE aktif. Selama prosesnya, Anda telah mempelajari cara membagi kode yang terhubung erat menjadi modul independen, membangun dan mengirim image container ke repositori, menentukan manifes Kubernetes, dan men-deploy aplikasi dari registry ke GKE. Ini adalah pencapaian besar, dan mencerminkan langkah-langkah nyata yang dilakukan tim untuk memodernisasi aplikasi untuk cloud.
Pemecahan masalah
Jika aplikasi tidak merespons atau penampung gagal berkomunikasi, gunakan langkah-langkah pemecahan masalah berikut untuk mendiagnosis dan menyelesaikan masalah umum.
Memeriksa status Pod
Mulai dengan mencantumkan semua Pod di cluster Anda untuk menentukan apakah Pod berjalan seperti yang diharapkan:
kubectl get pods
Tinjau output untuk mengonfirmasi bahwa setiap Pod dalam status Running
. Jika ada Pod yang tidak berjalan, catat namanya untuk pemeriksaan lebih lanjut.
Memeriksa log Pod
Jika Pod tidak menangani permintaan dengan benar, periksa lognya untuk mencari pesan error:
kubectl logs POD_NAME
Ganti POD_NAME
dengan nama Pod yang ingin
Anda periksa. Perintah ini berguna untuk mengidentifikasi masalah startup atau error runtime.
Mendeskripsikan Pod untuk mendapatkan informasi mendetail
Jika Pod tetap dalam status non-Running
selama lebih dari lima menit—misalnya, Pod dalam status Pending
, ContainerCreating
, atau CrashLoopBackOff
—Anda dapat melihat informasi mendetail tentang status dan peristiwa Pod menggunakan perintah berikut:
kubectl describe pod POD_NAME
Ganti POD_NAME
dengan nama Pod yang ingin Anda
ketahui informasi detailnya.
Bagian Events
dalam output mungkin menunjukkan bahwa batasan resource atau masalah dengan penarikan image mencegah Pod dimulai dengan benar.
Verifikasi konfigurasi Layanan
Pastikan Layanan Anda disiapkan dengan benar, terutama Layanan yang mengekspos modul rumah dengan alamat IP eksternal. Cantumkan Layanan dengan perintah berikut:
kubectl get services
Jika Anda melihat bahwa modul Service for the home memiliki alamat EXTERNAL-IP
yang tercantum sebagai Pending
, jalankan perintah berikut:
kubectl describe service SERVICE_NAME
Ganti SERVICE_NAME
dengan nama Service modul smart home.
Perintah ini memberikan detail selengkapnya tentang konfigurasi Layanan dan membantu Anda mengidentifikasi keterlambatan dalam menetapkan alamat IP eksternal atau masalah konfigurasi lainnya.
Memeriksa peristiwa cluster
Anda dapat memeriksa peristiwa cluster untuk menentukan apakah masalah memengaruhi beberapa komponen cluster Anda:
kubectl get events
Perintah ini dapat menentukan apakah masalah jaringan atau resource yang lebih luas memengaruhi deployment Anda.
Membersihkan resource
Menjalankan cluster GKE akan menimbulkan biaya. Setelah menyelesaikan tutorial ini, hapus resource Anda untuk menghindari biaya tambahan. Ikuti langkah-langkah berikut untuk menghapus cluster dan, secara opsional, seluruh project.
Menghapus cluster GKE
Untuk menghapus cluster GKE, gunakan perintah berikut:
gcloud container clusters delete CLUSTER_NAME
--zone=ZONE
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang Anda buat, seperticymbal-cluster
.ZONE
: zona tempat cluster dibuat, sepertius-central1-a
.
Saat diminta, konfirmasi penghapusan.
Pastikan cluster telah dihapus
Untuk memastikan bahwa cluster telah dihapus, jalankan perintah berikut:
gcloud container clusters list
Cluster tidak akan muncul lagi di output. Jika ya, tunggu beberapa saat dan coba lagi.
(Opsional) Menghapus Google Cloud project
Jika Anda membuat Google Cloud project khusus untuk tutorial ini dan tidak memerlukannya lagi, Anda dapat menghapus seluruh Google Cloud project. Menghapus project akan menghapus semua resource dan menghentikan penagihan untuk project tersebut:
- Di Google Cloud console, buka halaman Manage Resources.
- Pilih project yang ingin Anda hapus.
- Klik Hapus Project dan ikuti perintah untuk mengonfirmasi.
Ringkasan seri
Selamat! Dengan menyelesaikan jalur pembelajaran ini, Anda telah mempelajari dasar-dasar mengonversi aplikasi monolitik menjadi aplikasi modular dalam container yang berjalan di cluster Kubernetes. Langkah-langkah berikut merangkum prosesnya:
-
- Mempelajari struktur aplikasi monolitik Cymbal Books.
- Menyiapkan lingkungan Python lokal untuk menjalankan monolith dan menguji endpoint-nya.
- Memperoleh pemahaman tentang codebase aplikasi untuk mempersiapkannya modularisasi.
-
- Mempelajari cara membagi kode monolitik menjadi modul terpisah. Setiap modul menangani fitur yang berbeda, seperti menampilkan detail atau ulasan buku.
- Melihat cara modul ini diimplementasikan sebagai aplikasi Flask independen yang berjalan di port yang berbeda.
- Menguji aplikasi yang dimodularisasi.
Menyiapkan kode modular untuk containerisasi
- Mempelajari bahwa Anda harus memperbarui URL di
home.py
untuk menggunakan nama Layanan, bukanlocalhost
. - Mempelajari cara manifes Kubernetes menentukan Layanan yang memungkinkan modul aplikasi, yang sudah saling berkomunikasi, untuk saling menemukan dalam konteks cluster Kubernetes.
- Mempelajari bahwa Anda harus memperbarui URL di
Memasukkan aplikasi modular ke dalam container
- Menyiapkan project Google Cloud dan meng-clone aplikasi dari GitHub ke Cloud Shell.
- Membangun image container untuk setiap modul menggunakan Docker dan menguji container secara lokal.
- Mengirim image container ke Artifact Registry untuk menyiapkan aplikasi agar di-deploy ke cluster.
- Memperbarui manifes Kubernetes untuk merujuk ke jalur image container di Artifact Registry.
Deploy aplikasi ke cluster GKE (tutorial yang sedang Anda ikuti):
- Membuat cluster GKE.
- Men-deploy image container dari Artifact Registry ke cluster GKE.
- Menguji versi final aplikasi, yang kini dapat diskalakan dan berjalan di lingkungan Kubernetes.
Langkah berikutnya
Untuk pelatihan praktis lebih lanjut tentang cara membuat cluster, lihat seri kami, Jalur Pembelajaran: Aplikasi yang dapat diskalakan.