La scalabilità automatica orizzontale dei pod ti consente di regolare automaticamente il numero di pod in esecuzione per i workload stateless esistenti nel tuo cluster in base alla domanda in tempo reale. Il gestore della scalabilità automatica aggiunge pod quando il carico aumenta e li rimuove quando la domanda diminuisce, il che ti aiuta a mantenere la disponibilità dell'applicazione, a utilizzare le risorse in modo efficiente e a controllare i costi senza interventi manuali. Puoi eseguire la scalabilità in base alle metriche delle risorse standard, come l'utilizzo della CPU, o alle metriche delle applicazioni personalizzate di Prometheus, come i tassi di richieste HTTP.
Scala un deployment
Utilizza la funzionalità di scalabilità di Kubernetes per scalare in modo appropriato la quantità di pod in esecuzione nel tuo deployment.
Scala automaticamente i pod di un deployment
Kubernetes offre la scalabilità automatica per eliminare la necessità di aggiornare manualmente il deployment quando la domanda evolve. Completa i seguenti passaggi per scalare automaticamente i pod del tuo deployment:
Per assicurarti che il gestore della scalabilità automatica orizzontale dei pod possa misurare correttamente la percentuale di CPU, imposta la richiesta di risorse della CPU sul tuo deployment.
Imposta il gestore della scalabilità automatica orizzontale dei pod nel tuo deployment:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ -n NAMESPACE \ autoscale deployment DEPLOYMENT_NAME \ --cpu-percent=CPU_PERCENT \ --min=MIN_NUMBER_REPLICAS \ --max=MAX_NUMBER_REPLICASSostituisci quanto segue:
CLUSTER_KUBECONFIG: il file kubeconfig del cluster.NAMESPACE: lo spazio dei nomi. Per i cluster condivisi, deve essere uno spazio dei nomi del progetto. Per i cluster standard, può essere qualsiasi spazio dei nomi.DEPLOYMENT_NAME: il nome del deployment da scalare automaticamente.CPU_PERCENT: l'utilizzo medio della CPU target da richiedere, rappresentato come percentuale, su tutti i pod.MIN_NUMBER_REPLICAS: il limite inferiore per il numero di pod di cui il gestore della scalabilità automatica può eseguire il provisioning.MAX_NUMBER_REPLICAS: il limite massimo per il numero di pod di cui il gestore della scalabilità automatica può eseguire il provisioning.
Controlla lo stato attuale del gestore della scalabilità automatica orizzontale dei pod:
kubectl get hpaL'output è simile al seguente:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE DEPLOYMENT_NAME Deployment/DEPLOYMENT_NAME/scale 0% / 50% 1 10 1 18s
Scala manualmente i pod di un deployment
Se preferisci scalare manualmente un deployment, esegui:
kubectl --kubeconfig CLUSTER_KUBECONFIG \
-n NAMESPACE \
scale deployment DEPLOYMENT_NAME \
--replicas NUMBER_OF_REPLICAS
Sostituisci quanto segue:
CLUSTER_KUBECONFIG: il file kubeconfig del cluster.NAMESPACE: lo spazio dei nomi. Per i cluster condivisi, deve essere uno spazio dei nomi del progetto. Per i cluster standard, può essere qualsiasi spazio dei nomi.DEPLOYMENT_NAME: il nome del deployment in cui eseguire la scalabilità automatica.DEPLOYMENT_NAME: il numero di oggettiPodreplicati nel deployment.
Utilizza le metriche personalizzate di Prometheus per la scalabilità automatica
Per impostazione predefinita, la scalabilità automatica orizzontale dei pod utilizza metriche delle risorse standard, come l'utilizzo della CPU e della memoria. Le metriche standard funzionano per la scalabilità generale, ma non sono utili per i carichi di applicazioni specializzate.
Quando utilizzi la scalabilità automatica orizzontale dei pod con metriche personalizzate di Prometheus, puoi scalare i workload in base a metriche specifiche dell'applicazione, come tassi di richieste HTTP, profondità della coda e latenza di elaborazione. Il cluster può rispondere in modo più accurato alla domanda reale sfruttando i dati dettagliati già raccolti dallo stack di monitoraggio di Prometheus.
Prerequisiti per l'utilizzo di Prometheus con la scalabilità automatica orizzontale dei pod
Prima di attivare la funzionalità, devono essere soddisfatte le seguenti condizioni:
Server Prometheus esistente: un server Prometheus deve essere già stato sottoposto a deployment e deve essere accessibile dalla rete all'interno del cluster (il controller HPA non gestisce l'istanza Prometheus stessa). Per saperne di più, consulta How to deploy and configure the Prometheus Operator in Kubernetes.
Autorizzazioni amministrative: devi disporre delle autorizzazioni necessarie per modificare la risorsa personalizzata Cluster.
Nessun conflitto API: un controllo preflight verifica che nessun altro componente abbia già registrato un APIService per
custom.metrics.k8s.io. Se esiste un conflitto, l'adattatore non può essere attivato.
Abilita e configura Prometheus
Il processo prevede la definizione delle regole delle metriche e l'aggiornamento della configurazione del cluster:
Crea uno o più ConfigMap delle regole delle metriche.
Definisci le regole basate su PromQL per le metriche personalizzate in uno o più ConfigMap all'interno dello spazio dei nomi del cluster di destinazione. Il controller controlla questi ConfigMap, li unisce e li applica automaticamente all'adattatore.
Per saperne di più sulla definizione delle regole, consulta Metrics Discovery and Presentation Configuration in kubernetes-sigs/prometheus-adapter.
L'esempio seguente mostra un ConfigMap con regole definite per
http_requests_per_secondnel campodata: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>>)'Se il tuo server Prometheus richiede l'autenticazione, ad esempio la sicurezza del livello di trasporto reciproco (mTLS), crea un secret Kubernetes nel formato kubeconfig contenente le credenziali necessarie.
L'esempio seguente mostra un secret che supporta l'autenticazione di base:
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-credentialsAggiorna la risorsa personalizzata Cluster:
Aggiungi l'annotazione
preview.baremetal.cluster.gke.io/metrics-adapter: "true"ametadataper la risorsa personalizzata Cluster.Aggiungi la sezione
spec.metricsAdapterper definire l'URL di Prometheus e fai riferimento ai ConfigMap delle regole.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.yamlSe l'istanza Prometheus non richiede l'autenticazione, puoi omettere la sezione
metricsAdapter.prometheus.authdalla specifica del cluster.
Applica la risorsa personalizzata Cluster aggiornata.
Il controller esegue automaticamente il deployment dell'adattatore Prometheus nello spazio dei nomi
kube-system.Utilizza le metriche personalizzate per la scalabilità automatica orizzontale dei pod creando una risorsa HorizontalPodAutoscaler che ha come target le metriche personalizzate definite nei campi
rulesdi ConfigMap.L'esempio di ConfigMap di un passaggio precedente ha definito una metrica personalizzata
http_requests_per_second. Per utilizzare questa metrica, la risorsa HorizontalPodAutoscaler deve essere simile al seguente esempio: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
Disabilita Prometheus
Per disattivare l'utilizzo di Prometheus con la scalabilità automatica orizzontale dei pod, rimuovi la sezione spec.metricsAdapter dalla risorsa personalizzata Cluster.