Apa itu Kubernetes? Platform aplikasi Anda berikutnya

Kubernetes adalah platform open source yang populer untuk orkestrasi container - yaitu, untuk pengelolaan aplikasi yang dibangun dari banyak runtime mandiri yang disebut container. Kontainer menjadi semakin populer sejak proyek kontainerisasi Docker diluncurkan pada 2013, tetapi aplikasi kontainer terdistribusi yang besar dapat menjadi semakin sulit untuk dikoordinasikan. Dengan membuat aplikasi dalam container lebih mudah dikelola dalam skala besar, Kubernetes telah menjadi bagian penting dari revolusi container.

Apa itu orkestrasi kontainer?

Container mendukung pemisahan masalah seperti VM tetapi dengan overhead yang jauh lebih sedikit dan fleksibilitas yang jauh lebih besar. Hasilnya, container telah mengubah cara berpikir orang tentang pengembangan, penerapan, dan pemeliharaan software. Dalam arsitektur dalam container, berbagai layanan yang membentuk aplikasi dikemas ke dalam container terpisah dan diterapkan di seluruh cluster mesin fisik atau virtual. Namun hal ini menimbulkan kebutuhan akan orkestrasi container — alat yang mengotomatiskan penerapan, pengelolaan, penskalaan, jaringan, dan ketersediaan aplikasi berbasis container.

Apa itu Kubernetes?

Kubernetes adalah proyek open source yang telah menjadi salah satu alat orkestrasi container paling populer; ini memungkinkan Anda menerapkan dan mengelola aplikasi multi-container dalam skala besar. Meskipun dalam praktiknya Kubernetes paling sering digunakan dengan Docker, platform containerization yang paling populer, ia juga dapat bekerja dengan sistem container apa pun yang sesuai dengan standar Open Container Initiative (OCI) untuk format dan runtime image container. Dan karena Kubernetes adalah open source, dengan batasan yang relatif sedikit tentang cara penggunaannya, Kubernetes dapat digunakan secara bebas oleh siapa saja yang ingin menjalankan container, kebanyakan di mana pun mereka ingin menjalankannya — di tempat, di cloud publik, atau keduanya .

Google dan Kubernetes

Kubernetes memulai kehidupannya sebagai sebuah proyek di dalam Google. Ini adalah penerus — meskipun bukan keturunan langsung dari — Google Borg, alat manajemen penampung sebelumnya yang digunakan Google secara internal. Google membuka Kubernetes bersumber pada tahun 2014, sebagian karena arsitektur layanan mikro terdistribusi yang difasilitasi Kubernetes memudahkan untuk menjalankan aplikasi di cloud. Google melihat adopsi kontainer, layanan mikro, dan Kubernetes berpotensi mengarahkan pelanggan ke layanan cloud-nya (meskipun Kubernetes pasti bekerja dengan Azure dan AWS juga). Kubernetes saat ini dikelola oleh Cloud Native Computing Foundation, yang berada di bawah payung Linux Foundation.

Kubernetes vs. Docker dan Kubernetes vs. Docker Swarm

Kubernetes tidak menggantikan Docker, tetapi menambahkannya. Namun, Kubernetes memang menggantikan beberapa teknologi level yang lebih tinggi yang telah muncul di sekitar Docker.

Salah satu teknologi tersebut adalah Docker Swarm, orkestrator yang dibundel dengan Docker. Anda masih dapat menggunakan Docker Swarm sebagai ganti Kubernetes, tetapi Docker Inc. telah memilih untuk menjadikan Kubernetes bagian dari edisi Docker Community dan Docker Enterprise di masa mendatang.

Bukan berarti Kubernetes adalah pengganti untuk Docker Swarm. Kubernetes secara signifikan lebih kompleks daripada Swarm, dan membutuhkan lebih banyak pekerjaan untuk diterapkan. Namun sekali lagi, pekerjaan ini dimaksudkan untuk memberikan hasil yang besar dalam jangka panjang — infrastruktur aplikasi yang lebih dapat dikelola dan tangguh. Untuk pekerjaan pengembangan, dan cluster container yang lebih kecil, Docker Swarm menyajikan pilihan yang lebih sederhana. 

Kubernetes vs. Mesos

Proyek lain yang mungkin pernah Anda dengar sebagai pesaing Kubernetes adalah Mesos. Mesos adalah proyek Apache yang awalnya muncul dari pengembang di Twitter; itu sebenarnya dilihat sebagai jawaban untuk proyek Google Borg.

Mesos sebenarnya menawarkan layanan orkestrasi kontainer, tetapi ambisinya jauh melampaui itu: itu bertujuan untuk menjadi semacam sistem operasi cloud yang dapat mengoordinasikan komponen dalam kontainer dan non-kontainer. Untuk itu, banyak platform berbeda dapat berjalan di dalam Mesos — termasuk Kubernetes itu sendiri.

Arsitektur Kubernetes: Cara kerja Kubernetes

Arsitektur Kubernetes menggunakan berbagai konsep dan abstraksi. Beberapa di antaranya adalah variasi dari pengertian yang sudah ada dan sudah dikenal, tetapi yang lainnya khusus untuk Kubernetes.

Cluster Kubernetes

Abstraksi Kubernetes level tertinggi, cluster , mengacu pada grup mesin yang menjalankan Kubernetes (itu sendiri adalah aplikasi yang dikelompokkan) dan container yang dikelola olehnya. Cluster Kubernetes harus memiliki master , sistem yang memerintahkan dan mengontrol semua mesin Kubernetes lainnya di dalam cluster. Cluster Kubernetes yang sangat tersedia mereplikasi fasilitas master di beberapa mesin. Tetapi hanya satu master pada satu waktu yang menjalankan penjadwal pekerjaan dan manajer-pengontrol.

Node dan pod Kubernetes

Setiap cluster berisi node Kubernetes . Node mungkin berupa mesin fisik atau VM. Sekali lagi, idenya adalah abstraksi: Apa pun aplikasi yang dijalankan, Kubernetes menangani penerapan pada substrat tersebut. Kubernetes bahkan memungkinkan untuk memastikan bahwa container tertentu hanya berjalan di VM atau hanya di bare metal.

Node menjalankan pod , objek Kubernetes paling dasar yang dapat dibuat atau dikelola. Setiap pod merepresentasikan satu instance aplikasi atau proses yang berjalan di Kubernetes, dan terdiri dari satu atau lebih container. Kubernetes memulai, menghentikan, dan mereplikasi semua container di dalam pod sebagai sebuah grup. Pod menjaga perhatian pengguna pada aplikasinya, bukan pada container itu sendiri. Detail tentang bagaimana Kubernetes perlu dikonfigurasi, mulai dari status pod hingga, disimpan di Etcd , penyimpanan nilai kunci terdistribusi.

Pod dibuat dan dimusnahkan pada node sesuai kebutuhan untuk menyesuaikan dengan status yang diinginkan yang ditentukan oleh pengguna dalam definisi pod. Kubernetes menyediakan abstraksi yang disebut pengontrol untuk menangani logistik tentang bagaimana pod diputar, diluncurkan, dan dipintal. Pengontrol tersedia dalam beberapa bentuk berbeda tergantung pada jenis aplikasi yang dikelola. Misalnya, pengontrol "StatefulSet" yang baru-baru ini diperkenalkan digunakan untuk menangani aplikasi yang membutuhkan status persisten. Jenis pengontrol lain, penerapan , digunakan untuk menaikkan atau menurunkan skala aplikasi, memperbarui aplikasi ke versi baru, atau mengembalikan aplikasi ke versi yang diketahui bagus jika ada masalah.

Layanan Kubernetes

Karena pod hidup dan mati sesuai kebutuhan, kita memerlukan abstraksi yang berbeda untuk menangani siklus hidup aplikasi. Sebuah aplikasi seharusnya menjadi entitas persisten, meskipun pod yang menjalankan container yang membentuk aplikasi tersebut tidak persisten. Untuk itu, Kubernetes menyediakan abstraksi yang disebut layanan.

Sebuah layanan di Kubernetes menjelaskan bagaimana sekelompok pod tertentu (atau objek Kubernetes lainnya) dapat diakses melalui jaringan. Seperti yang dikatakan dalam dokumentasi Kubernetes, pod yang membentuk back-end suatu aplikasi mungkin berubah, tetapi front-end tidak perlu mengetahui atau melacaknya. Layanan memungkinkan hal ini.

Beberapa bagian internal Kubernetes melengkapi gambarannya. The scheduler paket keluar beban kerja ke kelenjar sehingga mereka seimbang di seluruh sumber daya dan sehingga penyebaran memenuhi persyaratan definisi aplikasi. The kontroler manajer memastikan bahwa keadaan dari sistem-aplikasi tersebut, beban kerja, dll-pertandingan keadaan yang diinginkan didefinisikan dalam pengaturan konfigurasi Etcd ini.

Penting untuk diingat bahwa tidak ada mekanisme level rendah yang digunakan oleh kontainer, seperti Docker itu sendiri, yang digantikan oleh Kubernetes. Sebaliknya, Kubernetes menyediakan kumpulan abstraksi yang lebih besar untuk menggunakan mekanisme ini demi menjaga aplikasi tetap berjalan dalam skala besar.

Kubernetes Ingress

Layanan Kubernetes dianggap berjalan dalam sebuah cluster. Tetapi Anda pasti ingin dapat mengakses layanan ini dari dunia luar. Kubernetes memiliki beberapa komponen yang memfasilitasi hal ini dengan berbagai tingkat kesederhanaan dan ketahanan, termasuk NodePort dan LoadBalancer, tetapi komponen dengan fleksibilitas paling tinggi adalah Ingress. Ingress adalah API yang mengelola akses eksternal ke layanan cluster, biasanya melalui HTTP.

Ingress memang membutuhkan sedikit konfigurasi untuk disiapkan dengan benar — Matthew Palmer, yang menulis buku tentang pengembangan Kubernetes, memandu Anda melalui proses di situsnya.

Dasbor Kubernetes

Salah satu komponen Kubernetes yang membantu Anda tetap mengetahui semua komponen lainnya ini adalah Dashboard, UI berbasis web yang dengannya Anda dapat menerapkan dan memecahkan masalah aplikasi dan mengelola sumber daya cluster. Dasbor tidak dipasang secara default, tetapi menambahkannya tidak terlalu merepotkan.

Video terkait: Apa itu Kubernetes?

Dalam video 90 detik ini, pelajari tentang Kubernetes, sistem open-source untuk mengotomatiskan aplikasi dalam container, dari salah satu penemu teknologi, Joe Beda, pendiri dan CTO di Heptio.

Keunggulan Kubernetes

Karena Kubernetes memperkenalkan abstraksi dan konsep baru, dan karena kurva pembelajaran untuk Kubernetes tinggi, adalah hal yang normal untuk menanyakan berapa keuntungan jangka panjang untuk menggunakan Kubernetes. Berikut adalah ikhtisar dari beberapa cara spesifik menjalankan aplikasi di dalam Kubernetes menjadi lebih mudah.

Kubernetes mengelola kesehatan aplikasi, replikasi, load balancing, dan alokasi sumber daya perangkat keras untuk Anda

Salah satu tugas paling dasar yang dilakukan Kubernetes adalah kesibukan menjaga aplikasi tetap aktif, berjalan, dan responsif terhadap permintaan pengguna. Aplikasi yang menjadi "tidak sehat", atau tidak sesuai dengan definisi kesehatan yang Anda jelaskan untuknya, dapat dipulihkan secara otomatis.

Manfaat lain yang diberikan Kubernetes adalah memaksimalkan penggunaan sumber daya perangkat keras termasuk memori, I / O penyimpanan, dan bandwidth jaringan. Aplikasi dapat menetapkan batas lunak dan batas keras pada penggunaan sumber dayanya. Banyak aplikasi yang menggunakan sumber daya minimal dapat dikemas bersama pada perangkat keras yang sama; aplikasi yang perlu diperluas dapat ditempatkan pada sistem yang memiliki ruang untuk berkembang. Dan sekali lagi, meluncurkan pembaruan di seluruh kluster, atau mengembalikan jika pembaruan rusak, dapat diotomatiskan.

Kubernetes memudahkan penerapan aplikasi yang telah dikonfigurasi dengan diagram Helm

Manajer paket seperti APT Debian Linux dan Pip Python menyelamatkan pengguna dari masalah dalam menginstal dan mengkonfigurasi aplikasi secara manual. Ini sangat berguna ketika aplikasi memiliki beberapa dependensi eksternal.

Helm pada dasarnya adalah manajer paket untuk Kubernetes. Banyak aplikasi perangkat lunak populer harus dijalankan di Kubernetes sebagai sekelompok penampung yang saling bergantung. Helm menyediakan mekanisme definisi, "bagan", yang menjelaskan bagaimana aplikasi atau layanan dapat dijalankan sebagai sekelompok kontainer di dalam Kubernetes.

Anda dapat membuat diagram Helm Anda sendiri dari awal, dan Anda mungkin harus melakukannya jika membuat aplikasi khusus untuk diterapkan secara internal. Tetapi jika Anda menggunakan aplikasi populer yang memiliki pola penerapan yang sama, ada kemungkinan besar seseorang telah menyusun bagan Helm untuk itu dan menerbitkannya di repositori bagan Helm resmi. Tempat lain untuk mencari bagan Helm resmi adalah direktori Kubeapps.com.

Kubernetes menyederhanakan pengelolaan penyimpanan, rahasia, dan resource terkait aplikasi lainnya

Container dimaksudkan untuk menjadi tidak berubah; apa pun yang Anda masukkan ke dalamnya seharusnya tidak berubah. Tetapi aplikasi membutuhkan status, artinya mereka membutuhkan cara yang andal untuk menangani volume penyimpanan eksternal. Itu menjadi lebih rumit dengan cara container hidup, mati, dan dilahirkan kembali sepanjang masa aplikasi.

Kubernetes menyediakan abstraksi untuk memungkinkan container dan aplikasi menangani penyimpanan dengan cara yang sama seperti resource lainnya. Banyak jenis penyimpanan umum, dari volume Amazon EBS hingga berbagi NFS lama biasa, dapat diakses melalui driver penyimpanan Kubernetes, yang disebut volume. Biasanya, volume terikat pada pod tertentu, tetapi subtipe volume yang disebut "Persistent Volume" dapat digunakan untuk data yang perlu hidup secara independen dari pod mana pun.

Penampung sering kali perlu bekerja dengan "rahasia" —kredensial seperti kunci API atau sandi layanan yang Anda tidak ingin di-hardcode ke dalam penampung atau disimpan secara terbuka di volume disk. Sementara solusi pihak ketiga tersedia untuk ini, seperti rahasia Docker dan HashiCorp Vault, Kubernetes memiliki mekanisme sendiri untuk menangani rahasia secara native, meskipun ia perlu dikonfigurasi dengan hati-hati. Misalnya, Etcd harus dikonfigurasi untuk menggunakan SSL / TLS saat mengirim rahasia antar node, bukan dalam teks biasa. 

Aplikasi Kubernetes dapat berjalan dalam lingkungan hybrid dan multi-cloud

Salah satu impian lama komputasi awan adalah dapat menjalankan aplikasi apa pun di awan apa pun, atau di awan apa pun, publik atau pribadi. Ini tidak hanya untuk menghindari vendor lock-in, tetapi juga untuk memanfaatkan fitur-fitur khusus untuk cloud individu.

Kubernetes menyediakan satu set primitif, yang secara kolektif dikenal sebagai federasi, untuk menjaga banyak cluster tetap sinkron satu sama lain di berbagai region dan cloud. Misalnya, penerapan aplikasi tertentu dapat dipertahankan konsisten antara beberapa cluster, dan cluster yang berbeda dapat berbagi penemuan layanan sehingga sumber daya back-end dapat diakses dari cluster mana pun. Federasi juga dapat digunakan untuk membuat penerapan Kubernetes yang sangat tersedia atau toleran terhadap kesalahan, baik Anda mencakup beberapa lingkungan cloud atau tidak.

Federasi masih relatif baru di Kubernetes. Belum semua sumber daya API didukung di seluruh instance federasi, dan pemutakhiran belum memiliki infrastruktur pengujian otomatis. Tetapi kekurangan ini akan diatasi di versi Kubernetes yang akan datang.

Di mana mendapatkan Kubernetes