INDO GLOBAL PRATAMA
The world in your hands
Perkenalan
Tutorial ini adalah yang pertama dari serangkaian artikel yang berfokus pada Kubernetes dan konsep penyebaran kontainer. Kubernetes adalah alat yang digunakan untuk mengelola kluster aplikasi kemas. Dalam komputasi, proses ini sering disebut orkestrasi .
Analogi dengan orkestra musik, dalam banyak hal, cocok. Seperti halnya konduktor, Kubernetes mengoordinasikan banyak layanan mikro yang bersama-sama membentuk aplikasi yang berguna. Kubernetes secara otomatis dan terus-menerus memantau klaster dan membuat penyesuaian pada komponennya.
Memahami arsitektur Kubernetes sangat penting untuk men-deploy dan memelihara aplikasi dalam container.
Kubernetes, atau singkatnya k8s , adalah sistem untuk mengotomatiskan penerapan aplikasi. Aplikasi modern tersebar di cloud, mesin virtual, dan server. Mengelola aplikasi secara manual bukan lagi pilihan yang layak.
K8 mengubah mesin virtual dan fisik menjadi permukaan API terpadu. Pengembang kemudian dapat menggunakan Kubernetes API untuk menerapkan, menskalakan, dan mengelola aplikasi dalam container .
Arsitekturnya juga menyediakan kerangka fleksibel untuk sistem terdistribusi. K8 secara otomatis mengatur penskalaan dan failover untuk aplikasi Anda dan menyediakan pola penerapan.
Ini membantu mengelola wadah yang menjalankan aplikasi dan memastikan tidak ada waktu henti di lingkungan produksi. Misalnya, jika sebuah wadah turun, wadah lain secara otomatis menggantikannya tanpa pernah diketahui oleh pengguna akhir.
Kubernetes bukan hanya sistem orkestrasi. Ini adalah satu set proses kontrol yang independen dan saling berhubungan. Perannya adalah untuk terus bekerja pada keadaan saat ini dan memindahkan proses ke arah yang diinginkan.
Lihat artikel kami tentang Apa itu Kubernetes jika Anda ingin mempelajari lebih lanjut tentang orkestrasi wadah.
Kubernetes memiliki arsitektur terdesentralisasi yang tidak menangani tugas secara berurutan. Ini berfungsi berdasarkan model deklaratif dan mengimplementasikan konsep ‘ keadaan yang diinginkan ‘. Langkah-langkah ini mengilustrasikan proses Kubernetes dasar:
Kami sekarang akan menjelajahi komponen individual dari klaster Kubernetes standar untuk memahami prosesnya secara lebih rinci.
Kubernetes Master (Master Node) menerima input dari CLI (Command-Line Interface) atau UI (User Interface) melalui API. Ini adalah perintah yang Anda berikan ke Kubernetes.
Anda menentukan pod, kumpulan replika, dan layanan yang ingin dipertahankan oleh Kubernetes. Misalnya, image container mana yang akan digunakan, port mana yang akan diekspos, dan berapa banyak replika pod yang akan dijalankan.
Anda juga menyediakan parameter status yang diinginkan untuk aplikasi yang berjalan di kluster tersebut.
Node Master Kubernetes
Server API adalah front-end dari control plane dan satu-satunya komponen di control plane yang berinteraksi dengan kita secara langsung. Komponen sistem internal, serta komponen pengguna eksternal, semuanya berkomunikasi melalui API yang sama.
Key-Value Store, juga disebut etcd , adalah basis data yang digunakan Kubernetes untuk mencadangkan semua data klaster. Ini menyimpan seluruh konfigurasi dan status cluster. Node Master meminta etcd untuk mengambil parameter untuk status node, pod, dan kontainer.
Peran Pengontrol adalah untuk mendapatkan status yang diinginkan dari Server API. Ini memeriksa keadaan saat ini dari node yang ditugaskan untuk mengontrolnya, dan menentukan apakah ada perbedaan, dan menyelesaikannya, jika ada.
Penjadwal mengawasi permintaan baru yang datang dari Server API dan menugaskannya ke node yang sehat . Ini memeringkat kualitas node dan menyebarkan pod ke node yang paling cocok. Jika tidak ada node yang cocok, pod akan ditempatkan dalam keadaan tertunda sampai node tersebut muncul.
Catatan: Praktik Kubernetes dianggap baik untuk tidak menjalankan aplikasi pengguna di node Master. Penyiapan ini memungkinkan Kubernetes Master untuk berkonsentrasi sepenuhnya pada pengelolaan klaster.
Node pekerja mendengarkan Server API untuk penugasan kerja baru; mereka menjalankan tugas kerja dan kemudian melaporkan hasilnya kembali ke node Kubernetes Master.
Node Pekerja Kubernetes
Kubelet berjalan di setiap node dalam klaster. Ini adalah agen utama Kubernetes. Dengan menginstal kubelet, CPU, RAM, dan penyimpanan node menjadi bagian dari cluster yang lebih luas. Itu mengawasi tugas yang dikirim dari Server API, mengeksekusi tugas, dan melaporkan kembali ke Master. Itu juga memantau pod dan melaporkan kembali ke panel kontrol jika pod tidak berfungsi penuh. Berdasarkan informasi tersebut, Master kemudian dapat memutuskan bagaimana mengalokasikan tugas dan sumber daya untuk mencapai keadaan yang diinginkan.
Waktu proses wadah menarik gambar dari registri gambar wadah dan memulai dan menghentikan wadah. Perangkat lunak atau plugin pihak ketiga , seperti Docker, biasanya menjalankan fungsi ini.
kube -proxy memastikan bahwa setiap node mendapatkan alamat IP-nya, mengimplementasikan iptables lokal dan aturan untuk menangani perutean dan penyeimbangan beban lalu lintas .
Pod adalah elemen penjadwalan terkecil di Kubernetes . Tanpanya, sebuah container tidak dapat menjadi bagian dari sebuah cluster. Jika Anda perlu menskalakan aplikasi, Anda hanya dapat melakukannya dengan menambahkan atau menghapus pod.
Pod berfungsi sebagai ‘pembungkus’ untuk satu wadah dengan kode aplikasi. Berdasarkan ketersediaan sumber daya, Master menjadwalkan pod pada node tertentu dan berkoordinasi dengan runtime container untuk meluncurkan container.
Jika pod tiba-tiba gagal melakukan tugasnya, Kubernetes tidak akan berusaha memperbaikinya. Sebagai gantinya, ia membuat dan memulai pod baru sebagai gantinya. Pod baru ini adalah replika, kecuali untuk DNS dan alamat IP. Fitur ini berdampak besar pada cara pengembang mendesain aplikasi.
Karena sifat arsitektur Kubernetes yang fleksibel, aplikasi tidak perlu lagi dikaitkan dengan instance pod tertentu. Sebagai gantinya, aplikasi perlu dirancang sehingga pod yang sama sekali baru, yang dibuat di mana saja di dalam cluster, dapat menggantikannya dengan mulus. Untuk membantu proses ini, Kubernetes menggunakan services .
Pod tidak konstan. Salah satu fitur terbaik yang ditawarkan Kubernetes adalah pod yang tidak berfungsi diganti dengan yang baru secara otomatis.
Namun, pod baru ini memiliki kumpulan IP yang berbeda. Ini dapat menyebabkan masalah pemrosesan, dan churn IP karena IP tidak lagi cocok. Jika dibiarkan tanpa pengawasan, properti ini akan membuat pod menjadi sangat tidak dapat diandalkan.
Layanan diperkenalkan untuk menyediakan jaringan yang andal dengan membawa alamat IP dan nama DNS yang stabil ke dunia pod yang tidak stabil.
Dengan mengontrol lalu lintas yang datang dan pergi ke pod, layanan Kubernetes menyediakan titik akhir jaringan yang stabil – IP tetap, DNS, dan porta. Melalui layanan, pod apa pun dapat ditambahkan atau dihapus tanpa rasa takut bahwa informasi jaringan dasar akan berubah dengan cara apa pun.
Pod diasosiasikan dengan layanan melalui key-value pair yang disebut label dan selector . Layanan secara otomatis menemukan pod baru dengan label yang cocok dengan pemilih.
Proses ini secara mulus menambahkan pod baru ke layanan, dan pada saat yang sama, menghapus pod yang dihentikan dari cluster.
Misalnya, jika keadaan yang diinginkan mencakup tiga replika dari sebuah pod dan sebuah node yang menjalankan satu replika gagal , keadaan saat ini dikurangi menjadi dua pod. Pengamat Kubernetes bahwa keadaan yang diinginkan adalah tiga pod. Ini kemudian menjadwalkan satu replika baru untuk menggantikan pod yang gagal dan menugaskannya ke node lain di cluster.
Hal yang sama berlaku saat memperbarui atau menskalakan aplikasi dengan menambahkan atau menghapus pod. Setelah kami memperbarui status yang diinginkan, Kubernetes akan melihat perbedaan tersebut dan menambahkan atau menghapus pod agar sesuai dengan file manifes. Panel kontrol Kubernetes merekam, mengimplementasikan, dan menjalankan loop rekonsiliasi latar belakang yang terus memeriksa untuk melihat apakah lingkungan cocok dengan persyaratan yang ditentukan pengguna.
Untuk memahami sepenuhnya bagaimana dan apa yang diatur oleh Kubernetes, kita perlu mempelajari konsep penerapan kontainer .
Awalnya, pengembang menerapkan aplikasi pada server fisik individual. Jenis penerapan ini menimbulkan beberapa tantangan. Pembagian sumber daya fisik berarti bahwa satu aplikasi dapat menggunakan sebagian besar daya pemrosesan, sehingga membatasi kinerja aplikasi lain pada mesin yang sama.
Penyebaran Tradisional
Perlu waktu lama untuk memperluas kapasitas perangkat keras, yang pada akhirnya meningkatkan biaya. Untuk mengatasi keterbatasan perangkat keras, organisasi mulai memvirtualisasikan mesin fisik.
Penyebaran virtual memungkinkan Anda membuat lingkungan virtual yang terisolasi, Mesin Virtual (VM) , pada satu server fisik. Solusi ini mengisolasi aplikasi dalam VM, membatasi penggunaan sumber daya, dan meningkatkan keamanan. Sebuah aplikasi tidak dapat lagi mengakses informasi yang diproses oleh aplikasi lain secara bebas.
Penerapan Virtualisasi
Penyebaran virtual memungkinkan Anda untuk menskalakan dengan cepat dan menyebarkan sumber daya dari satu server fisik, memperbarui sesuka hati, dan menjaga biaya perangkat keras tetap terkendali. Setiap VM memiliki sistem operasinya sendiri dan dapat menjalankan semua sistem yang diperlukan di atas perangkat keras virtual.
Penerapan Kontainer adalah langkah selanjutnya dalam upaya untuk membuat model yang lebih fleksibel dan efisien. Sama seperti VM, container memiliki memori individual, file sistem, dan ruang pemrosesan. Namun, isolasi yang ketat tidak lagi menjadi faktor pembatas.
Beberapa aplikasi sekarang dapat berbagi sistem operasi dasar yang sama. Fitur ini membuat container jauh lebih efisien daripada VM full-blown. Mereka portabel di cloud, perangkat berbeda, dan hampir semua distribusi OS.
Penerapan Kontainer
Struktur wadah juga memungkinkan aplikasi berjalan sebagai bagian yang lebih kecil dan independen. Bagian-bagian ini kemudian dapat digunakan dan dikelola secara dinamis di beberapa mesin. Struktur rumit dan segmentasi tugas terlalu rumit untuk dikelola secara manual.
Solusi otomasi, seperti Kubernetes, diperlukan untuk mengelola semua komponen bergerak yang terlibat dalam proses ini secara efektif.
Kesimpulan
Kubernetes beroperasi menggunakan model yang sangat sederhana. Kami memasukkan bagaimana kami ingin sistem kami berfungsi – Kubernetes membandingkan keadaan yang diinginkan dengan keadaan saat ini dalam sebuah cluster. Layanannya kemudian berfungsi untuk menyelaraskan kedua keadaan dan mencapai serta mempertahankan keadaan yang diinginkan.
Anda sekarang sudah memiliki pemahaman yang lebih baik tentang arsitektur Kubernetes dan dapat melanjutkan tugas praktis untuk membuat dan memelihara klaster Anda.