---
title: Apa itu Kubernetes?
content_type: concept
weight: 10
description: >
Kubernetes merupakan _platform open-source_ yang digunakan untuk melakukan
manajemen _workloads_ aplikasi yang dikontainerisasi, serta menyediakan
konfigurasi dan otomatisasi secara deklaratif. Kubernetes berada di dalam ekosistem
yang besar dan berkembang cepat. _Service_, _support_, dan perkakas
Kubernetes tersedia secara meluas. Kubernetes merupakan _platform open-source_
yang digunakan untuk melakukan manajemen _workloads_ aplikasi yang dikontainerisasi,
serta menyediakan konfigurasi dan otomatisasi secara deklaratif. Kubernetes berada
di dalam ekosistem yang besar dan berkembang cepat. _Service_, _support_,
dan perkakas Kubernetes tersedia secara meluas.
card:
name: concepts
weight: 10
---
Laman ini merupakan ikhtisar Kubernetes.
Kubernetes merupakan platform open-source yang digunakan untuk melakukan
manajemen workloads aplikasi yang dikontainerisasi, serta menyediakan
konfigurasi dan otomatisasi secara deklaratif. Kubernetes berada di dalam ekosistem
yang besar dan berkembang cepat. Service, support, dan perkakas
Kubernetes tersedia secara meluas.
Google membuka Kubernetes sebagai proyek open source pada tahun 2014.
Kubernetes dibangun berdasarkan [pengalaman Google selama satu setengah dekade dalam menjalankan workloads](https://research.google.com/pubs/pub43438.html)
bersamaan dengan kontribusi berupa ide-ide terbaik yang diberikan oleh komunitas.
## Mengapa Kubernetes dan hal apa saja yang dapat dilakukan oleh Kubernetes?
Kubernetes memiliki sejumlah fitur yang dapat dijabarkan sebagai berikut:
- platform kontainer
- platform microservices
- platform cloud yang tidak mudah dipindahkan
Kubernetes menyediakan manajemen environment yang berpusat pada kontainer.
Kubernetes melakukan orkestrasi terhadap computing, networking,
dan inftrastruktur penyimpanan. Fitur inilah yang kemudian membuat konsep Platform as a Service (PaaS)
menjadi lebih sederhana dilengkapi dengan fleksibilitas yang dimiliki oleh Infrastructure as a Service (IaaS).
## Lalu apa yang menyebabkan Kubernetes disebut sebagai sebuah platform?
Meskipun Kubernetes menyediakan banyak fungsionalitas, selalu ada keadaan dimana
hal tersebut membutuhkan fitur baru. Workflow spesifik yang terkait dengan
proses pengembangan aplikasi dapat ditambahkan pada streamline untuk meningkatkan
produktivitas developer. Orkestrasi ad-hoc yang dapat diterima biasanya membutuhkan desain
otomatisasi yang kokoh agar bersifat scalable. Hal inilah yang membuat
Kubernetes juga didesain sebagai platform untuk membangun ekosistem komponen dan
dan perkakas untuk memudahkan proses deployment, scale, dan juga manajemen
aplikasi.
[Labels]() memudahkan pengguna mengkategorisasikan resources yang mereka miliki
sesuai dengan kebutuhan. [Annotations]() memungkinkan pengguna untuk menambahkan informasi
tambahan pada resource yang dimiliki.
Selain itu, [Kubernetes control plane]() dibuat berdasarkan
[API](/docs/reference/using-api/api-overview/) yang tersedia bagi pengguna dan developer. Pengguna
dapat mengimplementasikan kontroler sesuai dengan kebutuhan mereka, contohnya adalah
[schedulers](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/scheduler.md),
dengan [API kustom yang mereka miliki](), kontroler kustom ini kemudian dapat digunakan
pada [command-line
tool]() generik yang ada.
[Desain](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md)
inilah yang memungkinkan beberapa sistem lain untuk dapat dibangun di atas Kubernetes.
## Lalu hal apakah yang tidak termasuk di dalam Kubernetes?
Kubernetes bukanlah sebuah PaaS (Platform as a
Service) yang biasanya. Meskipun Kubernetes dijalankan pada tingkatan kontainer
dan bukan pada tingkatan perangkat keras, Kubernetes menyediakan beberapa fitur
yang biasanya disediakan oleh Paas, seperti deployment, scaling,
load balancing, logging, dan monitoring. Akan tetapi,
Kubernetes bukanlah sistem monolitik, melainkan suatu sistem yang bersifat sebagai
bulding block dan pluggable yang dapat digunakan untuk membangun sebuah
platform yang dibutuhkan oleh developer dengan tetap mengutamakan konsep fleksibilitas.
Kubernetes:
* 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 aplikasi tersebut juga dapat
dijalankan di atas Kubernetes.
* 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.
* Tidak menyediakan application-level services, seperti middleware
(e.g., message buses), data-processing frameworks (for example,
Spark), databases (e.g., mysql), caches, maupun cluster storage systems (e.g.,
Ceph) sebagai suatu built-in services. Komponen tersebut dapat dijalankan di atas Kubernetes, dan/atau
dapat diakses oleh aplikasi yang dijalankan di atas Kubernetes melalui sebuah mekanisme tidak mudah dipindahkan
misalnya saja Open Service Broker.
* Tidak membatasi penyedia layanan logging, monitoring, maupun alerting yang digunakan.
Kubernetes menyediakan proof of concept dan mekanisme integrasi yang dapat digunakan
untuk mengumpulkan serta mengekspor metriks yang ada.
* Tidak menyediakan atau mengharuskan penggunaan configuration language/system (e.g.,
[jsonnet](https://github.com/google/jsonnet)). Kubernetes menyediakan suatu API deklaratif
yang dapat digunakan oleh berbagai jenis spesifikasi deklaratif.
* Tidak menyediakan atau mengadaptasi sebuah konfigurasi, maintenance, manajemen, atau
self-healing mesin dengan spesifikasi khusus.
Sebagai tambahan, Kubernetes bukanlah sebuah *sitem orkestrasi biasa*. Bahkan pada kenyataannya,
Kubernetes 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 dinginkan.
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.
## Mengapa kontainer?
Mencari alasan kenapa kita harus menggunakan kontainer?

*Cara Lama* untuk melakukan mekanisme deploy suatu aplikasi
adalah dengan cara instalasi aplikasi tersebut pada sebuah mesin
dengan menggunakan package manager yang dimiliki oleh sistem operasi
mesin tersebut. Hal ini menciptakan suatu ketergantungan antara executables,
konfigurasi, serta ketergantungan lain yang dibutuhkan aplikasi dengan sistem operasi
yang digunakan oleh mesin. Untuk mengatasi hal ini, tentunya bisa saja kita melakukan
mekanisme build suatu image VM yang immutable untuk mendapatkan
mekanisme rollouts dan rollback yang dapat diprediksi.
Meskipun demikian, VM masih dianggap "berat" dan tidak tidak mudah dipindahkan.
*Cara Baru* adalah dengan melakukan mekanisme deploy kontainer pada tingkatan
virtualisasi di level sistem operasi (OS) bukan pada tingkatan virtualisasi perangkat keras.
Kontainer ini berada dalam lingkungan yang terisolasi satu sama lain serta terisolasi dengan
mesin dimana kontainer ini berada. Kontainer ini memiliki filesystems masing-masing.
Selain itu, setiap kontainer tidak dapat "melihat" process yang sedang dijalankan di
kontainer lain. Selain itu resource komputasi yang digunakan oleh kontainer
ini juga dapat dibatasi. Kontainer juga dapat dengan lebih mudah di-build jika
dibandingkan dengan VM, karena kontainer tidak bergantung pada filesystem
yang dimiliki mesin, serta dengan mudah dapat didistribusikan.
Karena kontainer ukurannya kecil dan lebih cepat, sebuah aplikasi dapat dibangun di setiap
image kontainer. Mekanisme pemetaan satu-satu antara kontainer dan aplikasi
inilah yang membuka keuntungan secara meyeluruh yang dapat diberikan oleh kontainer.
Dengan menggunakan kontainer, image kontainer dapat dibuat diwaktu rilis aplikasi.
Pembuatan image ini memungkinkan aplikasi secara konsisten dirilis pada
environment development maupun production. Selain itu,
kontainer juga memiliki transparasi yang lebih tinggi dibandingkan dengan VM. Maksudnya,
infrastruktur punya tugas untuk mengatur lifecycle seluruh process yang ada di dalam kontainer. Ini bukanlah lagi tugas sebuah supervisor process yang tersembunyi di dalam kontainer.
Secara garis besar, penggunaan kontainer memiliki keuntungan sebagai berikut:
* **Mekanisme pembuatan aplikasi serta proses deployment yang lebih efektif**:
Kontainer dapat meningkatkan kemudahan dan efisiensi jika dibandingkan dengan penggunaan VM.
* **Continuous development, integration, and deployment**:
Digunakan untuk melakukan proses build dan deploy yang sering dilakukan
serta kemudahan mekanisme rollback karena image yang ada sifatnya immutable.
* **Pemisahan kepentingan antara Dev dan Ops**:
Pembuatan image container dilakukan pada saat rilis dan bukan pada saat deploy
mengurangi ketergantungan aplikasi dan infrastruktur.
* **Observabilitas**
Tidak hanya informasi dan metriks pada level OS, tapi juga kesehatan aplikasi dan signal lain.
* **Konsistensi environment pada masa pengembangan , testing, dan production**:
Memiliki perilaku yang sama baik ketika dijalankan di mesin lokal maupun penyedia layanan cloud.
* **Portabilitas antar penyedia layanan cloud maupun distribusi OS**:
Dapat dijalankan pada Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine, dan dimanapun.
* **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.
* **[Mikroservis](https://martinfowler.com/articles/microservices.html) yang renggang (loosely coupled), terdistribusi, elastis, dan terliberasi**:
Aplikasi dapat dipecah menjadi komponen yang lebih kecil yang independen dan dapat
di-deploy dan diatur secara dinamis -- bukan sebuah sistem monolitik yang dijalankan pada
sebuah mesin yang hanya punya satu tujuan.
* **Isolasi resource**:
Performa aplikasi yang bisa diprediksi.
* **Utilisasi resource**:
Efisiensi yang tinggi
## Apakah arti Kubernetes? K8s?
Nama **Kubernetes** berasal dari Bahasa Yunani, yang berarti *juru mudi* atau
*pilot*, dan merupakan asal kata *gubernur* dan
[cybernetic](http://www.etymonline.com/index.php?term=cybernetics). *K8s*
merupakan sebuah singkatan yang didapat dengan mengganti 8 huruf "ubernete" dengan
"8".
## {{% heading "whatsnext" %}}
* Siap untuk [memulai](/docs/setup/)?
* Untuk penjelasan lebih rinci, silahkan lihat [Dokumentasi Kubernetes](/docs/home/).