Ini adalah tutorial ketiga dalam jalur pembelajaran yang mengajarkan cara memodulasi dan membuat container aplikasi monolitik.
Jalur pembelajaran ini terdiri dari tutorial berikut:
- Ringkasan
- Memahami monolit
- Memodulasi monolit
- Menyiapkan aplikasi modular untuk pembuatan container (tutorial ini)
- Membuat container aplikasi modular
- Men-deploy aplikasi ke cluster GKE
Dalam tutorial sebelumnya, Memodulasi monolit, Anda telah melihat cara membagi aplikasi Cymbal Books menjadi modul Flask independen. Dalam tutorial ini, Anda akan mempelajari satu perubahan yang perlu dilakukan pada aplikasi modular untuk mempersiapkannya dalam pembuatan container.
Biaya
Anda dapat menyelesaikan tutorial ini tanpa dikenai biaya. Namun, mengikuti langkah-langkah dalam tutorial terakhir dari rangkaian ini akan dikenai biaya pada Google Cloud akun Anda. Biaya akan dikenakan saat Anda mengaktifkan GKE dan men-deploy aplikasi Cymbal Books ke cluster GKE. 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 rangkaian ini. Untuk mengetahui ringkasan seluruh rangkaian, dan link ke tutorial tertentu, lihat Jalur Pembelajaran: Mengubah monolit menjadi aplikasi GKE - Ringkasan.
Jika telah menyelesaikan tutorial pertama, Anda telah meng-clone repositori GitHub. Ketiga versi aplikasi Cymbal Books berada di repositori tersebut, di dalam folder berikut:
monolith/modular/containerized/
Periksa apakah folder ini ada di komputer Anda sebelum melanjutkan.
Mengubah kode modular
Dalam tutorial sebelumnya, Anda telah mempelajari bahwa modul halaman beranda berkomunikasi dengan modul lainnya. Modul ini mengirimkan permintaan ke endpoint modul lain untuk mengambil detail buku, ulasan, dan gambar, lalu menampilkan data ini di halaman HTML.
Di folder modular/, endpoint dikodekan secara permanen di home.py, menggunakan localhost, seperti ini:
BOOK_SERVICE_URL = "http://localhost:8081" # Book details module listens on port 8081
REVIEW_SERVICE_URL = "http://localhost:8082" # Book reviews module listens on port 8082
IMAGE_SERVICE_URL = "http://localhost:8083" # Image module listens on port 8083
URL ini berfungsi saat semua modul berjalan di mesin yang sama. Namun, di lingkungan Kubernetes, modul dapat dipindahkan ke mesin lain untuk menangani kegagalan atau menyeimbangkan beban, yang berarti alamat IP-nya dapat berubah.
Untuk memastikan modul halaman beranda masih dapat menjangkau modul lain, URL harus menggunakan nama Layanan Kubernetes, bukan localhost. Nama Layanan bertindak seperti alias yang digunakan Kubernetes untuk merutekan permintaan ke modul yang benar—di mana pun modul tersebut berjalan. Misalnya, saat modul halaman beranda mengirimkan permintaan ke http://book-details-service/book/1, Kubernetes akan membantu memastikan permintaan tersebut mencapai modul detail buku.
Anda tidak perlu memperbarui URL ini sendiri. Versi aplikasi di folder containerized/ sudah menyertakan perubahan ini: URL localhost yang dikodekan secara permanen telah diganti dengan nama Layanan Kubernetes. Anda dapat melihat versi yang diperbarui di containerized/home_app/home_app.py:
BOOK_SERVICE_URL = "http://book-details-service"
REVIEW_SERVICE_URL = "http://book-reviews-service"
IMAGE_SERVICE_URL = "http://images-service"
Pembaruan ini membantu memastikan aplikasi akan berfungsi dengan benar saat berjalan di lingkungan Kubernetes.
Manifes Kubernetes
Di bagian sebelumnya, Anda telah melihat cara endpoint modul diperbarui untuk menggunakan nama Layanan Kubernetes. Anda menentukan nama Layanan di manifes Kubernetes.
Manifes Kubernetes adalah file konfigurasi yang menentukan jenis cluster Kubernetes yang ingin Anda buat untuk menghosting aplikasi modular. Manifes ditulis dalam YAML atau JSON. Di dalamnya, Anda menentukan hal-hal seperti Layanan (untuk perutean antar-modul), jumlah replika (instance) setiap modul, dan jumlah CPU serta memori yang diizinkan untuk digunakan setiap modul.
Seluruh rangkaian tutorial dapat ditulis tentang
manifes Kubernetes.
Manifes ini kompleks karena menentukan segala hal tentang cluster Kubernetes Anda—struktur, perilaku, dan kemampuannya. Dalam tutorial ini, Anda hanya melihat bagaimana nama Layanan dalam manifes cocok dengan nama yang digunakan di endpoint modul. Dalam tutorial berikutnya, Anda akan menjalankan perintah kubectl apply untuk membuat cluster GKE sesuai dengan konfigurasi yang ditentukan dalam manifes, tetapi dalam tutorial ini, Anda hanya meninjau manifes.
Melihat manifes
Di bagian ini, Anda akan memeriksa cara Layanan ditentukan dalam manifes Kubernetes yang telah ditulis untuk Anda. File manifes, yang merupakan file YAML, berada di
folder containerized/ repositori GitHub yang Anda clone di tutorial pertama
dalam rangkaian ini. Ikuti langkah-langkah berikut untuk melihat definisi Layanan:
Di terminal, buka direktori containerized di repositori yang di-clone:
cd containerizedDi editor teks, buka file manifes Kubernetes:
cat kubernetes_manifest.yamlTemukan definisi Layanan untuk modul
book-details. Definisi ini terlihat seperti contoh berikut:apiVersion: v1 kind: Service metadata: name: book-details-service spec: selector: app: book-details-app ports: - protocol: TCP port: 80 # External traffic on port 80 targetPort: 8080 # Targeting container port 8080 type: ClusterIP
Nama Layanan book-details-service dalam manifes cocok dengan nama yang digunakan di endpoint modul: http://book-details-service. Saat aplikasi Anda berjalan di Kubernetes, Kubernetes menggunakan nama Layanan ini untuk merutekan permintaan ke modul yang benar.
Manifes Kubernetes menentukan fitur cluster Kubernetes Anda, termasuk Layanan yang menangani perutean permintaan. Setiap modul di aplikasi Anda memiliki Layanan yang sesuai yang ditentukan dalam manifes. Dengan memperbarui URL dalam kode modular agar cocok dengan nama Layanan ini, Anda memastikan bahwa Kubernetes dapat merutekan permintaan ke modul yang benar saat aplikasi berjalan di cluster.
Ringkasan
Dalam tutorial ini, Anda telah melihat cara URL dalam kode modular diperbarui untuk menggunakan nama Layanan Kubernetes, seperti http://book-details-service. Nama Layanan ini memungkinkan Kubernetes merutekan permintaan antar-modul meskipun lokasinya di cluster berubah. Anda juga telah memeriksa manifes Kubernetes dan melihat bagaimana nama Layanan dalam kode modular cocok dengan nama yang ditentukan dalam manifes.
Langkah berikutnya
Dalam tutorial berikutnya, Membuat container aplikasi modular, Anda akan mempelajari cara membuat container modul dengan mengemasnya ke dalam sesuatu yang disebut image container. Kemudian, Anda akan melihat cara menjalankan image container sebagai container, menguji fiturnya, dan mengirim image container ke Artifact Registry Google.