Dokumen ini menjelaskan cara menyiapkan penskalaan otomatis pod horizontal untuk workload stateless yang ada yang berjalan di cluster Anda. Penskalaan otomatis pod horizontal secara otomatis menyesuaikan jumlah Pod (replika) yang berjalan untuk aplikasi berdasarkan permintaan real-time, menghapus Pod saat beban berkurang dan menambahkan Pod saat beban meningkat. Penskalaan ini sangat penting untuk memastikan ketersediaan aplikasi, penggunaan resource yang efisien, dan penghematan biaya dengan mencocokkan kapasitas secara tepat dengan traffic pengguna tanpa intervensi manual. Seiring berkembangnya persyaratan beban kerja container Anda, penskalaan otomatis pod menghilangkan kebutuhan operator untuk terus memantau performa dan menyesuaikan jumlah pod secara manual.
Halaman ini ditujukan bagi Admin, arsitek, dan Operator yang mengelola siklus proses infrastruktur teknologi dasar. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE Enterprise umum. Google Cloud
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 memperbarui deployment secara manual saat permintaan berubah. Selesaikan langkah-langkah berikut untuk menskalakan pod deployment Anda secara otomatis:
Untuk memastikan penskalaan otomatis pod horizontal dapat mengukur persentase CPU dengan tepat, tetapkan permintaan resource CPU pada deployment Anda.
Tetapkan penskalaan otomatis pod horizontal 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 namespace apa pun.DEPLOYMENT_NAME: nama deployment yang akan disesuaikan skalanya secara otomatis.CPU_PERCENT: target pemakaian CPU rata-rata yang akan diminta, dinyatakan sebagai persentase, di semua pod.MIN_NUMBER_REPLICAS: batas bawah untuk jumlah pod yang dapat disediakan oleh autoscaler.MAX_NUMBER_REPLICAS: batas atas untuk 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 namespace apa pun.DEPLOYMENT_NAME: nama deployment yang akan di-autoscaling.DEPLOYMENT_NAME: jumlah objekPodyang direplikasi dalam deployment.
Menggunakan metrik kustom dari Prometheus untuk penskalaan otomatis
Penskalaan otomatis pod horizontal menggunakan metrik resource standar seperti pemakaian 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 kecepatan 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 melalui jaringan dari dalam cluster (pengontrol HPA tidak mengelola instance Prometheus itu sendiri). Untuk mengetahui informasi selengkapnya, lihat Cara men-deploy dan mengonfigurasi Prometheus Operator di Kubernetes.
Izin administratif: Anda harus memiliki izin yang diperlukan untuk mengubah resource kustom Cluster.
Tidak ada konflik API: Pemeriksaan pra-penerbangan memverifikasi bahwa tidak ada komponen lain yang telah mendaftarkan APIService untuk
custom.metrics.k8s.io. Jika ada konflik, adaptor tidak dapat diaktifkan.
Mengaktifkan dan mengonfigurasi Prometheus
Proses ini melibatkan penentuan aturan metrik dan memperbarui konfigurasi cluster:
Buat satu atau beberapa ConfigMap aturan metrik.
Tentukan aturan berbasis PromQL untuk metrik kustom Anda dalam satu atau beberapa ConfigMap dalam namespace cluster target. Pengontrol memantau ConfigMap ini, menggabungkannya, dan menerapkannya secara otomatis ke adapter.
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 merujuk 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 ConfigMap
rules.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.