In questo tutorial puoi configurare la scalabilità automatica in base a una delle seguenti metriche:
CPU
Utilizzo CPU
Scala in base alla percentuale di utilizzo delle CPU tra i nodi. Questo può essere un metodo conveniente, in quanto ti consente di massimizzare l'utilizzo delle risorse della CPU. Tuttavia, poiché l'utilizzo della CPU è una metrica finale, gli utenti potrebbero subire una latenza mentre è in corso uno scale up.
Pub/Sub
Backlog Pub/Sub
Scala in base a una metrica esterna che indica il numero di messaggi non confermati rimanenti in una sottoscrizione Pub/Sub. In questo modo, è possibile ridurre efficacemente la latenza prima che diventi un problema, ma potrebbero essere utilizzate relativamente più risorse rispetto alla scalabilità automatica in base all'utilizzo della CPU.
Metrica personalizzata
Metrica Prometheus personalizzata
Scala in base a una metrica personalizzata definita dall'utente, esportata nel formato Prometheus tramite Google Managed Prometheus. La tua metrica Prometheus deve essere di tipo Misuratore.
La scalabilità automatica consiste fondamentalmente nel trovare un equilibrio accettabile tra costi e latenza. Ti consigliamo di sperimentare una combinazione di queste metriche e altre per trovare un criterio adatto alle tue esigenze.
Obiettivi
Questo tutorial spiega le seguenti attività:- Come eseguire il deployment dell'adattatore delle metriche personalizzate.
- Come esportare le metriche dal codice dell'applicazione.
- Come visualizzare le metriche nell'interfaccia di Cloud Monitoring.
- Come eseguire il deployment di una risorsa HorizontalPodAutoscaler (HPA) per scalare l'applicazione in base alle metriche di Cloud Monitoring.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
Per abilitare l'API Kubernetes Engine, segui questi passaggi:- Visita la pagina di Kubernetes Engine nella console Google Cloud.
- Crea o seleziona un progetto.
- Attendi che l'API e i relativi servizi siano abilitati. L'operazione può richiedere diversi minuti.
-
Make sure that billing is enabled for your Google Cloud project.
Puoi seguire questo tutorial utilizzando Cloud Shell, dove sono già installati gli strumenti a riga di comando gcloud
e kubectl
utilizzati in questo tutorial. Se utilizzi Cloud Shell, non è necessario installare questi
strumenti a riga di comando sulla tua workstation.
Per utilizzare Cloud Shell:
- Vai alla console Google Cloud.
Fai clic sul pulsante Attiva Cloud Shell nella parte superiore della finestra della console Google Cloud.
All'interno di un nuovo frame nella parte inferiore della console Google Cloud si apre una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando.
Configurazione dell'ambiente
Imposta la zona predefinita per Google Cloud CLI:
gcloud config set compute/zone zone
Sostituisci quanto segue:
zone
: scegli la zona più vicina a te. Per maggiori informazioni, consulta Regioni e zone.
Imposta le variabili di ambiente
PROJECT_ID
ePROJECT_NUMBER
sul tuo ID e numero di progetto Google Cloud:export PROJECT_ID=project-id export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format 'get(projectNumber)')
Imposta la zona predefinita per Google Cloud CLI:
gcloud config set project $PROJECT_ID
Crea un cluster GKE
Best practice: Per una maggiore sicurezza quando accedi ai servizi Google Cloud, abilita la federazione delle identità per i carichi di lavoro per GKE sul tuo cluster. Anche se questa pagina include esempi che utilizzano il metodo precedente (con la federazione delle identità per i carichi di lavoro per GKE disabilitata), la sua abilitazione migliora la protezione.
Workload Identity
Per creare un cluster con la federazione delle identità per i carichi di lavoro per GKE abilitata, esegui il seguente comando:
gcloud container clusters create metrics-autoscaling --workload-pool=$PROJECT_ID.svc.id.goog
Autenticazione precedente
Per creare un cluster con la federazione delle identità per i carichi di lavoro per GKE disabilitata, esegui il seguente comando:
gcloud container clusters create metrics-autoscaling
Deployment dell'adattatore delle metriche personalizzate
L'adattatore delle metriche personalizzate consente al tuo cluster di inviare e ricevere metriche con Cloud Monitoring.
CPU
Non applicabile: Horizontal Pod Autoscaler può scalare in base all'utilizzo della CPU in modo nativo, quindi l'adattatore delle metriche personalizzate non è necessario.
Pub/Sub
La procedura per installare l'adattatore delle metriche personalizzate varia a seconda che i cluster abbiano abilitata o meno la federazione delle identità per i carichi di lavoro per GKE. Seleziona l'opzione corrispondente alla configurazione che hai scelto quando hai creato il cluster.
Workload Identity
Concedi all'utente la possibilità di creare i ruoli di autorizzazione richiesti:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Esegui il deployment dell'adattatore delle metriche personalizzate nel tuo cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
L'adattatore utilizza il service account Kubernetes custom-metrics-stackdriver-adapter
nello spazio dei nomi custom-metrics
. Consenti a questo service account di leggere le metriche di Cloud Monitoring assegnando il ruolo Visualizzatore Monitoring:
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Autenticazione precedente
Concedi all'utente la possibilità di creare i ruoli di autorizzazione richiesti:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Esegui il deployment dell'adattatore delle metriche personalizzate nel tuo cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Metrica personalizzata
La procedura per installare l'adattatore delle metriche personalizzate varia a seconda che i cluster abbiano abilitata o meno la federazione delle identità per i carichi di lavoro per GKE. Seleziona l'opzione corrispondente alla configurazione che hai scelto quando hai creato il cluster.
Workload Identity
Concedi all'utente la possibilità di creare i ruoli di autorizzazione richiesti:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Esegui il deployment dell'adattatore delle metriche personalizzate nel tuo cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
L'adattatore utilizza il service account Kubernetes custom-metrics-stackdriver-adapter
nello spazio dei nomi custom-metrics
. Consenti a questo service account di leggere le metriche di Cloud Monitoring assegnando il ruolo Visualizzatore Monitoring:
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Autenticazione precedente
Concedi all'utente la possibilità di creare i ruoli di autorizzazione richiesti:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Esegui il deployment dell'adattatore delle metriche personalizzate nel tuo cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Deployment di un'applicazione con metriche
Scarica il repository contenente il codice dell'applicazione per questo tutorial:
CPU
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/quickstarts/hello-app
Pub/Sub
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/databases/cloud-pubsub
Metrica personalizzata
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/observability/custom-metrics-autoscaling/google-managed-prometheus
Il repository contiene il codice che esporta le metriche in Cloud Monitoring:
CPU
Questa applicazione risponde "Hello World!" a qualsiasi richiesta web sulla porta
8080
. Le metriche della CPU di Compute Engine vengono automaticamente
raccolte da Cloud Monitoring.
Pub/Sub
Questa applicazione esegue il polling di una sottoscrizione Pub/Sub per rilevare i nuovi messaggi e inviare un ACK non appena arrivano. Le metriche della sottoscrizione Pub/Sub vengono automaticamente raccolte da Cloud Monitoring.
Metrica personalizzata
Questa applicazione risponde a qualsiasi richiesta web al percorso /metrics
con una
metrica a valore costante utilizzando il formato Prometheus.
Il repository contiene anche un manifest Kubernetes per eseguire il deployment dell'applicazione nel tuo cluster:
CPU
Pub/Sub
Il manifest varia a seconda che i cluster abbiano abilitata o meno la federazione delle identità per i carichi di lavoro per GKE. Seleziona l'opzione corrispondente alla configurazione che hai scelto quando hai creato il cluster.
Workload Identity
Autenticazione precedente
Metrica personalizzata
Con la risorsa PodMonitoring, Google Cloud Managed Service per Prometheus esporta le metriche di Prometheus in Cloud Monitoring:
A partire dalla versione 1.27 di GKE Standard o dalla versione 1.25 di GKE Autopilot, Google Cloud Managed Service per Prometheus è abilitato. Per abilitare Google Cloud Managed Service per Prometheus nei cluster delle versioni precedenti, consulta Abilita raccolta gestita.
Esegui il deployment dell'applicazione nel tuo cluster:
CPU
kubectl apply -f manifests/helloweb-deployment.yaml
Pub/Sub
La procedura per il deployment dell'applicazione varia a seconda che i cluster abbiano abilitata o meno la federazione delle identità per i carichi di lavoro per GKE. Seleziona l'opzione corrispondente alla configurazione che hai scelto quando hai creato il cluster.
Workload Identity
Abilita l'API Pub/Sub sul tuo progetto:
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Crea un argomento e una sottoscrizione Pub/Sub:
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Esegui il deployment dell'applicazione nel tuo cluster:
kubectl apply -f deployment/pubsub-with-workload-identity.yaml
Questa applicazione definisce un service account Kubernetes
pubsub-sa
. Assegna il ruolo Sottoscrittore Pub/Sub per consentire all'applicazione di pubblicare messaggi nell'argomento Pub/Sub.gcloud projects add-iam-policy-binding projects/$PROJECT_ID \ --role=roles/pubsub.subscriber \ --member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/pubsub-sa
Il comando precedente utilizza un identificatore entità, che consente a IAM di fare riferimento direttamente a un account di servizio Kubernetes.
Best practice: Utilizza gli identificatori entità, ma tieni presente la limitazione riportata nella descrizione di un metodo alternativo.
Autenticazione precedente
Abilita l'API Pub/Sub sul tuo progetto:
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Crea un argomento e una sottoscrizione Pub/Sub:
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Crea un service account con accesso a Pub/Sub:
gcloud iam service-accounts create autoscaling-pubsub-sa gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber"
Scarica il file della chiave del service account:
gcloud iam service-accounts keys create key.json \ --iam-account autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com
Importa la chiave del service account nel cluster come secret:
kubectl create secret generic pubsub-key --from-file=key.json=./key.json
Esegui il deployment dell'applicazione nel tuo cluster:
kubectl apply -f deployment/pubsub-with-secret.yaml
Metrica personalizzata
kubectl apply -f custom-metrics-gmp.yaml
Dopo aver atteso il deployment dell'applicazione, tutti i pod raggiungono lo stato Ready
:
CPU
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
helloweb-7f7f7474fc-hzcdq 1/1 Running 0 10s
Pub/Sub
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
pubsub-8cd995d7c-bdhqz 1/1 Running 0 58s
Metrica personalizzata
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
custom-metrics-gmp-865dffdff9-x2cg9 1/1 Running 0 49s
Visualizzazione delle metriche su Cloud Monitoring
Durante l'esecuzione, l'applicazione scrive le metriche in Cloud Monitoring.
Per visualizzare le metriche per una risorsa monitorata con Esplora metriche, segui questi passaggi:
-
Nella console Google Cloud, vai alla pagina leaderboard Esplora metriche:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Nell'elemento Metrica, espandi il menu Seleziona una metrica e poi
seleziona un tipo di risorsa e un tipo di metrica. Ad esempio, per tracciare un grafico sull'utilizzo della CPU di una
macchina virtuale, segui questi passaggi:
- (Facoltativo) Per ridurre le opzioni del menu, inserisci parte del nome della metrica nella
barra dei filtri. Per questo esempio, inserisci
utilization
. - Nel menu Risorse attive, seleziona Istanza VM.
- Nel menu Categorie di metriche attive, seleziona Istanza.
- Nel menu Metriche attive, seleziona Utilizzo CPU e poi fai clic su Applica.
- (Facoltativo) Per ridurre le opzioni del menu, inserisci parte del nome della metrica nella
barra dei filtri. Per questo esempio, inserisci
Per filtrare le serie temporali visualizzate, utilizza l'elemento Filtro.
Per combinare le serie temporali, utilizza i menu dell'elemento Aggregazione. Ad esempio, per visualizzare l'utilizzo della CPU per le VM, in base alla zona, imposta il primo menu su Media e il secondo menu su zona.
Tutte le serie temporali vengono visualizzate quando il primo menu dell'elemento Aggregazione è impostato su Nessuna aggregazione. Le impostazioni predefinite per l'elemento Aggregazione sono determinate dal tipo di metrica che hai selezionato.
Il tipo di risorsa e le metriche sono i seguenti:
CPU
Tipo di risorsa: gce_instance
Metrica: compute.googleapis.com/instance/cpu/utilization
Pub/Sub
Tipo di risorsa: pubsub_subscription
Metrica: pubsub.googleapis.com/subscription/num_undelivered_messages
Metrica personalizzata
Tipo di risorsa: prometheus_target
Metrica: prometheus.googleapis.com/custom_prometheus/gauge
A seconda della metrica, potresti non vedere ancora molta attività su Esplora metriche di Cloud Monitoring. Non sorprenderti se la tua metrica non si aggiorna.
Creazione di un oggetto HorizontalPodAutoscaler
Quando visualizzi la metrica in Cloud Monitoring, puoi eseguire il deployment di un oggetto HorizontalPodAutoscaler
per ridimensionare il deployment in base alla metrica.
CPU
Pub/Sub
Metrica personalizzata
Esegui il deployment di HorizontalPodAutoscaler
nel tuo cluster:
CPU
kubectl apply -f manifests/helloweb-hpa.yaml
Pub/Sub
kubectl apply -f deployment/pubsub-hpa.yaml
Metrica personalizzata
kubectl apply -f custom-metrics-gmp-hpa.yaml
Generazione del carico
Per alcune metriche, potrebbe essere necessario generare carico per monitorare la scalabilità automatica:
CPU
Simula 10.000 richieste al server helloweb
:
kubectl exec -it deployments/helloweb -- /bin/sh -c \
"for i in $(seq -s' ' 1 10000); do wget -q -O- localhost:8080; done"
Pub/Sub
Pubblica 200 messaggi nell'argomento Pub/Sub:
for i in {1..200}; do gcloud pubsub topics publish echo --message="Autoscaling #${i}"; done
Metrica personalizzata
Non applicabile: il codice utilizzato in questo esempio esporta un valore costante di 40
per la metrica personalizzata. HorizontalPodAutoscaler è impostato con un
valore target di 20
, quindi tenta di fare lo scale up del deployment
automaticamente.
Potrebbe essere necessario attendere un paio di minuti prima che HorizontalPodAutoscaler risponda ai cambiamenti delle metriche.
Osservazione dello scale up di HorizontalPodAutoscaler
Puoi controllare il numero attuale delle repliche del tuo deployment eseguendo:
kubectl get deployments
Dopo aver atteso la propagazione della metrica, il deployment crea cinque pod per gestire il backlog.
Puoi anche esaminare lo stato e l'attività recente di HorizontalPodAutoscaler eseguendo:
kubectl describe hpa
Pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
CPU
Elimina il cluster GKE:
gcloud container clusters delete metrics-autoscaling
Pub/Sub
Esegui la pulizia dell'argomento e della sottoscrizione Pub/Sub:
gcloud pubsub subscriptions delete echo-read gcloud pubsub topics delete echo
Elimina il cluster GKE:
gcloud container clusters delete metrics-autoscaling
Metrica personalizzata
Elimina il cluster GKE:
gcloud container clusters delete metrics-autoscaling
Passaggi successivi
Scopri di più sulle metriche personalizzate ed esterne per la scalabilità dei carichi di lavoro.
Esplora altri tutorial su Kubernetes Engine.