Aplikasi multi-tingkat adalah aplikasi yang didistribusikan di antara lebih dari satu lapisan. Ini secara logis memisahkan lapisan operasional. Jumlah lapisan bervariasi dengan kebutuhan bisnis dan aplikasi. Pada artikel ini, kita akan melihat sebuah aplikasi dibagi menjadi 2 layer, backend dan frontend layer. Kami akan menggunakan MongoDB sebagai backend untuk menyimpan data dan Python Flask sebagai Webserver frontend. Kami akan menerapkan kedua aplikasi ini menggunakan penerapan di Kubernetes dan memiliki layanan untuk meneruskan permintaan kepada mereka.
Prasyarat
- Cluster Kubernetes dengan setidaknya 1 node pekerja.
Jika Anda ingin belajar membuat Cluster Kubernetes, klik di sini. Panduan ini akan membantu Anda membuat cluster Kubernetes dengan 1 Master dan 2 Node di Instans AWS Ubuntu 18.04 EC2. - Pemahaman dasar tentang Penerapan dan Layanan.
Lihat Penerapan dan Layanan untuk mendapatkan pemahaman dasar.
Apa yang akan kita lakukan?
- Menerapkan Aplikasi Multi-Tingkat
Menerapkan Aplikasi Multi-Tingkat
Buat file baru bernama "test-db-deployment.yaml" dengan konten berikut. Ini akan menentukan penerapan MongoDB yang akan bertindak sebagai database, lapisan backend.
vim test-db-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: test-db spec: selector: matchLabels: appdb: testdb replicas: 1 template: metadata: labels: appdb: testdb spec: containers: - name: test-db image: mongo:3.3 env: - name: MONGODB_DATABASE value: testdata ports: - containerPort: 27017
Sekarang, buat layanan yang akan melayani permintaan ke MongoDB dari aplikasi frontend kita. Layanan ini akan mendengarkan pada Port 27017 dan meneruskan permintaan ke MongoDB pada port yang sama.
vim test-db-service.yaml
apiVersion: v1 kind: Service metadata: name: mongodb labels: app: testdb spec: ports: - port: 27017 protocol: TCP selector: appdb: testdb
Langkah selanjutnya adalah mendefinisikan aplikasi frontend. Buat file baru yang berisi definisi penerapan berikut.
Ini akan mendengarkan di Port 5000.
Permintaan ke MongoDB akan diteruskan ke MONGODB_HOST yaitu layanan mongodb.
vim test-web-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: test spec: selector: matchLabels: app: test replicas: 1 template: metadata: labels: app: test spec: containers: - name: test-app image: teamcloudyuga/rsvpapp env: - name: MONGODB_HOST value: mongodb ports: - containerPort: 5000 name: web-port
Untuk mengakses frontend, kita akan membuat layanan dengan tipe NodePort listening pada Port 31081. Artinya, Python Flask Webserver dapat diakses di IP=IP-Of-Any-Node dan Port=31081. Buat yang baru dengan definisi layanan berikut.
vim test-web-service.yaml
apiVersion: v1 kind: Service metadata: name: test labels: apps: test spec: type: NodePort ports: - name: tcp-31081-5000 nodePort: 31081 port: 5000 protocol: TCP selector: app: test
Sekarang, kita siap untuk membuat aplikasi sampel 2 tingkat. Sebelum melanjutkan, mari kita periksa apakah cluster memiliki objek.
Jalankan perintah berikut untuk memeriksa pod, penerapan, dan layanan yang berjalan di cluster.
kubectl dapatkan pod
kubectl dapatkan penerapan
kubectl dapatkan layanan
Pada screenshot di atas, terlihat bahwa hanya ada 1 layanan default kubernetes di dalam cluster.
Sekarang, jalankan perintah berikut satu per satu dari direktori tempat Anda membuat 4 file untuk membuat penerapan MongoDB, layanan MongoDB, penerapan Server Web Python Flask, dan layanan Server Web Python Flask.
kubectl create -f test-db-deployment.yaml
kubectl create -f test-db-service.yaml
kubectl create -f test-web-deployment.yaml
kubectl create -f test-web-service.yaml
Pada tangkapan layar di atas, Anda dapat melihat bahwa penerapan MongoDB, layanan MongoDB, penerapan Server Web Python Flask, dan layanan server Web Python Flask telah berhasil dibuat.
Untuk memverifikasi hal yang sama, jalankan perintah berikut.
kubectl dapatkan pod
kubectl dapatkan penerapan
kubectl dapatkan layanan
Pada tangkapan layar berikut, Anda dapat melihat bahwa 2 pod dan 2 layanan telah dibuat. Pod yang telah dibuat dikendalikan oleh penerapan yang kita buat.
Sekarang, kita siap untuk mengakses aplikasi di IP-of-any-Node:NodePort yaitu IP-of-any-Node:31081.
Setelah Anda menekan URL di browser, Anda akan melihat aplikasi sebagai berikut. Ini adalah contoh aplikasi yang menggunakan gambar buruh pelabuhan yang tersedia untuk umum dan milik CloudYuga. Di sini Anda dapat melihat bahwa jumlah RSVP adalah 0, ini berarti MongoDB tidak memiliki data apa pun di dalamnya.
Sekarang, kita dapat menambahkan beberapa entri demo.
Setelah menambahkan beberapa entri, kita dapat melihat bahwa jumlah telah berubah. Ini berarti data telah disimpan di MongoDB.
Sekarang, ketika Anda tidak lagi membutuhkan aplikasi ini, Anda dapat menghapus semua objek dengan menjalankan perintah berikut dari direktori tempat Anda memiliki semua file objek Kubernetes.
kubectl delete -f .
Perintah di atas akan menghapus penerapan MongoDB, layanan MongoDB, penerapan Server Web Python Flask, dan layanan Server Web Python Flask yang kita buat.
Untuk memeriksa apakah semua objek yang kita buat telah berhasil dihapus, jalankan perintah berikut.
kubectl dapatkan semua
Pada tangkapan layar berikut, Anda dapat melihat bahwa hanya ada satu layanan kubernetes default dan objek yang telah kita buat tidak ada lagi.
Kesimpulan
Dalam artikel ini, kami membuat penerapan database dan layanan backend MongoDB untuk mengakses database dan untuk frontend, kami membuat penerapan dan layanan aplikasi berbasis Python Flask untuk mengakses ini paling depan. Kami juga melihat data disimpan di database backend. Ini adalah contoh aplikasi tingkat 2 yang menggunakan gambar buruh pelabuhan yang tersedia untuk umum.