Dengan penskalaan otomatis pod horizontal, Anda dapat menyesuaikan jumlah Pod yang berjalan secara otomatis untuk workload stateless yang ada di cluster berdasarkan permintaan real-time. Autoscaler menambahkan Pod saat beban meningkat dan menghapusnya saat permintaan menurun, sehingga membantu Anda mempertahankan ketersediaan aplikasi, menggunakan resource secara efisien, dan mengontrol biaya tanpa intervensi manual. Anda dapat melakukan penskalaan berdasarkan metrik resource standar, seperti pemakaian CPU, atau metrik aplikasi kustom dari Prometheus, seperti rasio permintaan HTTP.
Menskalakan deployment
Gunakan fungsi penskalaan Kubernetes untuk menskalakan jumlah pod yang berjalan dalam deployment Anda dengan tepat.
Menskalakan pod deployment secara otomatis
Kubernetes menawarkan penskalaan otomatis untuk menghilangkan kebutuhan untuk memperbarui deployment secara manual saat permintaan berkembang. Selesaikan langkah-langkah berikut untuk menskalakan pod deployment Anda secara otomatis:
Untuk memastikan horizontal pod autoscaler dapat mengukur persentase CPU dengan tepat, tetapkan permintaan resource CPU pada deployment Anda.
Tetapkan horizontal pod autoscaler di deployment Anda:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ -n NAMESPACE \ autoscale deployment DEPLOYMENT_NAME \ --cpu-percent=CPU_PERCENT \ --min=MIN_NUMBER_REPLICAS \ --max=MAX_NUMBER_REPLICASGanti kode berikut:
CLUSTER_KUBECONFIG: file kubeconfig untuk cluster.NAMESPACE: namespace. Untuk cluster bersama, ini harus berupa namespace project. Untuk cluster standar, namespace-nya dapat berupa apa saja.DEPLOYMENT_NAME: nama deployment yang akan diskalakan otomatis.CPU_PERCENT: target pemakaian CPU rata-rata yang akan diminta, yang direpresentasikan sebagai persentase, di semua pod.MIN_NUMBER_REPLICAS: batas bawah untuk jumlah pod yang dapat disediakan oleh autoscaler.MAX_NUMBER_REPLICAS: batas atas jumlah pod yang dapat disediakan oleh autoscaler.
Periksa status terkini horizontal pod autoscaler:
kubectl get hpaOutputnya mirip dengan hal berikut ini:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE DEPLOYMENT_NAME Deployment/DEPLOYMENT_NAME/scale 0% / 50% 1 10 1 18s
Menskalakan pod deployment secara manual
Jika Anda lebih suka menskalakan deployment secara manual, jalankan:
kubectl --kubeconfig CLUSTER_KUBECONFIG \
-n NAMESPACE \
scale deployment DEPLOYMENT_NAME \
--replicas NUMBER_OF_REPLICAS
Ganti kode berikut:
CLUSTER_KUBECONFIG: file kubeconfig untuk cluster.NAMESPACE: namespace. Untuk cluster bersama, ini harus berupa namespace project. Untuk cluster standar, namespace-nya dapat berupa apa saja.DEPLOYMENT_NAME: nama deployment yang akan diskalakan otomatis.DEPLOYMENT_NAME: jumlah objekPodyang direplikasi dalam deployment.
Menggunakan metrik kustom dari Prometheus untuk penskalaan otomatis
Penskalaan otomatis pod horizontal menggunakan metrik resource standar seperti penggunaan CPU dan memori secara default. Metrik standar berfungsi untuk penskalaan umum, tetapi tidak berguna untuk beban aplikasi khusus.
Saat menggunakan penskalaan otomatis pod horizontal dengan metrik kustom dari Prometheus, Anda dapat menskalakan workload berdasarkan metrik khusus aplikasi, seperti rasio permintaan HTTP, kedalaman antrean, dan latensi pemrosesan. Cluster Anda dapat merespons permintaan dunia nyata dengan lebih akurat dengan memanfaatkan data lengkap yang telah dikumpulkan oleh stack pemantauan Prometheus Anda.
Prasyarat untuk menggunakan Prometheus dengan penskalaan otomatis pod horizontal
Sebelum mengaktifkan fitur ini, kondisi berikut harus dipenuhi:
Server Prometheus yang ada: Server Prometheus harus sudah di-deploy dan dapat diakses jaringan dari dalam cluster (pengontrol HPA tidak mengelola instance Prometheus itu sendiri). Untuk mengetahui informasi selengkapnya, lihat Cara men-deploy dan mengonfigurasi Operator Prometheus di Kubernetes.
Izin administratif: Anda harus memiliki izin yang diperlukan untuk mengubah resource kustom Cluster.
Tidak ada konflik API: Pemeriksaan preflight memverifikasi bahwa tidak ada komponen lain yang telah mendaftarkan APIService untuk
custom.metrics.k8s.io. Jika terjadi konflik, adaptor tidak dapat diaktifkan.
Mengaktifkan dan mengonfigurasi Prometheus
Proses ini melibatkan penentuan aturan metrik dan pembaruan konfigurasi cluster:
Buat satu atau beberapa ConfigMap aturan metrik.
Tentukan aturan berbasis PromQL untuk metrik kustom Anda di satu atau beberapa ConfigMap dalam namespace cluster target. Pengontrol mengawasi ConfigMap ini, menggabungkannya, dan menerapkannya secara otomatis ke adaptor.
Untuk mengetahui informasi selengkapnya tentang cara menentukan aturan, lihat Konfigurasi Penemuan dan Presentasi Metrik di kubernetes-sigs/prometheus-adapter.
Contoh berikut menunjukkan ConfigMap dengan aturan yang ditentukan untuk
http_requests_per_seconddi kolomdata:apiVersion: v1 kind: ConfigMap metadata: name: my-app-rules namespace: <cluster-namespace> data: config.yaml: | rules: - seriesQuery: 'http_requests_total' resources: overrides: namespace_name: {resource: "namespace"} pod_name: {resource: "pod"} name: matches: "^(.*)_total$" as: "${1}_per_second" metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[5m])) by (<<.GroupBy>>)'Jika server Prometheus Anda memerlukan autentikasi, seperti mutual transport layer security (mTLS), buat Secret Kubernetes dalam format kubeconfig yang berisi kredensial yang diperlukan.
Contoh berikut menunjukkan Secret yang mendukung autentikasi dasar:
apiVersion: v1 kind: Secret metadata: name: prometheus-auth-secret namespace: <cluster-namespace> annotations: baremetal.cluster.gke.io/mark-source: "true" type: Opaque stringData: config: authentication-credentialsPerbarui resource kustom Cluster:
Tambahkan anotasi
preview.baremetal.cluster.gke.io/metrics-adapter: "true"kemetadatauntuk resource kustom Cluster.Tambahkan bagian
spec.metricsAdapteruntuk menentukan URL Prometheus dan mereferensikan ConfigMap aturan Anda.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: <cluster-name> namespace: <cluster-namespace> annotations: preview.baremetal.cluster.gke.io/metrics-adapter: "true" spec: # ... other existing cluster configurations ... metricsAdapter: prometheus: url: "http://prometheus-k8s.monitoring.svc.cluster.local:9090" orgID: "production-environment" auth: configSecretRef: name: prometheus-auth-secret key: config # This is the key within the Secret's 'data' field rules: configMapKeyRefs: - name: my-app-rules key: config.yaml # This is the key within the ConfigMap's 'data' field # - name: base-system-rules # key: config.yamlJika instance Prometheus Anda tidak memerlukan autentikasi, Anda dapat menghapus bagian
metricsAdapter.prometheus.authdari spesifikasi Cluster.
Terapkan resource kustom Cluster yang telah diupdate.
Pengontrol akan otomatis men-deploy Prometheus Adapter ke dalam namespace
kube-system.Gunakan metrik kustom untuk penskalaan otomatis pod horizontal dengan membuat resource HorizontalPodAutoscaler yang menargetkan metrik kustom yang ditentukan di kolom
rulesConfigMap.Contoh ConfigMap dari langkah sebelumnya menentukan metrik kustom
http_requests_per_second. Untuk menggunakan metrik ini, resource HorizontalPodAutoscaler akan terlihat seperti contoh berikut:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: <name> namespace: <namespace> spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <workload-name> minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: http_requests_per_second target: type: AverageValue averageValue: 10
Menonaktifkan Prometheus
Untuk menonaktifkan penggunaan Prometheus dengan penskalaan otomatis pod horizontal, hapus bagian spec.metricsAdapter dari resource kustom Cluster.