Bayangkan Anda mengelola sebuah cluster database PostgreSQL dengan tiga replika yang harus di-upgrade ke versi terbaru. Secara manual, Anda perlu memastikan replika diperbarui satu per satu, memverifikasi replikasi tetap sehat, lalu baru mempromosikan primary baru โ semua tanpa membuat aplikasi produksi mengalami downtime. Prosesnya melelahkan, rawan human error, dan sulit diulang secara konsisten setiap kali ada rilis baru.
Di sinilah Kubernetes Operators berperan. Operator memungkinkan pengetahuan operasional seorang administrator database (DBA) โ cara melakukan backup, scaling, failover, hingga upgrade โ dituliskan ke dalam kode, lalu dijalankan secara otomatis oleh cluster itu sendiri.
Konsep ini pertama kali diperkenalkan oleh tim CoreOS pada tahun 2016 untuk mengisi kesenjangan antara kemampuan native Kubernetes dan kebutuhan operasional aplikasi stateful yang kompleks. Kini, Operator telah menjadi salah satu pola paling populer dalam ekosistem cloud native, dan dipakai jauh melampaui use case database saja โ mulai dari message broker, sistem monitoring, hingga platform CI/CD.
Bagi tim engineering yang mengelola infrastruktur berbasis Kubernetes, memahami Operator bukan lagi sekadar “nice to have”, melainkan kebutuhan dasar untuk menjaga aplikasi tetap andal, scalable, dan mudah dipelihara.
Pembahasan Utama
Apa Itu Kubernetes Operator?
Menurut whitepaper resmi dari CNCF TAG App Delivery, pola Operator mendefinisikan cara mengelola resource aplikasi dan infrastruktur menggunakan pengetahuan spesifik-domain (domain-specific knowledge) dan status deklaratif, dengan tujuan mengurangi pekerjaan manual seperti backup, scaling, dan upgrade.
Secara teknis, sebuah Operator terdiri dari tiga komponen utama:
- Custom Resource Definition (CRD) โ memperluas Kubernetes API agar bisa mengenali objek baru, misalnya
PostgresClusteratauRedisCluster, sesuai domain aplikasi yang dikelola. - Controller โ proses yang berjalan terus-menerus (control loop) memantau status aktual cluster dan membandingkannya dengan status yang diinginkan (desired state) di dalam CRD.
- Domain-specific logic โ logika bisnis yang mengetahui cara melakukan operasi kompleks, seperti bagaimana urutan yang aman untuk melakukan rolling upgrade pada cluster database.
Analoginya sederhana: Kubernetes bawaan seperti Deployment atau StatefulSet ibarat resepsionis yang tahu cara menyalakan dan mematikan lampu di sebuah gedung. Operator lebih mirip manajer gedung berpengalaman yang tahu kapan harus menyalakan generator cadangan, kapan harus menjadwalkan perawatan AC, dan bagaimana melakukannya tanpa mengganggu penghuni gedung.
Bagaimana Reconciliation Loop Bekerja di Balik Layar
Inti dari setiap Operator adalah reconciliation loop โ sebuah proses berulang yang tidak pernah berhenti selama Operator berjalan. Setiap beberapa detik, controller akan:
- Membaca desired state yang didefinisikan pengguna di dalam custom resource (misalnya “cluster harus memiliki 3 replika versi PostgreSQL 16”).
- Membandingkannya dengan status aktual cluster saat ini (misalnya hanya ada 2 replika yang sehat).
- Mengambil tindakan korektif seperlunya (misalnya membuat 1 pod replika baru) agar status aktual kembali sesuai desired state.
- Mengulang proses ini tanpa henti, sehingga cluster selalu “menjaga dirinya sendiri” meski terjadi gangguan tak terduga seperti node yang mati mendadak.
Pendekatan loop yang terus-menerus inilah yang membedakan Operator dari sekadar script otomasi biasa. Script otomasi umumnya dijalankan sekali lalu selesai, sedangkan Operator terus memantau dan memperbaiki penyimpangan (drift) dari status yang diinginkan, kapan pun penyimpangan itu terjadi โ baik karena human error, kegagalan hardware, maupun perubahan konfigurasi yang tidak sengaja.
Kenapa Operator Dibutuhkan untuk Aplikasi Kompleks?
Kubernetes secara native sangat baik dalam mengelola aplikasi stateless โ API yang tidak menyimpan state, cukup ditambah replika saat traffic naik. Namun aplikasi stateful seperti database, message queue, atau search engine punya kebutuhan operasional yang jauh lebih rumit:
- Urutan startup dan shutdown yang harus diperhatikan (misalnya primary harus siap sebelum replika terhubung).
- Proses backup dan restore yang konsisten secara transaksional.
- Failover otomatis ketika node primary gagal, tanpa kehilangan data.
- Scaling yang memperhitungkan topologi replikasi, bukan sekadar menambah pod.
Tanpa Operator, seluruh proses ini harus dilakukan manual atau lewat script eksternal yang sulit diintegrasikan dengan siklus hidup native Kubernetes. Operator menutup celah tersebut dengan menanamkan pengetahuan operasional tadi langsung ke dalam API cluster.
Selain itu, script eksternal biasanya bersifat imperative โ berisi urutan perintah yang dijalankan sekali dan selesai. Ketika ada perubahan kondisi cluster di luar dugaan, script tersebut tidak tahu cara menyesuaikan diri. Operator, sebaliknya, bersifat deklaratif dan reaktif: ia terus memantau kondisi cluster dan menyesuaikan tindakannya kapan pun dibutuhkan, tanpa harus dijalankan ulang secara manual oleh manusia.
Contoh Kasus: Operator Database di Dunia Nyata
Ekosistem Operator untuk database open-source berkembang sangat pesat, terutama untuk PostgreSQL. Beberapa yang paling banyak dipakai di produksi:
- CloudNativePG โ Operator PostgreSQL yang dikembangkan EnterpriseDB dan kini berstatus proyek sandbox CNCF. Operator ini menyediakan self-healing, high availability, rolling update, serta scale up/down replika read-only secara deklaratif, dan dirancang untuk memanfaatkan fitur skalabilitas Kubernetes secara penuh, termasuk penskalaan vertikal maupun horizontal dengan downtime minimal.
- Zalando Postgres Operator โ salah satu Operator PostgreSQL paling matang, sudah dipakai untuk menjalankan ratusan cluster PostgreSQL produksi di Zalando dan terus bertambah, dengan dukungan konfigurasi mirip layanan managed database seperti RDS.
- MongoDB Community Operator โ mengelola replica set MongoDB secara deklaratif, mencakup topologi, user, autentikasi, scaling, hingga rolling upgrade.
Dalam praktiknya, saat melakukan upgrade versi minor (misalnya PostgreSQL 16.2 ke 16.3), Operator biasanya otomatis melakukan rolling restart pada masing-masing pod secara bergiliran. Untuk upgrade versi major (misalnya PostgreSQL 15 ke 16), prosesnya lebih hati-hati dan tetap disarankan disertai maintenance window, karena perubahan skema internal database bisa lebih signifikan meski Operator sudah mengklaim kemampuan zero-downtime.
Membandingkan Beberapa Operator PostgreSQL yang Populer
Karena PostgreSQL adalah salah satu database open-source paling banyak dijalankan di Kubernetes, ekosistem Operator-nya juga paling ramai dan layak dibandingkan sebelum memilih:
| Operator | Kekuatan Utama | Cocok Untuk |
|---|---|---|
| CloudNativePG | Kubernetes-native, integrasi Prometheus/Grafana, backup ke S3, PITR | Proyek baru yang ingin pendekatan paling native ke Kubernetes |
| Zalando Postgres Operator | Rekam jejak produksi sangat matang, konfigurasi mirip layanan managed database | Organisasi yang butuh kestabilan teruji dalam skala besar |
| Percona/StackGres | Fitur enterprise, dukungan multi-database (PostgreSQL, MySQL, MongoDB) | Tim yang butuh dukungan komersial dan SLA |
Tidak ada satu Operator yang otomatis “paling benar” untuk semua kasus. Pemilihan sebaiknya didasarkan pada kematangan komunitas, kebutuhan fitur enterprise seperti dukungan SLA, serta seberapa nyaman tim dengan pendekatan konfigurasi masing-masing Operator.
Bagaimana Operator Menangani Scaling Secara Cerdas
Scaling pada aplikasi stateless umumnya sederhana: cukup tambah jumlah replika Deployment. Namun pada database, menambah node tidak semudah itu, karena setiap node baru harus:
- Melakukan proses bootstrap dari salah satu node yang sudah berjalan (biasanya lewat base backup atau streaming replication awal).
- Bergabung ke topologi replikasi tanpa mengganggu node yang sudah melayani trafik produksi.
- Terdaftar secara otomatis ke Service endpoint yang sesuai, misalnya endpoint khusus untuk trafik read-only.
Operator database modern menangani seluruh proses ini secara otomatis begitu pengguna mengubah field jumlah replika di CRD melalui kubectl patch atau lewat pipeline GitOps. Pengguna cukup mendeklarasikan “saya ingin 5 replika”, dan Operator yang menentukan urutan teknis untuk mencapainya dengan aman.
Materi Praktis: Bagaimana Operator Menangani Upgrade Tanpa Downtime
Berikut gambaran umum langkah yang dilakukan Operator database modern seperti CloudNativePG saat melakukan rolling upgrade pada cluster dengan satu primary dan beberapa replika:
- Deteksi perubahan desired state โ Operator mendeteksi bahwa versi image container di CRD telah diperbarui oleh pengguna.
- Upgrade replika terlebih dahulu โ pod replika diperbarui satu per satu, memastikan setiap replika kembali sinkron (streaming replication sehat) sebelum lanjut ke replika berikutnya.
- Verifikasi kesehatan cluster โ Operator memeriksa status replikasi dan lag data sebelum melanjutkan proses.
- Promosi primary baru (jika diperlukan) โ pada strategi supervised switchover, Operator akan melakukan failover terkontrol: salah satu replika yang sudah diperbarui dipromosikan menjadi primary baru, sementara primary lama diturunkan menjadi replika dan ikut diperbarui belakangan.
- Update endpoint service โ Kubernetes Service yang mengarahkan trafik ke primary otomatis diarahkan ke pod primary baru, sehingga aplikasi klien tidak perlu tahu perubahan ini terjadi.
Seluruh proses di atas berjalan tanpa campur tangan manual โ cukup mengubah satu field versi di CRD, dan Operator yang mengeksekusi urutan operasinya.
Best Practice Menggunakan Operator di Produksi
- Mulai dari staging. Uji perilaku upgrade, failover, dan restore backup Operator di lingkungan non-produksi sebelum menerapkannya di cluster produksi.
- Perhatikan storage class dan resource limit. Operator sebaik apa pun tidak akan menyelamatkan cluster dari storage yang salah dikonfigurasi.
- Uji proses restore backup secara berkala. Backup yang tidak pernah diuji sama saja dengan tidak punya backup.
- Pantau lewat observability bawaan. Sebagian besar Operator database modern menyediakan integrasi Prometheus untuk memantau metrik replikasi, latency, dan kesehatan cluster secara real-time.
- Tetap siapkan maintenance window untuk upgrade major version, meskipun Operator mengklaim kemampuan zero-downtime, karena perubahan skema besar tetap membawa risiko di sisi kompatibilitas aplikasi.
- Pahami mode upgrade yang tersedia. Sebagian Operator menyediakan opsi seperti supervised dan unsupervised switchover โ mode supervised memberi kontrol manual kapan failover terjadi, sedangkan unsupervised membiarkan Operator memutuskan sendiri waktu terbaik. Pilih sesuai tingkat kenyamanan tim terhadap otomasi penuh.
- Terapkan RBAC yang ketat untuk Operator. Karena Operator biasanya berjalan dengan permission tinggi (bisa membuat, mengubah, dan menghapus resource), batasi scope permission-nya hanya ke namespace yang benar-benar dibutuhkan.
- Dokumentasikan proses rollback. Selalu siapkan rencana jika upgrade yang dijalankan Operator ternyata menimbulkan masalah tak terduga di aplikasi klien, termasuk cara mengembalikan ke image versi sebelumnya.
Kesalahan yang Sering Terjadi
1. Menganggap Operator sebagai solusi ajaib
- Penyebab: Tim langsung men-deploy Operator tanpa memahami cara kerja di baliknya.
- Dampak: Ketika terjadi insiden, tim tidak tahu cara melakukan debugging atau intervensi manual.
- Solusi: Pelajari dokumentasi Operator secara mendalam dan lakukan disaster recovery drill secara berkala.
2. Tidak menguji upgrade major version di staging
- Penyebab: Asumsi bahwa upgrade minor dan major berperilaku sama.
- Dampak: Downtime tak terduga akibat perubahan skema atau ketidakcocokan driver aplikasi.
- Solusi: Selalu jadwalkan maintenance window khusus untuk upgrade major version, meski Operator mendukung rolling upgrade.
3. Mengabaikan resource request dan limit
- Penyebab: Konfigurasi CRD disalin langsung dari contoh dokumentasi tanpa disesuaikan.
- Dampak: Pod database mengalami throttling CPU atau OOMKilled saat traffic tinggi.
- Solusi: Sesuaikan resource request/limit berdasarkan hasil load testing riil.
4. Tidak memvalidasi hasil backup
- Penyebab: Backup dianggap otomatis berarti aman.
- Dampak: Saat restore benar-benar dibutuhkan, file backup ternyata korup atau tidak lengkap.
- Solusi: Jadwalkan uji restore rutin ke lingkungan terpisah.
5. Menjalankan banyak Operator tanpa isolasi namespace yang jelas
- Penyebab: Semua Operator dan CRD dijalankan dalam namespace yang sama tanpa RBAC yang rapi.
- Dampak: Potensi konflik permission dan kesulitan audit keamanan.
- Solusi: Terapkan prinsip least privilege dan pisahkan Operator berdasarkan namespace atau cluster scope yang jelas.
Tips dan Rekomendasi
- Untuk tim yang baru memulai, pilih Operator dengan komunitas paling aktif dan dokumentasi paling lengkap dibanding fitur paling banyak.
- Manfaatkan Operator Framework atau Operator SDK bila suatu saat tim perlu membangun Operator custom untuk aplikasi internal.
- Integrasikan Operator dengan pipeline GitOps (misalnya ArgoCD atau Flux) agar perubahan desired state tercatat dan dapat di-rollback dengan mudah.
- Selalu baca changelog Operator sebelum upgrade, karena strategi upgrade (misalnya
primaryUpdateStrategy) bisa memengaruhi perilaku failover.

Kesimpulan
Kubernetes Operator mengubah cara tim mengelola aplikasi kompleks di dalam cluster โ dari proses manual yang rawan kesalahan menjadi otomasi deklaratif yang konsisten. Dengan menanamkan pengetahuan operasional seorang DBA atau SRE ke dalam kode, Operator memungkinkan proses seperti scaling, backup, dan upgrade database berjalan otomatis, bahkan untuk skenario serumit rolling upgrade tanpa downtime.
Poin penting yang perlu diingat:
- Operator terdiri dari CRD, controller, dan logika domain-specific yang saling bekerja sama.
- Operator paling terbukti manfaatnya untuk aplikasi stateful seperti database, bukan sekadar aplikasi stateless.
- Zero-downtime bukan jaminan mutlak โ tetap perlu pengujian dan maintenance window untuk perubahan besar.
- Observability dan validasi backup adalah kunci keberhasilan operasional jangka panjang.
Pada akhirnya, adopsi Kubernetes Operator bukan sekadar soal mengejar tren teknologi, melainkan soal memindahkan beban operasional dari manusia ke sistem yang bisa diandalkan bekerja 24/7 tanpa lelah. Semakin kompleks aplikasi yang dikelola, semakin besar pula nilai yang didapat dari pola Operator ini โ asalkan diterapkan dengan pemahaman yang matang, bukan sekadar copy-paste konfigurasi dari internet.
Sudahkah tim Anda menggunakan Kubernetes Operator untuk mengelola database di produksi? Bagikan pengalaman Anda di kolom komentar โ
Operator apa yang paling andal menurut Anda? Jangan lupa bagikan artikel ini ke rekan tim DevOps Anda, dan jelajahi artikel terkait lainnya seputar Kubernetes, sysadmin, dan infrastruktur cloud native di blog ini.
Frequently Asked Questions (FAQ)
Pertanyaan: Apa perbedaan Kubernetes Operator dengan Controller biasa? Jawaban: Operator pada dasarnya adalah Controller yang dibekali pengetahuan spesifik-domain tentang aplikasi tertentu (misalnya database), sedangkan Controller bawaan Kubernetes hanya mengelola resource generik seperti Pod atau ReplicaSet tanpa memahami logika bisnis aplikasi di dalamnya.
Pertanyaan: Apakah semua aplikasi butuh Operator? Jawaban: Tidak. Aplikasi stateless sederhana biasanya cukup dikelola dengan Deployment biasa. Operator paling bermanfaat untuk aplikasi stateful kompleks seperti database, message broker, atau sistem yang punya prosedur operasional rumit.
Pertanyaan: Apakah Operator menjamin upgrade database 100% tanpa downtime? Jawaban: Tidak sepenuhnya. Operator modern dapat meminimalkan downtime lewat rolling upgrade dan failover terkontrol, namun untuk upgrade major version tetap disarankan menyiapkan maintenance window karena risiko ketidakcocokan skema atau aplikasi.
Pertanyaan: Operator PostgreSQL apa yang paling direkomendasikan untuk pemula? Jawaban: CloudNativePG sering direkomendasikan untuk proyek baru karena dokumentasinya lengkap, aktif dikembangkan, dan berstatus proyek CNCF sandbox, meski Zalando Postgres Operator juga terbukti matang di skala produksi besar.
Pertanyaan: Bagaimana cara membuat Operator custom untuk aplikasi internal? Jawaban: Tim biasanya menggunakan Operator SDK atau framework seperti Kubebuilder untuk mendefinisikan CRD dan menulis logika controller sesuai kebutuhan operasional aplikasi internal mereka.
Kalau artikel ini membantu Anda memahami cara kerja Kubernetes Operator, yuk tinggalkan komentar dan ceritakan pengalaman Anda mengelola database di Kubernetes!
Bagikan artikel ini ke tim DevOps atau sysadmin Anda, ikuti update konten seputar cloud native infrastructure di blog ini, dan jangan lewatkan artikel-artikel terkait lainnya seputar Kubernetes, container orchestration, dan best practice infrastruktur IT modern.