Pengenalan LitmusChaos: Chaos Engineering untuk Aplikasi Cloud-Native
Pelajari cara mendeteksi kelemahan infrastruktur Kubernetes secara proaktif menggunakan LitmusChaos, platform Chaos Engineering cloud-native yang berbasis open-source.
Dalam sistem terdistribusi, kegagalan bukanlah hal yang aneh; melainkan sebuah kepastian matematis. Pada lingkungan Kubernetes—tempat di mana container berjalan dan mati secara dinamis, microservices berskala secara horizontal, dan konfigurasi jaringan terus berubah—memahami bagaimana aplikasi Anda berperilaku saat mengalami tekanan sangatlah penting.
Pengujian tradisional biasanya hanya berfokus pada skenario sukses (happy paths) dan skenario error yang sudah diantisipasi. Sebaliknya, Chaos Engineering adalah praktik menyuntikkan kegagalan yang terkendali ke dalam sistem untuk memverifikasi ketahanan (resilience) secara nyata. Di antara berbagai alat yang tersedia untuk Kubernetes, LitmusChaos merupakan salah satu platform terdepan.
Dalam artikel ini, kita akan membahas apa itu LitmusChaos, bagaimana arsitekturnya bekerja, dan bagaimana Anda dapat menjalankan eksperimen chaos pertama Anda.
Mengapa LitmusChaos?
LitmusChaos adalah proyek inkubasi di bawah Cloud Native Computing Foundation (CNCF). Alat ini dirancang khusus untuk Kubernetes dengan mengadopsi pendekatan deklaratif berbasis Kubernetes-native.
Keunggulan utama LitmusChaos meliputi:
- Kubernetes-Native (Berbasis CRD): Eksperimen chaos didefinisikan sebagai Custom Resource Definitions (CRDs). Anda dapat mengelolanya menggunakan
kubectllayaknya mengelola Pods atau Deployments. - Chaos Hub: Repositori publik yang berisi ratusan eksperimen chaos siap pakai (seperti mematikan Pod, latensi jaringan, konsumsi CPU berlebih, disk penuh, dan gangguan API gateway).
- Chaos Center (Litmus Portal): Dasbor terpadu untuk merancang, menjadwalkan, memantau, dan menganalisis skenario chaos di berbagai cluster Kubernetes secara terpusat.
- Resilience Score: Memberikan metrik kuantitatif tentang seberapa tangguh sistem Anda berdasarkan hasil dari eksperimen yang dijalankan.
Alur Kerja Eksperimen LitmusChaos
Eksperimen chaos di LitmusChaos memiliki siklus hidup yang teratur dan aman. Setiap tahap dirancang untuk meminimalkan dampak buruk yang tidak terencana (blast radius).
Berikut adalah gambaran alur kerja dari sebuah eksperimen chaos:
graph TD
A[Mulai Eksperimen] --> B[Verifikasi Hak Akses ServiceAccount]
B --> C[Uji Steady State Sebelum Chaos - Pre-Chaos Probes]
C -->|Sukses| D[Suntikkan Chaos - Chaos Injection]
C -->|Gagal| H[Batalkan & Catat Gagal]
D --> E[Pemantauan Selama Chaos - Continuous Probes]
E -->|Deteksi Kegagalan Fatal| F[Hentikan & Kembalikan Kondisi]
E -->|Selesai| G[Hapus Efek Chaos - Rollback Chaos]
G --> I[Uji Steady State Setelah Chaos - Post-Chaos Probes]
I --> J[Catat Hasil ke ChaosResult]
F --> J
H --> J
Resource Kunci di LitmusChaos
Ada tiga Custom Resource utama yang perlu Anda ketahui:
ChaosExperiment: Berisi parameter teknis eksperimen (seperti durasi chaos, library yang digunakan, dan variabel lingkungan).ChaosEngine: File konfigurasi yang menghubungkan aplikasi target dengan eksperimen chaos yang ingin dijalankan.ChaosResult: Menyimpan hasil akhir dari eksperimen chaos (apakah berstatus Lolos/Gagal beserta metrik detailnya).
Menjalankan Eksperimen Pertama: Pod Delete
Eksperimen paling klasik dan mendasar adalah Pod Delete (mirip dengan konsep Chaos Monkey). Eksperimen ini mematikan pod secara acak pada aplikasi target untuk memastikan konfigurasi High Availability (HA) Anda (seperti replica count > 1, Pod Disruption Budgets, dan readiness probes) berfungsi dengan baik.
Langkah 1: Pasang ChaosExperiment
Pertama, unduh definisi eksperimen pod-delete dari Chaos Hub ke cluster Anda:
kubectl apply -f https://hub.litmuschaos.io/api/chaos/1.13.8?file=charts/generic/pod-delete/experiment.yaml -n litmus
Langkah 2: Definisikan ChaosEngine
Buat berkas manifest ChaosEngine yang menargetkan deployment aplikasi Anda. Sebagai contoh, aplikasi web frontend di namespace default:
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: frontend-chaos-id
namespace: default
spec:
# Service Account yang memiliki izin untuk menjalankan chaos
chaosServiceAccount: litmus-admin
# Detail workload yang akan diuji
appinfo:
appns: 'default'
applabel: 'app=frontend'
appkind: 'deployment'
# Status eksekusi (active = langsung berjalan)
engineState: 'active'
# Daftar eksperimen yang akan dieksekusi
experiments:
- name: pod-delete
spec:
components:
env:
# Total waktu pengulangan hapus pod (dalam detik)
- name: TOTAL_CHAOS_DURATION
value: '30'
# Jeda waktu antara penghapusan pod berikutnya
- name: CHAOS_INTERVAL
value: '10'
# Matikan pod secara paksa
- name: FORCE
value: 'true'
Jalankan perintah berikut untuk mengeksekusi eksperimen:
kubectl apply -f frontend-chaos-engine.yaml
Memantau Kesehatan Aplikasi Menggunakan Probes
Menjalankan chaos tanpa pemantauan hanyalah tindakan merusak sistem tanpa arah. LitmusChaos menyediakan fitur Probes untuk memvalidasi kesehatan sistem sebelum, selama, dan setelah eksperimen berjalan.
Contoh di bawah ini menggunakan httpProbe untuk memastikan endpoint health-check aplikasi frontend tetap merespon dengan status 200 OK selama proses penghapusan pod berlangsung:
spec:
experiments:
- name: pod-delete
spec:
probe:
- name: cek-koneksi-frontend
type: httpProbe
httpProperties:
url: http://frontend.default.svc.cluster.local:8080/healthz
method: GET
mode: Continuous
runProperties:
probeTimeout: 1000
interval: 2000
retry: 3
Jika endpoint gagal merespon atau mengembalikan status error di tengah-tengah jalannya chaos, probe akan mendeteksi kegagalan tersebut, eksperimen akan segera dihentikan, dan status akhir dinyatakan Failed.
Memeriksa ChaosResult
Setelah eksperimen selesai, Anda dapat memeriksa hasilnya dengan melihat resource ChaosResult:
kubectl get chaosresult frontend-chaos-id-pod-delete -o yaml
Anda akan melihat bagian status seperti berikut:
status:
experimentStatus:
phase: Completed
verdict: Passed # atau Failed
probeSuccessPercentage: 100
Kesimpulan
Dengan mengintegrasikan LitmusChaos ke dalam siklus pengembangan, Anda dapat beralih dari sekadar berasumsi bahwa aplikasi Anda tangguh menjadi membuktikannya secara nyata.
Mulailah dengan eksperimen sederhana di lingkungan staging. Setelah kepercayaan diri tim meningkat, Anda dapat melangkah ke eksperimen yang lebih kompleks seperti simulasi latensi jaringan, pembatasan CPU, dan kegagalan koneksi database. Langkah terakhir adalah mengintegrasikan eksperimen ini ke dalam pipeline CI/CD untuk mencegah terjadinya regresi ketahanan sistem.
Pada artikel selanjutnya, kita akan membahas cara melakukan eksperimen manipulasi jaringan (network emulation) dan merancang visualisasi dasbor pemantauan chaos yang komprehensif.