Kubernetes
Kubernetes adalah platform orkestrasi kontainer sumber terbuka yang mengotomatiskan penerapan, pengelolaan, dan penskalaan aplikasi dalam kontainer.
Mengoptimalkan lingkungan Kubernetes Anda Berlangganan Buletin IBM
Latar belakang hitam dan biru
Apa itu Kubernetes?

Kubernetes — juga dikenal sebagai "k8s" atau "kube" — merupakan platform orkestrasi kontainer untuk menjadwalkan dan mengotomatisasi penerapan, pengelolaan, dan penskalaan aplikasi dalam kontainer.

Kubernetes pertama kali dikembangkan oleh para insinyur di Google sebelum menjadi sumber terbuka pada tahun 2014. Kube adalah keturunan dari Borg, sebuah platform orkestrasi kontainer yang digunakan secara internal di Google. Kubernetes berasal dari bahasa Yunani yang berarti  pengemudi atau pilot, karena itu ada gambar helm dalam logo Kubernetes (tautan berada di luar ibm.com).

Saat ini, Kubernetes dan ekosistem kontainer yang lebih luas semakin matang menjadi platform dan ekosistem komputasi serba guna yang menyaingi — atau bahkan melampaui — mesin virtual (VM) sebagai blok bangunan dasar infrastruktur dan aplikasi cloud modern. Ekosistem ini memungkinkan organisasi untuk menghadirkan Platform-as-a-Service (PaaS) dengan produktivitas tinggi yang menangani berbagai tugas dan masalah yang terkait dengan infrastruktur dan operasi seputar pengembangan cloud native sehingga tim pengembangan dapat fokus hanya pada pengodean dan inovasi.     

Video berikut ini memberikan pengenalan yang bagus untuk dasar-dasar Kubernetes:

Mengotomatiskan elastisitas kontainer yang didorong aplikasi

Untuk insinyur platform dan DevOps yang ingin mengoperasionalkan kecepatan ke pasar sambil memastikan kinerja aplikasi.

Apa yang dimaksud dengan kontainer?

Kontainer adalah komponen aplikasi ringan yang dapat dieksekusi yang menggabungkan kode sumber aplikasi dengan semua pustaka sistem operasi (OS) dan ketergantungan yang diperlukan untuk menjalankan kode di lingkungan apa pun.

Kontainer memanfaatkan bentuk virtualisasi sistem operasi (OS) yang memungkinkan beberapa aplikasi berbagi satu contoh OS dengan mengisolasi proses dan mengontrol jumlah CPU, memori, dan disk yang dapat diakses oleh proses tersebut. Karena lebih kecil, lebih hemat sumber daya, dan lebih portabel daripada mesin virtual (VM), kontainer telah menjadi unit komputasi de facto dari aplikasi cloud-native modern. 

Dalam studi IBM baru-baru ini, pengguna melaporkan beberapa manfaat teknis dan bisnis spesifik yang dihasilkan dari adopsi kontainer dan teknologi terkait. 

Kontainer vs. mesin virtual vs. infrastruktur tradisional

Mungkin lebih mudah atau lebih membantu untuk memahami kontainer sebagai poin terbaru pada kontinum otomatisasi dan abstraksi infrastruktur TI.

Dalam infrastruktur tradisional, aplikasi berjalan di server fisik dan mengambil semua sumber daya yang bisa mereka dapatkan. Solusi ini memberi Anda pilihan untuk menjalankan beberapa aplikasi pada satu server dan berharap seseorang tidak memiliki sumber daya dengan mengorbankan yang lain atau mendedikasikan satu server per aplikasi, yang membuang-buang sumber daya dan tidak berskala.

Mesin virtual (VM) adalah server yang disarikan dari perangkat keras komputer yang sebenarnya, sehingga Anda dapat menjalankan beberapa VM pada satu server fisik atau satu VM yang menjangkau lebih dari satu server fisik. Setiap VM menjalankan instans OS-nya sendiri, dan Anda dapat mengisolasi setiap aplikasi dalam VM-nya sendiri, sehingga mengurangi kemungkinan aplikasi yang berjalan pada perangkat keras fisik yang sama akan saling memengaruhi. VM memanfaatkan sumber daya dengan lebih baik dan jauh lebih mudah serta lebih hemat biaya untuk diskalakan daripada infrastruktur tradisional. Dan, VM dapat dibuang — ketika Anda tidak perlu lagi menjalankan aplikasi, Anda menghapus VM.

Untuk informasi lebih lanjut tentang VM, lihat "Apa itu mesin virtual?"

Kontainer membawa abstraksi ini ke tingkat yang lebih tinggi—khususnya, selain berbagi perangkat keras tervirtualisasi yang mendasarinya, mereka juga berbagi kernel OS tervirtualisasi yang mendasarinya. Kontainer menawarkan isolasi, skalabilitas, dan disposabilitas yang sama dengan VM, tetapi karena kontainer tidak membawa muatan instans OS sendiri, maka bobotnya lebih ringan (artinya, tidak membutuhkan banyak ruang) daripada VM. Mereka lebih hemat sumber daya—mereka memungkinkan Anda menjalankan lebih banyak aplikasi pada lebih sedikit mesin (virtual dan fisik), dengan lebih sedikit instans OS. Kontainer lebih mudah dibawa-bawa di lingkungan desktop, pusat data, dan cloud. Dan mereka sangat cocok untuk praktik pengembangan Agile dan DevOps.

"Apa itu kontainer?" memberikan penjelasan lengkap tentang kontainer dan kontainerisasi. Dan postingan blog "Kontainer vs VM: Apa bedanya?" memberikan ikhtisar lengkap tentang perbedaannya.

Apa itu Docker?

Docker adalah alat yang paling populer untuk membuat dan menjalankan kontainer Linux®. Sementara bentuk awal kontainer diperkenalkan beberapa dekade lalu (dengan teknologi seperti FreeBSD Jails dan AIX Workload Partitions), kontainer didemokratisasi pada tahun 2013 ketika Docker membawanya ke masyarakat dengan implementasi baru yang ramah pengembang dan ramah cloud.

Docker dimulai sebagai proyek sumber terbuka, tetapi saat ini juga merujuk pada Docker Inc., perusahaan yang memproduksi Docker—sebuah toolkit kontainer komersial yang dibangun di atas proyek sumber terbuka (dan menyumbangkan peningkatannya kembali ke komunitas sumber terbuka).

Docker dibangun di atas teknologi kontainer Linux tradisional (LXC), tetapi memungkinkan virtualisasi yang lebih terperinci dari proses kernel Linux dan menambahkan fitur-fitur untuk membuat kontainer lebih mudah dibangun, diterapkan, dikelola, dan diamankan oleh para pengembang.

Sementara platform kontainer alternatif yang ada saat ini (seperti Open Container Initiative (OCI), CoreOS, dan Canonical (Ubuntu) LXD), Docker sangat disukai sehingga hampir identik dengan kontainer dan kadang-kadang disalahartikan sebagai pesaing untuk teknologi yang saling melengkapi seperti Kubernetes (lihat video "Kubernetes vs, Docker: Ini Bukan Pertanyaan Baik atau Tidak" di bawah ini).

Orkestrasi kontainer dengan Kubernetes

Seiring dengan berkembangnya kontainer — saat ini, sebuah organisasi mungkin memiliki ratusan atau ribuan kontainer — tim operasi perlu menjadwalkan dan mengotomatisasi penerapan, jaringan, skalabilitas, dan ketersediaan kontainer. Maka lahirlah pasar orkestrasi kontainer.

Sementara opsi orkestrasi kontainer lainnya — terutama Docker Swarm dan Apache Mesos — mendapatkan daya tarik sejak awal, Kubernetes dengan cepat menjadi yang paling banyak diadopsi (pada kenyataannya, pada satu titik, ini merupakan proyek dengan pertumbuhan tercepat dalam sejarah peranti lunak sumber terbuka).

Para pengembang memilih dan terus memilih Kubernetes karena fungsinya yang luas, ekosistem alat pendukung sumber terbuka yang luas dan terus berkembang, serta dukungan dan portabilitasnya di seluruh penyedia layanan cloud. Semua penyedia cloud publik terkemuka — termasuk Amazon Web Services (AWS), Google Cloud, IBM Cloud, dan Microsoft Azure — menawarkan layanan Kubernetes yang dikelola sepenuhnya.

Apa yang dilakukan Kubernetes?

Kubernetes menjadwalkan dan mengotomatisasi tugas-tugas yang terkait dengan kontainer di seluruh siklus hidup aplikasi, termasuk:

  • Penerapan: Menerapkan sejumlah kontainer tertentu ke host tertentu dan menjaganya agar tetap berjalan dalam kondisi yang diinginkan.

  • Peluncuran: Peluncuran adalah perubahan terhadap penerapan.Kubernetes memungkinkan Anda memulai, menjeda, melanjutkan, atau memutar kembali peluncuran.

  • Penemuan layanan: Kubernetes dapat secara otomatis mengekspos kontainer ke internet atau ke kontainer lain menggunakan nama DNS atau alamat IP.

  • Penyediaan penyimpanan: Atur Kubernetes untuk memasang penyimpanan lokal atau cloud yang persisten untuk kontainer Anda sesuai kebutuhan.

  • Penyeimbangan beban: Berdasarkan pemanfaatan CPU atau metrik khusus, penyeimbangan beban Kubernetes dapat mendistribusikan beban kerja di seluruh jaringan untuk menjaga kinerja dan stabilitas. 

  • Penskalaan otomatis: Saat lalu lintas melonjak, Kubernetes penskalaan otomatis dapat membuat klaster baru sesuai kebutuhan untuk menangani beban kerja tambahan.

  • Penyembuhan mandiri untuk ketersediaan tinggi: Saat kontainer gagal, Kubernetes dapat memulai ulang atau menggantinya secara otomatis untuk mencegah waktu henti. Kubernetes juga dapat menurunkan kontainer yang tidak memenuhi persyaratan pemeriksaan kesehatan Anda.

Kubernetes vs. Docker

Jika Anda sudah membaca sejauh ini, Anda sudah memahami bahwa meskipun Kubernetes adalah alternatif dari Docker Swarm, bukan sebuah  (berlawanan dengan kesalahpahaman populer yang masih ada) alternatif atau pesaing dari Docker itu sendiri.

Faktanya, jika Anda telah mengadopsi Docker dengan antusias dan membuat penerapan kontainer berbasis Docker berskala besar, orkestrasi Kubernetes merupakan langkah logis selanjutnya untuk mengelola beban kerja ini.

Untuk mempelajari lebih lanjut, tonton “Kubernetes vs. Docker: Ini Bukan Pertanyaan Ya atau Tidak”:

Arsitektur Kubernetes

Komponen utama arsitektur Kubernetes meliputi yang berikut ini:

Klaster dan node (menghitung)

Klaster adalah blok bangunan arsitektur Kubernetes. Klaster terdiri atas node, yang masing-masing mewakili satu  host  komputasi (mesin virtual atau fisik).

Setiap klaster terdiri atas node master yang berfungsi sebagai rencana kontrol untuk klaster, dan beberapa node pekerja yang menerapkan, menjalankan, dan mengelola aplikasi dalam kontainer . Node master menjalankan layanan penjadwal yang mengotomatisasi kapan dan di mana kontainer disebarkan berdasarkan persyaratan penerapan yang ditetapkan pengembang dan kapasitas komputasi yang tersedia. Setiap node pekerja menyertakan alat yang digunakan untuk mengelola kontainer — seperti Docker — dan agen peranti lunak yang disebut Kubelet yang menerima dan mengeksekusi perintah dari node master.

Pengembang mengelola operasi klaster menggunakan kubectl, sebuah antarmuka baris perintah (cli) yang berkomunikasi langsung dengan  API  Kubernetes. 

Untuk mempelajari lebih dalam tentang klaster Kubernetes, baca: "Klaster Kubernetes: Arsitektur untuk Penyediaan Aplikasi Cloud yang Cepat dan Terkendali."

Pod dan penerapannya (peranti lunak)

Pod adalah kelompok kontainer yang berbagi sumber daya komputasi dan jaringan yang sama. Mereka juga merupakan unit skalabilitas di Kubernetes: jika kontainer dalam pod mendapatkan lalu lintas yang lebih banyak daripada yang dapat ditanganinya, Kubernetes akan mereplikasi pod tersebut ke node lain dalam klaster. Karena alasan ini, merupakan praktik yang baik untuk menjaga agar pod tetap ringkas sehingga hanya berisi kontainer yang harus berbagi sumber daya.

Penerapan mengontrol pembuatan dan status aplikasi yang terkontainerisasi dan menjaganya tetap berjalan. Solusi ini menentukan berapa banyak replika pod yang harus dijalankan pada klaster. Jika sebuah pod gagal, penerapan akan membuat pod baru.

Untuk informasi lebih lanjut tentang penerapan Kubernetes, lihat “Penerapan Kubernetes: Memulai dengan Cepat”:

Jaring layanan Istio

Kubernetes dapat menerapkan dan menskalakan pod, tetapi tidak dapat mengelola atau mengotomatisasi perutean di antara mereka dan tidak menyediakan alat apa pun untuk memantau, mengamankan, atau men-debug koneksi-koneksi ini. Seiring dengan bertambahnya jumlah kontainer dalam sebuah klaster, jumlah kemungkinan jalur koneksi di antara mereka meningkat secara eksponensial (misalnya, dua kontainer memiliki dua koneksi potensial, tetapi 10 pod memiliki 90 koneksi), sehingga menciptakan mimpi buruk konfigurasi dan manajemen.

Masukkan Istio, lapisan mesh layanan sumber terbuka untuk klaster Kubernetes. Untuk setiap klaster Kubernetes, Istio menambahkan kontainer sidecar — pada dasarnya tidak terlihat oleh programmer dan administrator — yang mengonfigurasi, memantau, dan mengelola interaksi antara kontainer lainnya.

Dengan Istio, Anda menetapkan kebijakan tunggal yang mengonfigurasi koneksi antar kontainer sehingga Anda tidak perlu mengonfigurasi setiap koneksi satu per satu. Hal ini membuat koneksi antar kontainer lebih mudah di-debug.

Istio juga menyediakan dasbor yang dapat digunakan oleh tim DevOps dan administrator untuk memantau latensi, kesalahan masa layanan, dan karakteristik lain dari koneksi antar kontainer. Dan, solusi ini membangun keamanan — khususnya, manajemen identitas yang mencegah pengguna yang tidak sah memalsukan  panggilan layanan di antara kontainer — dan kemampuan autentikasi, otorisasi, dan audit (AAA) yang bisa digunakan para profesional keamanan untuk memantau klaster.

Baca lebih lanjut tentang Istio
Komputasi knative dan tanpa server

Knative (diucapkan 'kay-native') adalah platform sumber terbuka yang berada di atas Kubernetes dan menyediakan dua kelas manfaat penting untuk pengembangan cloud native:

Knative menyediakan jalan mudah menuju komputasi tanpa server

Komputasi tanpa server adalah cara yang relatif baru untuk menerapkan kode yang membuat aplikasi cloud native lebih efisien dan hemat biaya. Alih-alih menerapkan instans kode berkelanjutan yang diam sambil menunggu permintaan, tanpa server menampilkan kode sesuai kebutuhan — menaikkan atau menurunkannya saat permintaan berfluktuasi — lalu menghapus kode saat tidak digunakan. Tanpa server mencegah kapasitas dan daya komputasi yang terbuang dan mengurangi biaya karena Anda hanya membayar untuk menjalankan kode saat benar-benar berjalan.

Knative memungkinkan para pengembang untuk membangun sebuah kontainer sekali dan menjalankannya sebagai sebuah layanan peranti lunak atau sebagai sebuah fungsi tanpa server. Semuanya transparan bagi pengembang: Knative menangani detail di latar belakang, dan pengembang bisa fokus pada kode.

Knative menyederhanakan pengembangan dan orkestrasi kontainer

Bagi pengembang, mengontainerisasi kode memerlukan banyak langkah berulang, dan mengatur kontainer memerlukan banyak konfigurasi dan skrip (seperti membuat file konfigurasi, menginstal dependensi, mengelola pencatatan dan penelusuran, serta menulis skrip integrasi berkelanjutan/penerapan berkelanjutan (CI/CD).)

Knative membuat tugas-tugas ini lebih mudah dengan mengotomatisasi melalui tiga komponen:

Membangun: Komponen Build dari Knative secara otomatis mengubah kode sumber menjadi kontainer atau fungsi cloud native. Secara khusus, ini menarik kode dari repositori, menginstal dependensi yang diperlukan, membangun citra kontainer, dan meletakkannya di container registry untuk digunakan oleh pengembang lain. Pengembang perlu menentukan lokasi komponen-komponen ini agar Knative dapat menemukannya, tetapi setelah itu selesai, Knative mengotomatisasi pembuatannya.

Serve: Komponen Serve menjalankan kontainer sebagai layanan yang dapat diskalakan; Ini dapat meningkatkan hingga ribuan instans kontainer atau menurunkan skala ke tidak ada (disebut penskalaan ke nol). Selain itu, Serve memiliki dua fitur yang sangat berguna: konfigurasi, yang menyimpan versi kontainer (disebut snapshot) setiap kali Anda mendorong kontainer ke produksi dan memungkinkan Anda menjalankan versi tersebut secara bersamaan; dan perutean layanan, yang memungkinkan Anda mengarahkan jumlah lalu lintas yang berbeda ke versi ini. Anda dapat menggunakan fitur ini bersama-sama untuk secara bertahap melakukan fase peluncuran kontainer atau melakukan pengujian canary aplikasi kontainer sebelum memasukkannya ke dalam produksi global.

Peristiwa: Peristiwa memungkinkan peristiwa tertentu untuk memicu layanan atau fungsi berbasis kontainer. Hal ini sangat penting bagi kemampuan Knative yang tanpa server; ada sesuatu yang perlu diberitahukan kepada sistem untuk memunculkan sebuah fungsi saat dibutuhkan. Event memungkinkan tim untuk mengekspresikan ketertarikan pada jenis-jenis acara, dan kemudian secara otomatis terhubung ke produser acara dan merutekan acara ke kontainer, sehingga tidak perlu memprogram koneksi ini.

Pelajari lebih lanjut tentang Knative
Komit GitHub Kubernetes dan lebih banyak bukti popularitas yang melonjak

Kubernetes adalah salah satu proyek sumber terbuka dengan pertumbuhan tercepat dalam sejarah, dan pertumbuhannya semakin cepat. Adopsi terus melambung di kalangan pengembang dan perusahaan yang mempekerjakan mereka. Beberapa poin data yang perlu diperhatikan:

  • Pada tulisan ini, lebih dari 120.190 komitmen telah dibuat ke repositori Kubernetes di GitHub (tautan berada di luar ibm.com) — peningkatan hampir 34.000 komitmen dalam 18 bulan terakhir — dan ada lebih dari 3.100 kontributor aktif untuk proyek ini. Menurut Cloud Native Computing Foundation (CNCF) ada lebih dari 148.000 komit di seluruh repositori yang terkait dengan Kubernetes (termasuk Kubernetes Dashboard dan Kubernetes MiniKube). Anda dapat membaca semua statistik di sini (tautan berada di luar ibm.com).

  • Lebih dari 2.000 perusahaan menggunakan Kubernetes dalam tumpukan peranti lunak produksi mereka. Hal ini termasuk perusahaan terkenal di dunia seperti AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder, dan tentu saja IBM. Baca studi kasus ini dan studi kasus adopsi lainnya (tautan berada di luar ibm.com)

  • Sebuah  survei tahun 2021 yang dikutip dalam Container Journal (tautan berada di luar ibm.com) menemukan bahwa 68% profesional TI meningkatkan penggunaan Kubernetes selama pandemi COVID 19.

  • Menurut ZipRecruiter (tautan berada di luar ibm.com), gaji tahunan rata-rata (di Amerika Utara) untuk pekerjaan yang berhubungan dengan Kubernetes adalah USD 147.732. Pada saat artikel ini ditulis, saat ini terdapat lebih dari 57.000 posisi terkait Kubernetes yang terdaftar di LinkedIn (tautan berada di luar ibm.com), dibandingkan dengan 21.000 posisi yang terdaftar 18 bulan yang lalu.
Solusi terkait
Red Hat OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud menawarkan cara yang cepat dan aman bagi para pengembang untuk mengkontainerisasi dan menerapkan beban kerja perusahaan dalam klaster Kubernetes.

Jelajahi Red Hat OpenShift
IBM Cloud Satellite

Menerapkan dan menjalankan aplikasi secara konsisten di lingkungan cloud on premises, komputasi edge, dan cloud publik dari vendor cloud mana pun, menggunakan serangkaian layanan cloud yang umum termasuk rantai alat bantu, basis data, dan AI.

Jelajahi Solusi IBM Cloud Satellite
IBM Cloud Code Engine

Platform tanpa server yang dikelola sepenuhnya, IBM Cloud Code Engine memungkinkan Anda menjalankan kontainer, kode aplikasi, atau pekerjaan batch pada runtime kontainer yang dikelola sepenuhnya.

Jelajahi Code Engine
Sumber daya Kontainer di perusahaan

Penelitian terbaru IBM mendokumentasikan momentum lonjakan adopsi kontainer dan Kubernetes.

TI yang fleksibel, tangguh, dan aman untuk Hybrid Cloud Anda

Kontainer adalah bagian dari strategi hybrid cloud yang memungkinkan Anda membangun dan mengelola beban kerja dari mana saja.

Apa yang dimaksud dengan serverless?

Serverless adalah model pengembangan dan eksekusi aplikasi cloud yang memungkinkan pengembang membangun dan menjalankan kode tanpa mengelola server atau membayar infrastruktur cloud yang tidak aktif.

Dasar-dasar YAML di Kubernetes

Jelajahi contoh bagaimana berkas YAML digunakan di Kubernetes.

Ambil langkah selanjutnya

Red Hat OpenShift on IBM Cloud menawarkan cara yang cepat dan aman bagi para pengembang untuk mengontainerisasi dan menerapkan beban kerja perusahaan dalam klaster Kubernetes. Menerapkan kluster Kubernetes yang sangat tersedia dan terkelola penuh untuk aplikasi terkontainerisasi Anda dengan satu klik. Karena IBM mengelola OpenShift Container Platform (OCP), Anda akan memiliki lebih banyak waktu untuk fokus pada tugas-tugas inti Anda.

Jelajahi Red Hat OpenShift on IBM Cloud