Kubernetes adalah platform open-source yang sangat populer untuk mengelola kontainer aplikasi, yang memungkinkan pengguna untuk menjalankan dan menskalakan aplikasi secara otomatis di lingkungan yang terdistribusi. Salah satu fitur yang paling menarik dari Kubernetes adalah kemampuannya untuk secara otomatis menskalakan aplikasi naik atau turun berdasarkan permintaan, yang dikenal dengan istilah auto-scaling. Fitur ini penting karena dapat memastikan aplikasi tetap berjalan dengan efisien dan responsif terhadap perubahan beban tanpa memerlukan intervensi manual.
Apa itu Auto-scaling di Kubernetes?
Auto-scaling adalah mekanisme yang memungkinkan sistem untuk menyesuaikan jumlah sumber daya yang digunakan, baik dalam hal jumlah pod, replika, atau bahkan sumber daya seperti CPU dan memori, berdasarkan permintaan aplikasi secara real-time. Dengan auto-scaling, Kubernetes dapat secara otomatis menambah atau mengurangi jumlah pod yang menjalankan aplikasi, sesuai dengan metrik kinerja tertentu. Ini membantu aplikasi tetap responsif meskipun terjadi lonjakan trafik atau penurunan beban, yang pada gilirannya menghemat biaya operasional.
Tiga Jenis Auto-scaling di Kubernetes
Kubernetes menyediakan beberapa jenis auto-scaling yang dapat digunakan secara terpisah atau bersama-sama, tergantung pada kebutuhan aplikasi. Berikut adalah tiga jenis auto-scaling yang paling umum di Kubernetes:
Horizontal Pod Autoscaler (HPA)
Horizontal Pod Autoscaler adalah fitur utama dalam Kubernetes untuk auto-scaling. HPA bekerja dengan memantau metrik kinerja seperti penggunaan CPU atau memori dari pod yang ada dan menyesuaikan jumlah replika pod berdasarkan metrik tersebut.
Contoh penggunaannya adalah sebagai berikut: jika aplikasi yang berjalan di dalam Kubernetes menerima beban tinggi (misalnya, banyak permintaan API), HPA dapat menambah jumlah pod untuk menangani beban tersebut. Sebaliknya, jika beban berkurang, HPA akan mengurangi jumlah pod untuk menghemat sumber daya.
Kubernetes memungkinkan kita untuk menentukan target utilization atau penggunaan target untuk metrik seperti CPU atau memori. Jika penggunaan CPU suatu pod melebihi nilai yang ditetapkan, HPA akan menambah pod, dan jika nilai tersebut turun di bawah target, HPA akan mengurangi jumlah pod yang berjalan.
Contoh konfigurasi HPA dengan target penggunaan CPU adalah sebagai berikut:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: example-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: example-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Dalam contoh di atas, HPA akan memastikan bahwa rata-rata penggunaan CPU tidak melebihi 50%, dan akan menambah atau mengurangi jumlah pod antara 1 hingga 10 pod sesuai dengan kebutuhan.
Vertical Pod Autoscaler (VPA)
Berbeda dengan HPA yang berfokus pada jumlah pod, Vertical Pod Autoscaler (VPA) mengubah alokasi sumber daya pada tingkat pod individu, seperti jumlah CPU atau memori yang dialokasikan ke pod. VPA dapat mengatur konfigurasi sumber daya untuk setiap pod berdasarkan pemantauan penggunaan aktual.
VPA sangat berguna untuk aplikasi yang tidak dapat dengan mudah dipecah menjadi beberapa pod atau untuk aplikasi yang lebih cocok untuk berjalan di dalam satu pod dengan lebih banyak sumber daya. VPA akan secara otomatis menyesuaikan alokasi CPU atau memori yang dibutuhkan agar pod tetap berjalan secara efisien.
Contoh pengaturan VPA untuk deployment adalah sebagai berikut:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: example-vpa
namespace: default
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: example-deployment
updatePolicy:
updateMode: "Auto"
Dalam konfigurasi ini, VPA akan secara otomatis menyesuaikan sumber daya (CPU dan memori) yang diperlukan untuk pod dalam deployment yang dituju.
Cluster Autoscaler (CA)
Sementara HPA dan VPA berfokus pada pengaturan skala pod, Cluster Autoscaler mengelola skala sumber daya di level klaster. Cluster Autoscaler akan menambah atau mengurangi jumlah node di klaster Kubernetes sesuai dengan kebutuhan aplikasi dan kapasitas klaster. Jika aplikasi membutuhkan lebih banyak pod dan kapasitas node yang ada tidak cukup, Cluster Autoscaler akan menambah node baru. Sebaliknya, jika ada node yang tidak digunakan, Cluster Autoscaler akan menghapus node tersebut untuk menghemat biaya.
Cluster Autoscaler bekerja dengan mengamati pod yang sedang dijadwalkan di dalam klaster dan memastikan bahwa jumlah node yang ada cukup untuk menampung semua pod yang terjadwal. Jika kapasitas klaster mencapai batas, CA akan menambah node, dan jika kapasitas berlebih, CA akan mengurangi node.
Manfaat Auto-scaling di Kubernetes
Auto-scaling di Kubernetes memberikan banyak manfaat, terutama dalam konteks aplikasi yang harus dapat menangani fluktuasi trafik yang besar dan tidak dapat diprediksi. Beberapa manfaat utamanya adalah:
- Efisiensi Sumber Daya: Dengan menskalakan aplikasi berdasarkan kebutuhan, Kubernetes dapat mengoptimalkan penggunaan sumber daya. Ini berarti Anda hanya menggunakan sumber daya yang diperlukan saat aplikasi membutuhkan lebih banyak daya komputasi, sehingga mengurangi biaya operasional.
- Ketersediaan dan Keandalan: Auto-scaling membantu aplikasi tetap tersedia meskipun terjadi lonjakan beban. Misalnya, jika aplikasi menerima trafik lebih banyak dari biasanya, Kubernetes akan otomatis menambah jumlah pod untuk menjaga kinerja aplikasi tetap stabil.
- Skalabilitas Dinamis: Auto-scaling memungkinkan aplikasi untuk menyesuaikan kapasitasnya secara dinamis sesuai dengan kebutuhan yang berubah, tanpa memerlukan intervensi manual atau prediksi yang rumit.
- Manajemen yang Lebih Sederhana: Dengan auto-scaling, tim pengembang dan operasi tidak perlu lagi khawatir tentang merencanakan kapasitas secara manual atau memonitor kapasitas aplikasi sepanjang waktu.
Kesimpulan
Auto-scaling di Kubernetes adalah fitur yang sangat penting untuk memastikan aplikasi berjalan dengan efisien dan responsif terhadap fluktuasi beban. Dengan Horizontal Pod Autoscaler, Vertical Pod Autoscaler, dan Cluster Autoscaler, Kubernetes dapat menskalakan aplikasi secara otomatis baik di level pod, sumber daya, maupun node. Dengan begitu, Kubernetes membantu tim IT untuk mengelola aplikasi dengan lebih baik, menghemat biaya, dan memastikan ketersediaan yang tinggi tanpa memerlukan manajemen manual yang rumit. Ini adalah salah satu alasan mengapa Kubernetes sangat populer dalam pengelolaan aplikasi modern berbasis kontainer.