Back to IF4031 Arsitektur Aplikasi Terdistribusi

API Kubernetes dan Pengelolaan Objek

Questions/Cues

  • Apa itu Kubernetes API?

  • Bagaimana cara mengakses API?

  • Apa itu API Groups?

  • Apa saja kategori sumber daya API?

  • Apa itu Workloads?

  • Apa itu Discovery & LB?

  • Apa itu Config & Storage?

  • Di mana state disimpan?

  • Bagaimana cara mengelola objek?

  • Apa beda 3 cara manajemen objek?

Reference Points

  • 25-extra-IF4031-24-2024-Kubernetes.pdf (hlm. 19-31)

Kubernetes API

Kubernetes API adalah antarmuka utama yang disediakan oleh sistem. Ini adalah API berbasis RESTful yang memungkinkan pengguna dan komponen lain untuk berinteraksi dengan Control Plane, terutama untuk melakukan query dan memanipulasi state dari objek-objek di dalam cluster. Semua operasi pada dasarnya adalah CRUD (Create, Read, Update, Delete) terhadap objek-objek ini.

Cara Mengakses API:

  • CLI: Melalui kubectl yang merupakan command-line tool utama. kubectl akan menerjemahkan perintah menjadi panggilan REST API ke kube-apiserver.

  • Client Libraries: Menggunakan pustaka klien resmi untuk berbagai bahasa pemrograman (Go, Python, Java, dll.) untuk berinteraksi dengan API secara terprogram.

  • REST API Langsung: Melakukan panggilan HTTP langsung ke endpoint API.

API Groups dan Versioning

Untuk mempermudah evolusi dan pengelolaan, API Kubernetes dipecah menjadi beberapa API Groups. Setiap grup memiliki versinya sendiri. Contohnya:

  • Grup inti (core) di api/v1 berisi objek fundamental seperti Pods, Services, dan Namespaces.

  • Grup apps/v1 berisi objek untuk beban kerja seperti Deployments dan ReplicaSets.

  • Grup batch/v1 berisi objek untuk tugas seperti Jobs dan CronJobs.

Kategori Sumber Daya (Resource Categories)

Objek-objek API dapat dikelompokkan ke dalam kategori berdasarkan fungsinya:

1. Workloads

Objek yang digunakan untuk mengelola dan menjalankan kontainer di cluster. Ini adalah objek yang paling sering berinteraksi dengan pengembang.

  • Contoh: Pod, Deployment, StatefulSet, DaemonSet, Job, CronJob.

2. Discovery & Load Balancing

Objek yang digunakan untuk mengekspos workload agar dapat diakses oleh layanan lain atau dari luar cluster, serta untuk menyeimbangkan beban.

  • Contoh: Service, Ingress.

3. Config and Storage

Objek untuk inisialisasi, konfigurasi, dan persistensi data untuk aplikasi.

  • Contoh: ConfigMap, Secret, Volume, PersistentVolumeClaim.

4. Cluster

Objek yang mendefinisikan konfigurasi dari cluster itu sendiri.

  • Contoh: Namespace, Node, Role, ClusterRole.

5. Metadata

Objek untuk mengkonfigurasi perilaku sumber daya lain di dalam cluster.

Penyimpanan State

State dari semua objek-objek ini disimpan secara persisten di etcd. API server adalah satu-satunya komponen yang berkomunikasi langsung dengan etcd.

Manajemen Objek Kubernetes

Ada tiga pendekatan utama untuk mengelola objek di Kubernetes:

1. Imperative Commands (Perintah Imperatif)

Memberi perintah langsung ke kubectl untuk melakukan aksi. Sangat baik untuk tugas-tugas cepat atau saat belajar.

  • Contoh: kubectl create deployment nginx --image=nginx atau kubectl scale deployment nginx --replicas=3.

  • Kelemahan: Tidak ada jejak perubahan, sulit direproduksi, tidak cocok untuk manajemen infrastruktur sebagai kode (Infrastructure as Code).

2. Imperative Object Configuration (Konfigurasi Objek Imperatif)

Menggunakan file YAML/JSON untuk mendefinisikan objek, lalu menggunakan perintah seperti create atau delete untuk mengelolanya.

  • Contoh: kubectl create -f nginx.yaml.

  • Kelemahan: Perintah create akan gagal jika objek sudah ada. Untuk pembaruan, harus menggunakan replace atau patch, yang bisa rumit.

3. Declarative Object Configuration (Konfigurasi Objek Deklaratif)

Ini adalah pendekatan yang direkomendasikan dan paling umum digunakan. Anda mendefinisikan desired state dalam satu atau lebih file YAML, dan menggunakan perintah kubectl apply -f .

  • Cara Kerja: kubectl apply akan membandingkan definisi di file YAML dengan state objek yang ada di cluster. Kubernetes akan secara cerdas menghitung dan menerapkan hanya perubahan yang diperlukan. Jika objek belum ada, ia akan dibuat. Jika sudah ada, ia akan diperbarui.

  • Keuntungan: Mendukung penuh Infrastructure as Code, mudah dilacak dalam sistem kontrol versi (Git), dan merupakan inti dari alur kerja GitOps.

Summary

Kubernetes API adalah antarmuka RESTful terpusat yang berfungsi sebagai pintu gerbang untuk semua interaksi dengan state cluster, yang disimpan secara persisten di etcd. Objek-objek dalam API ini dikelompokkan berdasarkan fungsionalitas (seperti Workloads, Discovery, Config) dan versi. Pengelolaan objek-objek ini idealnya dilakukan secara deklaratif menggunakan kubectl apply, yang memungkinkan manajemen infrastruktur sebagai kode (Infrastructure as Code) dengan mendefinisikan “keadaan yang diinginkan” dalam file konfigurasi.