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
kubectlyang merupakan command-line tool utama.kubectlakan menerjemahkan perintah menjadi panggilan REST API kekube-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) diapi/v1berisi objek fundamental seperti Pods, Services, dan Namespaces.Grup
apps/v1berisi objek untuk beban kerja seperti Deployments dan ReplicaSets.Grup
batch/v1berisi 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=nginxataukubectl 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
createakan gagal jika objek sudah ada. Untuk pembaruan, harus menggunakanreplaceataupatch, 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 applyakan 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.
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 menggunakankubectl apply, yang memungkinkan manajemen infrastruktur sebagai kode (Infrastructure as Code) dengan mendefinisikan “keadaan yang diinginkan” dalam file konfigurasi.
Additional Information
Perpanjangan API: Custom Resources (CRDs)
Salah satu fitur paling kuat dari Kubernetes adalah kemampuannya untuk diperluas. Jika objek-objek bawaan tidak cukup untuk merepresentasikan sistem Anda, Anda dapat membuat tipe objek Anda sendiri dengan mendefinisikan sebuah Custom Resource Definition (CRD).
Setelah Anda membuat CRD, Anda dapat membuat objek dari tipe baru tersebut, seolah-olah itu adalah objek bawaan Kubernetes seperti
PodatauDeployment. Ini membuka jalan untuk pola Operator, di mana Anda menulis controller kustom yang “mengawasi” CRD Anda dan melakukan tindakan otomatisasi yang kompleks. Contohnya, operator database bisa mengelola siklus hidup database cluster (pembuatan, backup, failover) hanya dengan Anda mendefinisikan objek kustom sepertikind: PostgresCluster.Trade-off Manajemen Objek
Imperative Commands: Cepat untuk prototipe, buruk untuk produksi.
Imperative Object Config: Lebih baik karena konfigurasi tersimpan di file, tetapi manajemen pembaruan masih manual dan rawan kesalahan.
Declarative Object Config: Sedikit lebih lambat untuk tugas-tugas tunggal, tetapi jauh lebih unggul untuk manajemen siklus hidup aplikasi yang kompleks di lingkungan produksi. Ini adalah fondasi dari CI/CD dan GitOps modern.