..

Panduan Penggunaan Kubernetes untuk Microservices

  • CBNCloud
  • 11/21/2023, 12:00:00 AM

Kubernetes adalah salah satu platform orkestrasi container open-source yang sedang naik daun. Platform ini membantu mengotomatisasi deployment, skalabilitas, dan manajemen aplikasi pada proses containerization. Dipercaya ideal untuk mengelola microservices, Kubernetes menyederhanakan proses deployment dalam pengoperasian distributed application berskala masif.

Berkat fiturnya yang canggih dan komunitasnya yang aktif, beberapa tahun terakhir ini Kubernetes menjadi pilihan utama sejumlah besar organisasi dalam membangun dan men-deploy microservices mereka. Mengabungkan kekuatan Kubernetes dan microservices dapat menjadi cara jitu dalam mencapai efisiensi dan skalabilitas maksimum.

Dalam panduan ini, mari kita bahas dasar-dasar penggunaan Kubernetes untuk membangun dan men-deploy microservices. Kita akan membahas cara menyiapkan cluster Kubernetes, membuat dan men-deploy microservices. Selain itu, cara menyesuaikan skala dan menyeimbangkan beban (load balancing) microservices juga akan kita singgung, termasuk cara memantau dan melakukan logging pada microservices. Terakhir, kita akan melihat beberapa praktik terbaik dalam men-deploy microservices di Kubernetes agar Anda dapat memaksimalkan konfigurasi.

Mari kita simak bersama penjelasannya!

Daftar Isi:

  1. Apa Itu Container dan Microservices?
  2. Manfaat Menggunakan Kubernetes untuk Microservices
  3. Menyiapkan Cluster Kubernetes
  4. Membuat dan Men-deploy Microservices
  5. Melakukan Scalling dan Load Balancing Microservices Kubernetes
  6. Metodologi Aplikasi 12-Factor
  7. Tertarik Menggunakan Kubernetes untuk Containerization Microservices Anda?

Apa Itu Container dan Microservices?

Sebelumnya, mari kita refresh sejenak ingatan kita tentang container dan microservices.

Container adalah paket eksekusi yang ringan, mandiri dan mencakup semua yang dibutuhkan oleh sebuah aplikasi untuk berjalan, termasuk kode, runtime, system tools, library, dan settings. Teknologi ini memungkinkan penggunanya untuk dengan mudah men-deploy dan menyesuaikan skala aplikasi. Selain itu, container menyediakan lingkungan yang konsisten dan terisolasi bagi aplikasi untuk berjalan, tanpa tergantung pada infrastruktur yang mendasarinya.

Kami sudah pernah membahas container dan containerization dengan cukup komperhensif di artikel berikut.

Sementara itu, microservices merupakan gaya arsitektur yang merevolusi pengembangan software, di mana pengguna dimudahkan untuk memecah masalah rumit menjadi bagian lebih kecil yang lebih mudah dikelola. Metode ini terdiri dari beberapa layanan mandiri yang berkomunikasi melalui API, menciptakan orkestrasi aplikasi yang amat efisien.

Kami juga sempat membandingkan fundamental container, virtualisasi dan microservices sebagai masa depan infrastruktur TI di artikel ini.

Secara praktis, microservices kerap di-deploy dalam container. Mengapa? Karena container memberikan isolasi dan konsistensi yang diperlukan agar microservices dapat berjalan secara mandiri dan saling berkomunikasi. Akan tetapi, containerization bukanlah satu-satunya cara untuk mengimplementasikan microservices, sebab kita juga bisa men-deploy microservices pada mesin virtual (VM) atau server bare metal.

Singkat kata, container adalah cara untuk mengemas dan mendistribusikan software. Sedangkan microservices merupakan pola arsitektur untuk membangun aplikasi software. Jika Anda ingin menggunakan container untuk men-deploy microservices, Kubernetes mungkin bisa jadi pilihan utama. Alasannya akan kita coba bedah sama-sama di artikel ini.

Manfaat Menggunakan Kubernetes untuk Microservices

Kubernetes kerap jadi pilihan pertama untuk memfasilitasi dan mengatur microservices, karena lebih lancar dalam men-deploy dan mengelola aplikasi containerization. Di bawah ini kami merangkum sejumlah manfaat menggunakan Kubernetes untuk microservices:

  • Scalability. Kubernetes memudahkan peningkatan dan pengurangan skala layanan sesuai kebutuhan. Keperluan untuk skalabilitas manual bisa dihilangkan. Perubahan permintaan juga dapat ditanggapi dengan cepat.
  • High Availability. Kubernetes menawarkan fitur bawaan high availability, di mana layanan dijamin tetap tersedia bahkan saat terjadi bencana atau gangguan jaringan.
  • Dynamic Resource Allocation. Kuberneses dapat mengalokasikan sumber daya secara dinamis berdasarkan permintaan. Sumber daya jadi lebih efisien dan pengeluaran bisa ditekan.
  • Self-Healing. Kubernetes mampu mengenali dan menggantikan layanan yang gagal, membantu menjaga uptime dan reliability.

Dengan banyaknya manfaat yang ditawarkan Kubernetes, tidak heran jika semakin banyak pengembang memilih untuk mengawinkan microservices dengan platform ini. Lalu, bagaimanakah cara mengkolaborasikannya?

Menyiapkan Cluster Kubernetes

Sebelum men-deploy microservices, Anda perlu menyiapkan cluster Kubernetes. Cluster adalah sekelompok node yang menjalankan control plane Kubernetes dan container runtime.

Ada dua cara populer dalam menyiapkan cluster Kubernetes:

  • Menggunakan managed services seperti Google Kubernetes Engine (GKE) atau Amazon Elastic Container Service for Kubernetes (EKS);
  • Menginstal Kubernetes di infrastruktur Anda dengan membuat node (mesin virtual atau fisik) dan menghubungkannya ke master node.

Untuk mengelola cluster Kubernetes, Anda dapat menggunakan command line interface (CLI) Kubernetes, atau dikenal juga sebagai kubectl. Dengan tool ‘ajaib’ ini, Anda dimudahkan untuk men-deploy dan mengelola aplikasi di cluster, memeriksa statusnya, dan men-debug masalah yang mungkin muncul.

Jika ingin menggunakan kubectl, maka Anda perlu menginstalnya dulu di komputer. Instruksi untuk menginstalnya bisa Anda temukan di laman tutorial Kubernetes.  

Setelah menginstal kubectl, baru Anda dapat mengakses CLI dengan mengetikkan kubectl di terminal. Pastikan kubectl telah sukses diinstal dengan menjalankan perintah berikut:

kubectl version --short

Perintah tersebut akan mengembalikan versi Kubernetes CLI yang saat ini terpasang di server Anda.

Setelah instalasi selesai, ada beberapa perintah dasar yang sebaiknya Anda kenali. Untuk memastikan jenis cluster dan node saat ini, gunakan perintah berikut:

kubectl get nodes

Perintah tersebut akan menampilkan semua node dalam cluster beserta statusnya. Untuk melihat informasi yang lebih detail tentang suatu node, gunakan perintah berikut:

kubectl describe node

Perintah tersebut akan menyuguhkan informasi lebih detail, seperti IP address dan nama host dari node tersebut.

Kubectl juga bisa digunakan untuk men-deploy aplikasi di cluster Anda. Untuk melakukannya, Anda perlu membuat file konfigurasi bagi aplikasi Anda. File konfigurasi ini seharusnya mencakup detail seperti jumlah replika dan gambar yang akan digunakan untuk pod.

Membuat dan Men-deploy Microservices

Selanjutnya, Anda perlu membuat project di Node.js dengan menjalankan perintah berikut:

npm init -y

Anda juga perlu menginstal paket Express untuk membuat microservices yang sangat sederhana. Untuk melakukannya, jalankan perintah berikut.

npm install express --save

Berikut adalah contoh kode untuk microservices sederhana dalam Node.js:

// index.js

const express = require('express');

const app = express();

app.get('/', (req, res) => {

   res.send('Hello World!');

});

app.listen(3000, () => { console.log('Example app listening on port 3000!') });

Blok dasar dari implementasi Kubernetes adalah pod, yang merupakan kelompok dari satu atau lebih container yang berjalan di satu node. Untuk men-deploy microservices di atas, Anda membuat sebuah pod dan sebuah deployment dengan higher-level resource yang mengelola life cycle dari pod tersebut. Untuk membuat pod, Anda perlu membuat definisi pod dalam sebuah file yang disebut manifest pod. Manifest pod adalah file YAML yag menentukan gambar container, port, dan variabel lingkungan untuk pod. Berikut adalah contoh manifest pod untuk microservices di atas:

apiVersion: v1

kind: Pod

metadata:

  name: my-web-service

spec:

  containers:

     - name: my-web-service

       image: node:10-alpine

       ports:

         - containerPort: 8080

Saat memiliki sebuah running pod, Anda dapat membuat deployment untuk mengelola life cycle pod tersebut. Sebuah deployment memastikan bahwa jumlah replika yang diinginkan dari pod selalu berjalan sepanjang waktu, dan menyediakan fitur-fitur seperti rolling updates dan rollbacks.

Melakukan Scalling dan Load Balancing Microservices Kubernetes

Salah satu keuntungan menggunakan Kubernetes untuk microservices adalah kemampuanya untuk dengan mudah melakukan scalling dan load balancing pada layanan Anda. Gunakan perintah berikut untuk menambah atau mengurangi jumlah replika:

 kubectl scale deployment my-web-service --replicas= 

Service discovery adalah aspek penting dalam arsitektur microservices. Fitur ini memungkinkan layanan-layanan mikro untuk menemukan dan berkomunikasi satu sama lain. Kubernetes menyediakan service discovery bawaan melalui object layanannya, yang memungkinkan microservices untuk saling menemukan berdasarkan nama.

Metodologi Aplikasi 12-Factor

Metodologi Aplikasi 12-Factor (12-Factor App) adalah seperangkat panduan untuk merancang dan mengembangkan aplikasi dan layanan yang cloud friendly. Metodologi ini membantu memastikan bahwa layanan dibangun dengan cara yang ramah cloud, sehingga menghasilkan kinerja, skalabilitas, dan ketahanan yang lebih baik. Saat membangun microservices di Kubernetes, perlu untuk mengamalkan ke-12 prinsip tersebut.

Di bawah ini adalah rangkuman kami dari ke-12 faktor tersebut:

  1. Codebase. Senantiasa lacak microservices dalam control system, seperti Git, dan men-deploy-nya dari sana. Opsi ini memungkinkan untuk melakukan rollback perubahan jika diperlukan, dan menjaga riwayat kode.
  2. Dependencies. Pilih sebuah manifest, seperti file package.json atau POM. Gunanya untuk mendeklarasikan semua dependencies, misalya library dan frameworks, supaya Anda lebih mudah melakukan instalasi dan update.
  3. Config. Simpan konfigurasi di environment daripada di dalam kode. Dengan cara ini, Anda lebih mudah mengubahnya tanpa mengubah kode itu sendiri.
  4. Backing services. Setiap sumber daya yang digunakan microservices 12-faktor, seperti database atau antrean pesan, sebaiknya dianggap sebagai resource terlampir. Dengan begini, Anda dapat dengan mudah melepaskan dan menggantinya tanpa memengaruhi running code.
  5. Build, release, run. Sebaiknya bangun microservices menggunakan proses pembangunan yang dapat diulang dan otomatis, sehingga Anda bebas merilisnya setiap saat. Setelah dibangun, microservices di-deploy ke lingkungan eksekusi, seperti container, dan dijalankan di sana.
  6. Process. 12-Factor App dibagi menjadi sejumlah proses kecil, mandiri, yang dapat dengan mudah dimulai, dihentikan, dan diulang sesuai kebutuhan. Aplikasi jadi lebih mudah untuk diskalakan naik atau turun sesuai keperluan.
  7. Port binding. Rancang microservices supaya berjalan di port tertentu sehingga lebih mudah diakses. Dengan begini, beberapa instans aplikasi jadi lebih mudah dijalankan di server yang sama.
  8. Concurrency. Bangun microservices agar dapat berjalan secara bersamaan sehingga resource komputasi modern dapat dimaksimalkan. Sejumlah bagian berbeda dari aplikasi jadi bisa dijalankan secara bersamaan di core atau mesin yang berbeda.
  9. Disposability. Rancangan microservices sebaiknya memudahkan proses start dan stop. Kemudahan ini mendukung proses deploy versi baru, atau pada saat melakukan rollback perubahan yang diperlukan.
  10. Dev/prod parity. Dalam pengembangan, lingkungan microservices 12-faktor sama seperti di produksi. Kesamaan ini memungkinkan proses pendeteksian kesalahan lebih awal, dan menghindari kejutan saat melakukan deploy ke produksi.
  11. Logs. Microservices 12-faktor memperlakukan log sebagai event streams supaya lebih mudah dikumpulkan dan diproses untuk pemantauan dan analisis.
  12. Admin process. Microservices 12-faktor memiliki proses terpisah untuk menjalankan tugas administratif seperti migrasi database. Kondisi ini menjaga aplikasi agar tetap bersih dan berfokus pada fungsionalitas intinya.

Kubernetes mendukung metodologi 12-Factor App dengan memungkinkan penskalaan otomatis dan load balancing pada micoservices; menyediakan service discovery bawaan, dan menjamin manajemen konfigurasi yang lebih mudah. Selain itu, Kubernetes mendukung proses shutdown microservices yang kuat dan lancar. Kemudahan tersebut memungkinkan microservices diakses melalui port binding sehingga lebih mudah diakses oleh proses lain dan melakukan scalling melalui process model.

Tertarik Menggunakan Kubernetes untuk Containerization Microservices Anda?

Kami harap artikel ini dapat memudahkan Anda untuk memilih Kubernetes sebagai pendukung microservices Anda. Kami sendiri cukup sering merekomendasikan platform ini karena relatif powerful dalam men-deploy dan mengelola microservices. Dengan menggunakan Kubernetes, Anda dapat dengan mudah melakukan scalling dan load balancing pada microservices; menerapkan service discovery, dan memastikan microservices Anda mematuhi prinsip 12-Factor App.

Kubernetes juga menyediaka cara untuk mengelola aplikasi containerization tanpa bergantung pada platform. Keunggulan ini memudahkan deployment dan scalling dilakukan di berbagai lingkungan. Dengan panduan ini, mudah-mudahan Anda jadi lebih paham tentang struktur dan cara men-deploy microservices di Kubernetes, serta kegunaan masing-masing fiturnya dalam merancang arsitektur microservices yang mumpuni.

Akan tetapi, jika setelah berusaha mengikuti panduan di atas pun Anda masih merasa kesulitan, Anda senantiasa dapat menghubungi kami untuk berdiskusi. Kami bersedia untuk membuka sesi sharing knowledge mengenai cara mengkolaborasikan Kubernetes dengan microservices Anda.

Sebagai salah satu penyedia cloud computing terpercaya di Indonesia, CBNCloud memiliki layanan Container Management yang dapat menjadi mitra Anda dalam rancang bangun micoservices dengan dukungan platform Kubernetes, Docker dan Rancher. Layanan kami termasuk mendampingi Anda untuk memahami kebutuhan bisnis, menginstalasi platform yang sesuai dengan kebutuhan tersebut sampai dengan rancang arsitektur microservices Anda.

Kebetulan kami pernah menuliskan plus minus merancang arsitektur microservices dengan Docker

Lalu bagaimana cara menghubungi kami? Mudah saja, sesederhana mengirimkan email, mengisi formulir permintaan layanan, atau menelepon Call Center kami.

Jika diperlukan, Anda juga dapat memercayakan mitra pembuatan container Anda kepada kami, termasuk proses pengembangan dan uji coba. Anda juga dapat senantiasa berdiskusi dengan kami terkait masalah impelentasi dan skalabilitas, pemantauan dan pengelolaan, keamanan serta pembaruan dan perbaikan.

Belum punya kebutuhan akan microservices karena kurangnya tim pendukung internal untuk mengikuti perkembangan teknonologi cloud yang dinamis? Jangan khawatir, kami pun siap mendampingi Anda dalam solusi Managed Services kami.

Jadwalkan meeting dengan kami untuk membahas rangkaian solusi cloud menyeluruh dari hulu ke hilir.

Tunggu apa lagi? Nikmati kemudahan bertransformasi digital bersama CBNCloud, optimized to simplify your life. (put/loft.sh)