Dasar Kubernetes

Apa itu Kubernetes?

Kubernetes (sering disingkat sebagai K8s) adalah platform open-source untuk orchestration container, yang berfungsi untuk otomatisasi deployment, scaling, dan manajemen aplikasi containerized. Kubernetes memungkinkan aplikasi yang berjalan di banyak container untuk diatur dan dikelola secara efisien dalam sebuah cluster. Ini sangat penting dalam lingkungan microservices, di mana aplikasi besar dipecah menjadi layanan-layanan kecil yang dapat dijalankan secara independen di container-container yang terpisah.

  • Containerization adalah teknologi yang memungkinkan aplikasi dan semua dependensinya untuk dibungkus dalam sebuah wadah terisolasi yang disebut container. Teknologi ini biasanya menggunakan Docker.
  • Kubernetes bertindak sebagai manajer untuk memastikan bahwa container berjalan, direplikasi, dan berkomunikasi satu sama lain dengan baik.

Fitur utama Kubernetes

  • Automasi Deployment dan Rollback: Kubernetes dapat secara otomatis mengatur proses deploy aplikasi dan rollback jika terjadi masalah.
  • Self-healing: Jika ada container yang gagal, Kubernetes akan secara otomatis menggantinya.
  • Horizontal Scaling: Secara otomatis menambah atau mengurangi jumlah container (pod) sesuai kebutuhan beban kerja.
  • Load Balancing: Menyebarkan traffic aplikasi ke beberapa instance container.

Sejarah Kubernetes dan Arsitekturnya

Kubernetes dikembangkan oleh Google pada tahun 2014 berdasarkan pengalaman mereka mengelola aplikasi container selama bertahun-tahun menggunakan sistem internal bernama Borg. Kubernetes sekarang dikelola oleh Cloud Native Computing Foundation (CNCF).

Arsitektur Kubernetes terdiri dari beberapa komponen utama yang bekerja bersama untuk mengelola aplikasi containerized:

  1. Master Node (Control Plane) – mengontrol keseluruhan cluster:
    • API Server: Pusat komunikasi antara pengguna dan Kubernetes melalui REST API.
    • Controller Manager: Mengontrol proses di Kubernetes seperti scaling dan failover.
    • Scheduler: Bertanggung jawab untuk menempatkan Pod di Node yang sesuai berdasarkan resource yang tersedia.
    • etcd: Database yang menyimpan seluruh status cluster Kubernetes.
  2. Worker Node – menjalankan aplikasi:
    • Kubelet: Komponen yang berjalan di setiap Node dan berkomunikasi dengan API Server untuk memastikan Pod berjalan sesuai instruksi.
    • Kube-proxy: Mengelola aturan jaringan dan load balancing untuk service di setiap Node.
    • Container Runtime: Misalnya Docker atau containerd, yang menjalankan container di Node.

Containerization: Docker vs Kubernetes

Docker adalah platform untuk membangun, mengemas, dan menjalankan aplikasi dalam container. Docker mengisolasi aplikasi dan semua dependensinya dalam container, yang dapat dijalankan secara konsisten di berbagai lingkungan.

Kubernetes tidak menggantikan Docker, Kubernetes mengelola banyak container yang berjalan di Docker atau container runtime lainnya di dalam cluster. Jika Docker digunakan untuk mengelola container individual, Kubernetes digunakan untuk mengatur bagaimana container-container tersebut dikelola, dikomunikasikan, dan diatur dalam skala besar.

Perbedaan utama:

  • Docker: Fokus pada containerization—membangun dan menjalankan container.
  • Kubernetes: Fokus pada orchestration—manajemen, scaling, dan penyebaran container di banyak node dalam cluster.

Manfaat Kubernetes dalam Manajemen Aplikasi

Kubernetes memberikan beberapa keuntungan utama dalam manajemen aplikasi modern:

  1. Scalability: Secara otomatis menambah atau mengurangi jumlah container tergantung pada kebutuhan aplikasi, tanpa intervensi manual.
  2. High Availability: Jika salah satu container atau node gagal, Kubernetes dapat secara otomatis memindahkan beban kerja ke node yang sehat dan menggantikan container yang gagal.
  3. Disaster Recovery: Kubernetes menyederhanakan pencadangan dan pemulihan aplikasi dengan menggunakan strategi seperti rolling updates dan rollback otomatis.
  4. Resource Efficiency: Kubernetes dapat memanfaatkan resource (CPU, memori) dengan efisien dengan menempatkan container di node yang paling sesuai berdasarkan ketersediaan resource.
  5. Declarative Management: Pengguna Kubernetes cukup mendefinisikan keadaan akhir yang diinginkan dari sistem (misalnya, “saya ingin 3 instance aplikasi berjalan”), dan Kubernetes akan memastikan sistem tetap berada dalam keadaan tersebut.

Istilah Dasar Kubernetes

  1. Node
    Node adalah mesin (bisa berupa server fisik atau virtual) yang menjalankan aplikasi dalam container di dalam cluster Kubernetes. Setiap node berisi service yang diperlukan untuk menjalankan container dan dikelola oleh Control Plane.
  2. Cluster
    Cluster adalah kumpulan node yang bekerja bersama untuk menjalankan aplikasi containerized. Cluster terdiri dari master node dan beberapa worker node.
  3. Pod
    Pod adalah unit terkecil dalam Kubernetes yang berisi satu atau lebih container yang berbagi penyimpanan, jaringan, dan spesifikasi bagaimana container tersebut harus dijalankan. Satu Pod biasanya berisi satu aplikasi atau satu komponen aplikasi. Semua container dalam satu Pod berbagi alamat IP dan port.
  4. Service
    Service adalah cara Kubernetes mengekspos aplikasi yang berjalan di dalam Pod agar bisa diakses oleh layanan lain di dalam cluster atau dari luar cluster. Service menyediakan cara untuk melakukan load balancing traffic ke beberapa Pod.
    Jenis Service:
    • ClusterIP: Mengizinkan akses internal dalam cluster.
    • NodePort: Membuka akses aplikasi dari luar cluster melalui IP node.
    • LoadBalancer: Meminta load balancer eksternal untuk mengakses aplikasi dari luar cluster.
  5. Volume
    Volume adalah mekanisme penyimpanan di Kubernetes yang memungkinkan data tetap ada meskipun container dihapus. Berbeda dengan penyimpanan di container Docker, volume Kubernetes tetap eksis selama Pod masih berjalan, bahkan jika container di dalam Pod restart.
    • PersistentVolume (PV): Penyimpanan yang disediakan oleh administrator cluster.
    • PersistentVolumeClaim (PVC): Permintaan dari pengguna untuk menggunakan PersistentVolume.
  6. Namespace
    Namespace digunakan untuk memisahkan resources dalam sebuah cluster Kubernetes, sehingga memungkinkan beberapa tim atau proyek dapat berbagi cluster tanpa saling mengganggu. Setiap resource yang didefinisikan di Kubernetes dapat ditempatkan di namespace tertentu.