Mengelola biaya cloud sebagai produk platform: cost dashboards dengan OpenCost/KubeCost, model showback dan chargeback per tim, serta strategi optimasi yang mengurangi biaya tanpa mengorbankan reliability

Setelah di episode 10 kita mengamankan secrets, tibalah masalah yang paling sering membuat tim platform tidak bisa tidur: biaya cloud. Semua abstraksi yang kita bangun — golden paths, self-service, K8s platform — pada akhirnya menghasilkan tagihan. Di 2026, pertanyaan "berapa biaya untuk menjalankan service ini?" harus punya jawaban yang jelas, atau platform kalian akan dipandang sebagai pemboros bukan pemungkin.
Mengapa FinOps harus jadi bagian platform? Karena biaya cloud hanya bisa dikendalikan di tempat ia muncul: infrastruktur bersama yang dikelola platform. Jika setiap tim memegang cluster sendiri dan tagihan sendiri, tidak ada yang bisa melihat gambaran besar. Platform yang baik menyediakan visibilitas biaya per tim dan mekanisme optimasi terpusat — itulah inti FinOps.
FinOps adalah praktik operasional yang menyatukan tim finansial, engineering, dan produk untuk mengelola biaya cloud. Siklusnya terus berulang:
Peran platform engineer dalam FinOps: membangun infrastruktur data biaya — memastikan setiap cent rupiah bisa diatribusikan ke tim/service, dan menyediakan alat optimasi yang bisa dipakai tanpa mengganggu development.
FinOps gagal jika data biaya tidak bisa diatribusikan. Di episode 4 kita menetapkan label team dan environment di namespace. Sekarang label itu menghasilkan nilai: cost allocation.
Aturan emas: setiap resource yang berbiaya harus punya label:
# Setiap resource di platform wajib punya:
labels:
team: payments
service: payments-api
environment: prod
cost-center: eng-paymentsDi Kubernetes, biaya juga bisa di-attach ke label Pod dan namespace. Platform engineer menetapkan standard label ini dan menegakkannya dengan policy (Kyverno, episode 5) — resource tanpa label ditolak atau masuk bucket "unallocated" yang mencurigakan.
Alat open-source utama untuk cost visibility Kubernetes:
| Tool | Kelebihan | Basis Data |
|---|---|---|
| OpenCost (CNCF) | Standar terbuka, integrasi cloud pricing, API | Prometheus |
| KubeCost | Grafana dashboard kaya, rightsizing recommendations | Prometheus |
Keduanya menghitung biaya per workload berdasarkan resource yang diminta (requests) dan yang dipakai. Instalasi via Helm:
helm repo add opencost https://opencost.github.io/opencost-helm-chart
helm install opencost opencost/opencost \
--namespace opencost \
--create-namespace \
--set opencost.exporters.prometheus.enabled=true \
--set opencost.ui.enabled=trueOutputnya: dashboard yang menjawab pertanyaan klasik — "service mana yang paling mahal bulan ini?"
# Biaya per namespace (bulanan)
sum(kubecost_namespace_cpu_cost{}) + sum(kubecost_namespace_gpu_cost{})
# Biaya per deployment
sum(kubecost_deployment_cpu_cost{})Dua model bagaimana biaya "dipulangkan" ke pemiliknya:
| Model | Cara | Karakteristik |
|---|---|---|
| Showback | Biaya ditampilkan ke tim, tapi tidak dipotong dari budget tim | Transparan, minim politik, tidak mengubah perilaku |
| Chargeback | Biaya dibebankan ke budget tim secara nyata | Mengubah perilaku lebih kuat, tapi bisa memicu perang |
Pendekatan yang paling banyak dipakai di 2026: mulai dengan showback. Tampilkan dashboard "cost per team" kepada setiap tim, biarkan mereka melihat dampak keputusan mereka sendiri. Setelah budaya data biaya terbentuk, baru pertimbangkan chargeback parsial (misal hanya di atas baseline tertentu).
Important
Hati-hati dengan chargeback penuh di awal — jika biaya dikaitkan langsung ke kinerja tim tanpa data yang solid, hasilnya adalah perang data dan penyalahgunaan angka. Showback dulu, chargeback kemudian, dan selalu dengan data yang diverifikasi.
Optimasi biaya bukan berarti menyuruh semua tim memakai resource kecil. Tiga strategi yang layak menjadi produk platform:
Ubah request/limit berdasarkan data pemakaian nyata, bukan tebakan:
curl -s "http://opencost:9003/model/recommendation/cluster"Hasil rekomendasi (request yang disarankan) bisa di-terapkan lewat Vertical Pod Autoscaler (VPA) dalam mode recommender untuk sementara, lalu pindah ke auto setelah terbukti.
Autoscaling adalah optimasi biaya terbaik karena otomatis:
| Alat | Skala | Cepat/Slow |
|---|---|---|
| Horizontal Pod Autoscaler | Pod | Cepat (menit) |
| Cluster Autoscaler / Karpenter | Node | Sedang (menit-jam) |
| VPA | Request per Pod | Lambat (jam-hari) |
Karpenter (eksis di AWS) memberi Node Autoscaling berdasarkan workload — node disediakan saat Pod butuh, dihapus saat kosong. Ini sering menghemat 30-50% dibanding node statis.
Sumber pemborosan terbesar biasanya bukan resource besar, tapi resource yang menganggur:
Kebijakan platform yang efektif: scale-to-zero atau schedule untuk dev/staging (misal mati otomatis malam hari), dan deteksi Pod idle via metrik.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: payments-api
namespace: team-payments-prod
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: payments-api
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80Platform engineer mengemas FinOps sebagai produk dengan:
Contoh budget alert dengan Prometheus:
groups:
- name: cost
rules:
- alert: MonthlyBudgetWarning
expr: |
sum(kubecost_namespace_total_monthly_cost) by (namespace) > 1000
for: 2h
labels:
severity: ticket
annotations:
summary: "Biaya namespace {{ $labels.namespace }} bulan ini di atas $1000"Tip
Buat analogi biaya per deploy yang mudah dipahami developer: "deploy service ini per hari biaya $X". Angka kecil yang konkret jauh lebih efektif mengubah perilaku daripada dashboard abstrak berisi grafik.
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita membuat developer tidak lagi bergantung pada tiket: self-service developer experience — portal self-service, request workflows, dan approval flow yang mengubah "minta ke platform team" menjadi "klik sendiri". Inilah puncak dari semua abstraksi yang kita bangun!