Mengenal Open Source Container Kubernetes yang didukung oleh IBM dalam layanan private cloudnya.  Kubernetes atau k8s adalah platform open-source berbasis Linux yang dirancang untuk mengotomatisasi penempatan, penskalaan, dan manajemen aplikasi yang berada dalam kontainer. Dengan Kubernetes, Anda dapat dengan cepat dan efisien menanggapi permintaan pelanggan.

Sam Ghods, Co-Founder and Services Architect Box, memberikan ceramah di KubeCon Seattle bahwa dengan Kubernetes, kita memiliki untuk pertama kalinya sebuah antarmuka universal yang bisa membangun tools penyebaran yang sesungguhnya. Tujuan kami adalah untuk menumbuhkan ekosistem komponen dan alat yang meringankan beban menjalankan aplikasi di public & private clouds.

Sejarah Kurbernetes

Google memulai proyek Kubernetes pada pertengahan tahun 2014. Didirikan oleh Joe Beda, Brendan Burns, dan Craig McLuckie, lalu diikuti Brian Grant dan Tim Hockin. Awalnya dirancang oleh Google dan sekarang dikelola oleh Cloud Native Computing Foundation (CNCF). CNCF adalah proyek Linux Foundation yang didirikan pada tahun 2015 untuk membantu kemajuan teknologi kontainer dan menyelaraskan industri teknologi di sekitar evolusinya. Kubernetes dibangun dari pengalaman yang dimiliki Google dengan menjalankan beban kerja produksi secara skala, dikombinasikan dengan gagasan dan praktik terbaik dari masyarakat.

Pengembangan dan desainnya sangat dipengaruhi oleh sistem Borg Google. Nama kode asli untuk Kubernetes di dalam Google adalah Project 7. Tujuh jari-jari pada roda logo Kubernetes adalah referensi untuk nama kode tersebut. Proyek Borg asli seluruhnya ditulis dalam C ++, tetapi sistem Kubernetes yang ditulis ulang diimplementasikan di Go. Kubernetes v1.0 dirilis pada 21 Juli 2015.

Pada waktu yang lalu, cara untuk menyebarkan aplikasi adalah menginstal aplikasi di host menggunakan manajemen paket sistem operasi. Kelemahan cara ini adalah karena melibatkan aplikasi executable, konfigurasi sistem, library, dan kerjasama dengan host OS. Kita memang bisa menggunakan Virtual Machine untuk mengatasinya, namun Virtual Machine cukup sulit dan berat serta tidak portabel.

Cara terbaru adalah dengan menyebarkan kontainer berdasarkan virtualisasi sistem operasi daripada virtualisasi perangkat keras.

Wadah ini diisolasi satu sama lain dan dari host. Memiliki file system sendiri, tidak dapat saling melihat proses masing-masing dan penggunaan sumber daya dapat dibatasi. Kontainer lebih mudah dibangun daripada Virtual Machine. Karena kontainer dipisahkan dari infrastruktur dan file system host maka mereka portabel di cloud dan distribusi OS.

Membentuk kontainer memungkinkan lingkungan yang konsisten yang dapat dibawa dari proses pengembangan aplikasi ke dalam produksi. Memudahkan pemantauan dan pengelolaan. Siklus proses kontainer dikelola oleh infrastruktur. Karena itu, dengan satu aplikasi per kontainer maka mengelola kontainer sama seperti mengelola aplikasi.

Kita mengenal Open Source Container Kubernetes dengan keuntungan sebagai berikut :
  1. Menerapkan pembuatan aplikasi serta proses deployment dengan cepat dan mudah.
  2. Skala aplikasi dengan cepat.
  3. Roll out fitur baru dengan mulus.
  4. Membatasi penggunaan perangkat keras hanya untuk sumber daya yang dibutuhkan.
  5. Lebih mudah menggunakan kontainer dibandingkan dengan Virtual Machine.
  6. Pengembangan, integrasi, dan penerapan aplikasi terus-menerus. Digunakan untuk melakukan proses build dan deploy yang sering dilakukan serta kemudahan mekanisme rollback karena image yang ada sifatnya immutable.
  7. Konsistensi lingkungan di seluruh pengembangan, pengujian, dan produksi. Memiliki perilaku yang sama baik ketika dijalankan di mesin lokal maupun penyedia layanan cloud.
  8. Portabilitas distribusi clouds dan OS. Berjalan di Ubuntu, RHEL, CoreOS dan Google Kubernetes Engine.
  9. Manajemen aplikasi. Menjalankan aplikasi pada OS dengan menggunakan sumber daya yang diperlukan.
  10. Aplikasi dipecah menjadi potongan yang lebih kecil dan independen dan dikelola secara dinamis.
  11. Isolasi sumber daya. Performa aplikasi yang dapat diprediksi.
  12. Pemisahan kepentingan antara Dev dan Ops. Pembuatan image container dilakukan pada saat rilis dan bukan pada saat deploy mengurangi ketergantungan aplikasi dan infrastruktur.
  13. Observabilitas. Tidak hanya informasi dan metriks pada level OS, tapi juga kesehatan aplikasi dan signal lain.
  14. Manajemen yang bersifat Aplikasi sentris. Meningkatkan level abstraksi dari proses menjalankan OS pada perangkat keras virtual ke proses menjalankan aplikasi pada sebuah OS dengan menggunakan resource logis.
Alur kerja spesifik aplikasi dapat disederhanakan untuk mempercepat kecepatan pengembang.

Kubernetes juga dirancang untuk dijadikan platform untuk membangun ekosistem komponen. Dan alat untuk memudahkan penerapan, skala, dan pengelolaan aplikasi. Kubernetes dibangun di atas API yang sama yang tersedia untuk pengembang dan pengguna. Pengguna dapat menulis pengendali sendiri, seperti penjadwal, dengan API mereka sendiri yang dapat ditargetkan.

Desain ini telah memungkinkan sejumlah sistem lain dibangun di atas Kubernetes. Kubernetes bukanlah sistem PaaS (Platform as a Service) tradisional dan tidak membatasi jenis aplikasi yang didukung. Mendukung berbagai macam beban kerja yang sangat beragam, termasuk beban kerja tanpa agen, stateful, dan pemrosesan data. Di sisi lain, sejumlah sistem PaaS berjalan di Kubernetes, seperti Openshift, Deis, dan Eldarion.

Versi dan tanggal peluncuran

1.0           10 Juli 2015

1.1           9 November 2015

1.2           16 Maret 2016

1.3           1 Juli 2016

1.4            26 September 2016

1.5            12 Desember 2016

1.6            28 Maret 2017

1.7            30 Juni 2017

1.8            28 Agustus 2017

1.9            15 Desember 2017

1.10           28 Maret 2018

1.11           3 Juli 2018

1.12           27 September 2018

1.13           3 Desember 2018

1.14            25 Maret 2019

1.15            20 Juni 2019

1.16            22 Oktober 2019

1.17            9 Desember 2019

1.18            25 Maret 2020

1.19            26 Agustus 2020

1.19.3         14 Oktober 2020

1.20            8 Desember 2020

Konsep Kubernetes

Kubernetes mendefinisikan sekumpulan blok penyusun (primitives), yang secara kolektif menyediakan mekanisme yang menerapkan, memelihara, dan menskalakan aplikasi berdasarkan CPU, memori, atau metrik khusus. Kubernetes digabungkan dan dapat diperluas untuk memenuhi beban kerja yang berbeda. Ekstensibilitas ini sebagian besar disediakan oleh Kubernetes API, serta ekstensi dan container yang berjalan di Kubernetes. 

Kita mengenal Open Source Container Kubernetes mengikuti arsitektur primer / replika . Komponen Kubernetes dapat dibagi menjadi yang mengelola node individu dan yang merupakan bagian dari bidang kontrol. Master Kubernetes adalah unit pengendali utama dari cluster, mengelola beban kerjanya dan mengarahkan komunikasi ke seluruh sistem.

Berbagai komponen bidang kontrol Kubernetes
ETCD

ETCD adalah penyimpanan data nilai-kunci persisten, ringan, terdistribusi yang dikembangkan oleh CoreOS yang dapat diandalkan menyimpan data konfigurasi cluster, mewakili status keseluruhan cluster pada titik waktu tertentu. Sama seperti Apache ZooKeeper , etcd adalah sistem yang mengutamakan konsistensi daripada ketersediaan jika terjadi partisi jaringan.

Konsistensi ini penting untuk penjadwalan dan pengoperasian layanan yang benar. Server API Kubernetes menggunakan watch API etcd untuk memantau cluster dan meluncurkan perubahan konfigurasi penting. Atau hanya memulihkan setiap divergensi dari status cluster kembali ke apa yang dideklarasikan oleh penyebar. Sebagai contoh, jika penyebar menentukan bahwa tiga instance pod tertentu perlu dijalankan, fakta ini disimpan di etcd. Jika ditemukan bahwa hanya dua instance yang berjalan, delta ini akan dideteksi dengan membandingkan dengan data etcd. Dan Kubernetes akan menggunakannya untuk menjadwalkan pembuatan instance tambahan dari pod tersebut.

Server API

Server API adalah komponen kunci dan menyajikan API Kubernetes menggunakan JSON melalui HTTP, yang menyediakan antarmuka internal dan eksternal ke Kubernetes. Jadi Server API memproses dan memvalidasi permintaan REST dan memperbarui status objek API di etcd, sehingga memungkinkan klien untuk mengkonfigurasi beban kerja dan kontainer di seluruh node Pekerja.

Penjadual (Scheduler)

Penjadual adalah komponen yang dapat dicolokkan yang memilih node mana yang menjalankan pod tak terjadual (entitas dasar yang dikelola oleh penjadual), berdasarkan ketersediaan sumber daya. Jadi Penjadual melacak penggunaan sumber daya pada setiap node untuk memastikan bahwa beban kerja tidak dijadualkan melebihi sumber daya yang tersedia. Untuk tujuan ini, penjadual harus mengetahui persyaratan sumber daya, ketersediaan sumber daya, dan batasan lain yang disediakan pengguna serta arahan kebijakan. Seperti kualitas layanan, persyaratan afinitas / anti-afinitas, lokalitas data, dan sebagainya. Intinya, peran penjadual adalah untuk mencocokkan sumber daya “pasokan” dengan beban kerja “permintaan”.

Manajer pengontrol (Controller manager)

Pengontrol adalah loop rekonsiliasi yang mendorong status cluster aktual menuju status cluster yang diinginkan, berkomunikasi dengan server API untuk membuat, memperbarui, dan menghapus sumber daya yang dikelolanya (pod, titik akhir layanan, dll). Manajer pengontrol adalah proses yang mengelola sekumpulan pengontrol inti Kubernetes. Satu jenis pengontrol adalah Pengontrol Replikasi, yang menangani replikasi dan penskalaan dengan menjalankan sejumlah salinan tertentu dari sebuah pod di seluruh kluster.

Ini juga menangani pembuatan pod pengganti jika node yang mendasarinya gagal. Pengontrol lain yang merupakan bagian dari sistem inti Kubernetes mencakup Pengontrol DaemonSet untuk menjalankan tepat satu pod pada setiap mesin (atau beberapa subset mesin). Dan Pengontrol Pekerjaan untuk menjalankan pod yang berjalan hingga selesai, misalnya sebagai bagian dari pekerjaan batch. Himpunan pod yang dikelola oleh pengontrol ditentukan oleh pemilih label yang merupakan bagian dari definisi pengontrol.

Pod

Kita mengenal Open Source Container Kubernetes bahwa unit penjadualan dasarnya adalah sebuah pod . Pod adalah pengelompokan komponen dalam container. Sebuah pod terdiri dari satu atau beberapa container yang dijamin ditempatkan bersama di node yang sama.Pod  dalam cluster Kubernetes digunakan dengan 2 cara utama:

  1. Pod yang menjalankan satu container . Model “one-container-per-Pod” adalah kasus penggunaan Kubernetes yang paling umum. Dalam hal ini, Anda dapat menganggap Pod sebagai pembungkus di sekitar satu container. Kubernetes mengelola Pod dengan mengelola container secara langsung.
  2. Pod yang menjalankan banyak container yang perlu bekerja sama. Sebuah Pod dapat merangkum aplikasi yang terdiri dari beberapa container yang ditempatkan bersama yang sangat erat dan perlu berbagi resource. Kontainer ini membentuk sebuah unit kohesif tunggal layanan. Misalnya, satu kontainer melayani data yang disimpan dalam volume bersama untuk umum, sementara yang lainnya refresh container atau update file. Pod menggabungkan container, resource penyimpanan, dan identitas jaringan sementara ini menjadi satu kesatuan.
Setiap pod di Kubernetes diberi alamat IP unik di dalam cluster, yang memungkinkan aplikasi menggunakan port tanpa risiko konflik.

Di dalam pod, semua container dapat mereferensikan satu sama lain di localhost. Tetapi container dalam satu pod tidak memiliki cara untuk menangani secara langsung container lain di dalam pod lain; untuk itu harus menggunakan Alamat IP Pod. Pengembang aplikasi tidak boleh menggunakan Alamat IP Pod untuk mereferensikan / memanggil kapabilitas di pod lain. Karena alamat IP Pod bersifat sementara – pod spesifik yang dirujuknya dapat ditetapkan ke alamat IP Pod lain saat dimulai ulang. Sebagai gantinya, mereka harus menggunakan referensi ke Layanan , yang menyimpan referensi ke pod target di Alamat IP Pod tertentu.

Pod dapat menentukan volume, seperti direktori disk lokal atau disk jaringan, dan mengeksposnya ke container di dalam pod. Pod dapat dikelola secara manual melalui Kubernetes API atau pengelolaannya dapat didelegasikan ke sebuah pengontrol. Volume tersebut juga menjadi dasar untuk fitur Kubernetes ConfigMaps (untuk menyediakan akses ke konfigurasi melalui sistem file yang terlihat oleh penampung). Dan Secrets (untuk memberikan akses ke kredensial yang diperlukan untuk mengakses sumber daya jarak jauh secara aman, dengan memberikan kredensial tersebut di file system hanya terlihat oleh container yang diijinkan).

Hal yang tidak termasuk Kubernetes
  1. Tidak melakukan limitasi terhadap aplikasi yang di-support. Kubernetes bertujuan untuk mendukung berbagai variasi workloads, termasuk stateless, stateful, dan data-processing. Jika sebuah aplikasi dapat dijalankan di atas kontainer, maka dapat dijalankan di atas Kubernetes.
  2. Tidak menyediakan mekanisme untuk melakukan deploy kode sumber maupun mekanisme build sebuah aplikasi. Continuous Integration, Delivery, and Deployment (CI/CD) workflows ditentukan oleh preferensi serta kebutuhan teknis organisasi.
  3. Tidak menyediakan application-level services, seperti middleware, data-processing frameworks (misalnya Spark), databases (misalnya mysql), caches, maupun cluster storage systems (misalnya Ceph) sebagai suatu built-in services. Komponen dapat diakses melalui sebuah mekanisme Open Service Broker.
  4. Tidak membatasi penyedia layanan logging, monitoring, maupun alerting yang digunakan. Kubernetes menyediakan proof of concept dan mekanisme integrasi.
  5. Tidak menyediakan atau mengharuskan penggunaan configuration language / system (misalnya jsonnet). Kubernetes menyediakan suatu API deklaratif yang dapat digunakan oleh berbagai jenis spesifikasi deklaratif.
  6. Tidak menyediakan atau mengadaptasi sebuah konfigurasi, maintenance, manajemen, atau self-healing mesin dengan spesifikasi khusus.
Sebagai tambahan, Kubernetes bukanlah sebuah sistem orkestrasi biasa.

Kita mengenal Open Source Container menghilangkan kebutuhan untuk melakukan orkestrasi. Definisi teknis dari orkestrasi merupakan eksekusi dari sebuah workflow yang sudah didefinisikan sebelumnya: pertama kerjakan A, kemudian B, dan terakhir C. Sebaliknya, Kubernetes disusun oleh seperangkat proses kontrol yang dapat idekomposisi yang selalu menjalankan state yang ada saat ini hingga sesuai dengan state yang diinginkan. Kita tidak perlu peduli proses apa saja yang perlu dilakukan untuk melakukan A hingga C. Mekanisme kontrol yang tersentralisasi juga tidak dibutuhkan. Dengan demikian, sistem yang dihasilkan lebih mudah digunakan lebih kokoh, serta lebih extensible.

Toko Resmi Terabit Komputer

Klik link ini untuk gabung dengan grup Telegram Terabit Komputer

Klik link ini untuk gabung dengan grup Whatsapp Terabit Komputer

(Saat awal bergabung, wajib memperkenalkan diri Anda)

Silahkan chat