Kubernetes Adalah, Keuntungan, Arsiktekur, Komponen dan Cara Kerja

Kubernetes K8S definition, benefit, architecture, cloud platform orchestration, CI/CD, DevOps, Agile, Cloud Native

Apa yang anda perlu ketahui tentang Kubernetes, keuntungan yang bisa di dapat dan bagaimana dengan arsitektur, komponen dan cara kerjanya.

Apa itu Kubernetes (K8S) dan bagaimana cara kerjanya?

Kubernetes adalah sebuah open source Orchestration platform yang membantu mengelola distributed Container dalam skala besar. Anda hanya perlu memberi instruksi kepada Kubernetes di mana Anda ingin aplikasi Anda dijalankan, maka platform ini akan menangani semua hal-hal yang lainnya.

Kubernetes menyediakan application programming interface (API) terpadu untuk mendeploy aplikasi web, batch task, dan database di dalamnya.

Aplikasi di dalam Kubernetes dikemas dalam Container dan diisolasi dari lingkungannya. Kubernetes mengotomatisasi konfigurasi aplikasi anda. Serta mencatat dan melacak semua pengalokasian resource di dalamnya.

Latar Belakang

Container mentransformasi cara kita memandang Architecture aplikasi dan bagaimana kecepatan programming team seharusnya dalam menghasilkan aplikasi yang dibutuhkan untuk mensupport bisnis. Architecture Container menjanjikan portabilitas aplikasi di lingkungan cloud hybrid dan memungkinkan programmer untuk fokus kepada pembuatan aplikasi yang hebat, tanpa khawatir dari gangguan Infrastructure atau hal-hal yang kecil lainnya.

Container dapat membantu menghilangkan kompleksnya sebuah aplikasi dengan cara meminimalisasi packaging image aplikasi dan meningkatkan portabilitasnya. Sebaliknya, mengelola Container deployment yang besar juga menghadirkan tantangan baru bagi tim operasi.

Container juga bisa di hidupkan dalam waktu yang singkat di banding dengan waktu yang di perlukan untuk menghidupkan Virtual Machine (VM). Selain itu juga di iringi dengan utilisasi penggunaan resource yang lebih efisien. Namun teknologi Container ini harus didukung dengan pengelolaan system yang lebih baik karena banyaknya objek yang bisa terpasang, terlebih dengan lifecycle yang lebih dinamis. Oleh karena itu, hal ini memerlukan Management yang lebih terotomatisasi dan policy-driven.

Banyak tim beralih ke Kubernetes yang memiliki rangkaian fitur  yangkompleks dan lengkap untuk membantu mereka mengatur dan mengelola Container. Baik digunakan untuk production, development atau testing environement. Kubernetes telah terpilih sebagai de facto standar untuk Orchestration dan Management Container, sehingga penting untuk organisasi memahami teknologi Kubernetes ini.

Apa sajakah keuntungan dari Kubernetes?

Container mengubah bagaimana cara aplikasi modern dibuat. Beralih dari VM ke Container kelihatannya sangat merepotkan, tetapi manfaatnya sangat banyak dan nyata. Dibawah ini adalah keuntungan-keuntungan dari menerapkan Kubernetes:

1. Skalabilitas

Kubernetes secara otomatis men-scale cluster anda berdasarkan kebutuhan. Hal ini akan menghemat biaya dan resource. Bayangkan Anda menjalankan layanan tiket acara online di mana pelanggan dapat membeli tiket 24 jam dalam sehari, 7 hari seminggu dengan beban yang bervariasi setiap saat.

Anda memiliki gambaran secara garis besar tentang beban dan trafik pegunjung saat tiket mulai dijual pada siang hari, dan Anda tahu bahwa malam hari pengunjung biasanya akan berkurang. Namun, ada beberapa peristiwa dan waktu-waktu tertentu yang menyebabkan lonjakan pengunjung bertambah secara eksponensial.

Dalam skenario ini, Anda ingin cluster Anda scale up atau membesar secara otomatis dan dinamis untuk memenuhi permintaan. Fitur Kubernetes Cluster Autoscaler dan Horizontal Pod Autoscaler, akan melakukan hal ini secara otomatis.

2. Portabilitas

Kubernetes Orchestration platform dapat di jalankan di atas berbagai Infrastructure termasuk di on-premise datacenter, public cloud, private cloud ataupun hybrid cloud. Kubernetes bukan saja dapat digunakan di mana saja, tetapi juga dapat di jalankan dengan perintah yang sama.

3. Deployment yang konsisten

Kubernetes dapat di deploy secara konsisten di seluruh Infrastructure. Container memungkinkan untuk menerapkan konsep immutable Infrastructure. Semua setup dan dependencies komponen yang di butuhkan untuk menjalankan aplikasi bisa dimasukkan dan digabungkan di dalam Container itu sendiri.

Anda mungkin tahu bahwa server berperilaku aneh, tetapi lupa namanya. Anda akhirnya terpaksa untuk menghabiskan waktu untuk patching. Lalu membuat environment yang disesuaikan untuk menjalankan production environment. Kemudian juga anda mungkin takut untuk mematikan server ini dan menggantinya dengan yang lain. Ketakutan ini sering terjadi karena sulit untuk mengingat cara penyiapan server, atau apa yang berubah setelah initial setup.

Container didesain dan diproduksi secara massal dan identik. Container mengkonfigurasi diri mereka dengan cara yang sama setiap saat. Karena tidak dapat diubah, perubahan konfigurasi tambahan dilarang. Tidak ada rasa takut untuk meng-kill sebuah Container dan memulai yang baru.

Konsistensi ini berarti programmer dapat menghabiskan lebih sedikit waktu untuk debugging dan lebih banyak waktu untuk memfokuskan pada fitur-fitur value added yang di butuhkan dalam bisnis.

4. Separated dan Automated Operation dan Development

Tim operasi dan tim programmer sering umumnya berbeda pendapat. Tim operasi menghargai stabilitas dan lebih konservatif terhadap perubahan. Sedangkan tim programmer mementingkan inovasi dan menghargai perubahan yang cepat

Kubernetes dapat menjembatani konflik ini. Berkat otomatisasi Kubernetes, tim operasi dapat merasa yakin dengan stabilitas sistem. Sebaliknya, Container menghemat waktu developer dengan memberikan kelonggaran dengan cara menerapkan teknik rapid iteration cycle.

Bagaimana Architecture dari Kubernetes?

Kubernetes adalah platform yang handal, teruji dan terdiri dari ratusan komponen. Meskipun rumit tetapi memberikan serangkaian fitur-fitur yang luar biasa. Penting sekali bagi tim operasi untuk memahami cara kerja di bagian dalamnya, tetapi panduan ini akan hanya menyajikan versi Architecture yang disederhanakan untuk memudahkan pengertian Architecturenya.

Kubernetes K8S definition, benefit, architecture, cloud platform orchestration, CI/CD, DevOps, Agile, Cloud Native.

Kubernetes adalah perangkat lunak untuk mengelola aplikasi yang dimasukkan dan digabungkan di dalam Container di atas server cluster. Server-server ini bisa di kategorikan menjadi dua fungsi node master atau node worker. Secara bersama-sama mereka menjalankan aplikasi-aplikasi di atasnya.

Control Plane

Control Plane secara kasar setara dengan konsep node master. Dia bertindak sebagai otak dari cluster Kubernetes. Penjadwalan, penemuan layanan, load balancing, dan resource Management semua fungsi ini disediakan oleh Control Plane. Untuk pembahasan high level Architecture, kita tidak akan membahas fungsi ini secara detil. Tetapi akan ditampilkannya bagian-bagian dari Control Plane.

  • API Server: Kubernetes API server adalah titik sentral poin yang berfungsi untuk menghubungkan semua aplikasi dan service yang berjalan.  Setiap permintaan komunikasi baik untuk internal atau eksternal harus melalui API server. Kemudian server menentukan apakah permintaan itu valid dan meneruskan permintaan jika pemohon memiliki akses yang benar.
  • etcd: Jika Control Plane bisa di analogikan sebagai otak, maka etcd adalah tempat penyimpanan informasi. Server Kubernetes tanpa etcd akan seperti otak yang tidak dapat menyimpan informasi. Sebagai tempat penyimpanan key-value terdistribusi dan fault-tolerant, etcd merupakan komponen sangat penting bagi Kubernetes. Dia bertindak sebagai ultimate source of truth untuk menyimpan informasi-informasi tentang cluster, status cluster dan konfigurasinya.
  • Worker Node: Di dalam Kubernetes cluster, worker node menjalankan semua aplikasi dan layanan. Ada banyak worker node dalam sebuah cluster, dan menambahkan node baru adalah cara Anda scale-up Kubernetes.
  • Kubelet: Kubelet adalah aplikasi kecil yang terdapat di setiap worker node. Tugas Kubelet adalah berkomunikasi dengan Control Plane, kemudian menjalankan perintah yang diminta pada worker node. Jika Control Plane seperti otak, kubelet seperti lengan. Control Plane mengirimkan perintah, dan kubelet menjalankan aksinya.
  • Container runtime engine: Container runtime menjalankan image aplikasi yang terdapat di dalam Container. Juga merupakan penghubung antara Container dan Linux kernel yang berada di bawah nya.

Container, Microservices dan Cloud Native Application

Container sangat populer karena memungkinkan aplikasi berjalan sebagai proses yang terisolasi dengan resource terpisah. Berbeda dengan operasi pada VM yang melakukan virtualisasi secara hardware yang menyebabkan biaya operasi menjadi mahal, Container dapat mengatur komputasi resource di level Linux Kernel. Sifat ini membuat setiap aplikasi mendapatkan Container sendiri-sendiri, sehingga mencegah konflik dependency yang di butukan untuk menjalankan aplikasi.

Secara sederhananya, Container bisa di lihat sebagai tar, sejenis tipe file zip. Dengan konsep ini, Container adalah cara untuk memasukkan dan mempaketkan programing code, konfigurasi, dan dependensi aplikasi. Pemaketan ini menghilangkan masalah “Ini berjalan di komputer saya; kenapa tidak berjalan di sistem-mu? ”

Idealnya, aplikasi menghasilkan hasil yang sama terlepas dari system yang di pakai, dan containerisation membuat ini lebih mudah dicapai. Aplikasi di dalam Container akan mulai berjalan, berhenti, membuat request, dan menghasilkan log yang sama walaupun dalam environment yang berbeda-beda.

Untuk bisnis, Container dapat membantu hal-hal berikut:

  • Faster time to market karena developer menghabiskan waktu lebih sedikit untuk men-debug environment dan lebih banyak waktu untuk menulis program kode.
  • Biaya server lebih rendah karena Container dapat memperbaiki utilisasi resource yang lebih baik.
  • Memberikan fleksibilitas untuk mendeploy berbagai-bagai macam tipe Infrastructure karena Container dapat di jalankan di atas Infrastructure dimana saja.

Untuk aplikasi kompleks yang terdiri dari beberapa komponen yang banyak, Container sangat menyederhanakan proses peng-upgrade-an. Menempatkan setiap komponen dalam Container memudahkan untuk melakukan perubahan tanpa harus khawatir dengan efek yang di sebabkan kepada bagian-bagian yang lain. Kesederhanaan ini telah membuat Container menjadi pilihan terbaik dalam mengembangkan dan mengimplementasikan microservices. Aplikasi Microservices yang fokus pada satu fungsi, secara alami, dapat memanfaatkan Container karena tersedianya pemisahan yang jelas antara komponen dan layanan.

Kubernetes sebagai Container Management dan Orchestration

Aplikasi semakin sering dibangun sebagai bagian fungsional yang terpisah, yang masing-masing dapat dibungkus dalam sebuah Container. Artinya, untuk setiap aplikasi, ada lebih banyak bagian yang harus dikelola. Selain itu, Container memiliki masa pakai yang lebih pendek daripada penerapan VM tradisional. Kompleksitas dalam mengelola aplikasi dengan lebih banyak objek dan churn yang lebih besar menghadirkan tantangan baru: konfigurasi, penemuan layanan, load balancing, scale resource, serta menemukan dan memperbaiki kegagalan. Mengelola kompleksitas ini secara manual tidak memungkinkan. Cluster biasanya dapat menjalankan lebih dari 1.000 Container; updating cluster yang sebesar ini tidak mungkin dapat dilakukan tanpa otomatisasi.

Kubernetes memberikan Orchestration Container tingkat produksi dengan mengotomatiskan konfigurasi Container, menyederhanakan scale up, dan mengelola alokasi resource. Kubernetes bisa berjalan dimana saja dan dapat menyediakannya dalam skala besar.

Kubernetes adalah Orchestration Container. Ini berarti Kubernetes mencari tahu di mana dan bagaimana menjalankan Container Anda. Lebih eksplisit lagi, ini menyediakan tiga fungsi utama.

– Schedulers and scheduling

Scheduling dengan cerdas membandingkan kebutuhan Container dengan kesehatan cluster Anda, dan menyarankan tempat penampung baru mungkin cocok. Scheduler adalah semacam asisten yang mengelola kalender yang sangat besar. Pengontrol berkonsultasi dengan scheduler dan kemudian menetapkan pekerjaan dan monitor Container.

– Service discovery and load balancing

Dalam sistem apa pun, penemuan service discovery bisa menjadi tantangan. Tidak terkecuali Kubernetes. Semakin banyak layanan yang membentuk aplikasi Anda, semakin sulit aplikasi Anda untuk dilacak dan dikelola.

Untungnya, Kubernetes secara otomatis mengelola penemuan layanan. Kami mungkin meminta Kubernetes untuk menjalankan layanan seperti database atau RESTful API. Kubernetes membuat catatan tentang layanan ini dan dapat mengembalikan daftar jika kita bertanya tentang mereka nanti.

Kubernetes juga memeriksa kesehatan layanan individu. Jika Kubernetes mendeteksi kerusakan pada layanan Anda, Kubernetes akan secara otomatis mencoba untuk memulai ulang. Selain pemeriksaan dasar ini, Kubernetes memungkinkan Anda menambahkan health check yang lebih halus. Misalnya, mungkin database Anda tidak rusak. Tetapi bagaimana jika sangat lambat? Kubernetes dapat melacak ini dan mengarahkan lalu lintas ke cadangan.

Detects Slowness

Kubernetes juga menggabungkan load balancing. Layanan modern berskala horizontal — dengan menjalankan duplikat layanan. Load Balancing adalah bagian penting yang mendistribusikan dan mengkoordinasikan lalu lintas di seluruh container duplikat ini.

Resource Management

Setiap komputer memiliki central processing unit (CPU) dan memori yang terbatas. Aplikasi yang mentranskode video mungkin membebankan ke CPU, dan aplikasi yang mengurai teks mungkin memerlukan banyak memori. Artinya aplikasi video akan kehabisan daya CPU terlebih dahulu, sedangkan aplikasi pengurai teks akan kehabisan memori terlebih dahulu. Kehabisan resource akan menyebabkan ketidakstabilan dan crash pada sistem.

Management resource yang tepat adalah hasil dari penjadwalan yang cerdas. Kubernetes menjadwalkan aplikasi untuk menggunakan resource dengan tepat seperti CPU dan memori sambil tetap berhati-hati terhadap penggunaan berlebih-lebih yang dapat menyebabkan ketidakstabilan pada sistem.