Questo documento mostra agli operatori come configurare Google Cloud Managed Service per Prometheus per filtrare e raccogliere metriche Kubernetes specifiche dai cluster e dai carichi di lavoro Google Kubernetes Engine (GKE).
Dovresti già avere familiarità con quanto segue:
Raccolta di metriche in GKE
I componenti di sistema nei cluster GKE emettono ed espongono le metriche Prometheus. Per impostazione predefinita, tutti i cluster importano le metriche di sistema specifiche di GKE. Sono disponibili pacchetti di metriche integrate aggiuntive per importare raccolte curate di metriche per vari componenti.
Indipendentemente dai pacchetti di metriche GKE integrate, puoi configurare manualmente Google Cloud Managed Service per Prometheus per importare metriche Prometheus specifiche. Questa configurazione personalizzata è adatta a casi d'uso come i seguenti:
- Monitora segnali specifici nel cluster e nei carichi di lavoro.
- Ottimizza i costi disattivando i pacchetti di metriche di cui non hai bisogno e importando solo un sottoinsieme di metriche.
- Raccogli le metriche emesse dai componenti, ma non incluse in un pacchetto di metriche.
Per gli operatori, metriche
dei nodi, emesse dal processo kubelet su ogni nodo, potrebbero essere utili per
monitorare i carichi di lavoro e i nodi per segnali specifici.
Risorse personalizzate per la raccolta di metriche
Per filtrare e importare una metrica specifica, configura le regole di rietichettatura di Prometheus in una delle seguenti risorse personalizzate:
PodMonitoring: configura la raccolta di metriche dai pod in uno spazio dei nomi specifico.ClusterPodMonitoring: configura la raccolta di metriche dai pod in qualsiasi spazio dei nomi.ClusterNodeMonitoring: configura la raccolta di metriche dai componenti dei nodi comekubelete cAdvisor.
Duplicazione delle metriche
Se filtri una metrica inclusa anche in un pacchetto di metriche attivo per un cluster, la metrica viene visualizzata più volte in Google Cloud Managed Service per Prometheus. Ad esempio, se nel cluster è abilitato il pacchetto di metriche
KUBELET e configuri la raccolta della metrica
kubelet_running_containers, vedrai valori duplicati.
Per evitare la duplicazione, verifica che le metriche che stai raccogliendo non siano incluse in uno dei pacchetti di metriche attivi. Per ulteriori informazioni sulle metriche incluse, consulta i seguenti pacchetti di metriche:
- Metriche di sistema GKE
- Metriche del piano di controllo
- Metriche di stato degli oggetti Kubernetes
- Metriche cAdvisor e
kubelet - Metriche NVIDIA DCGM
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Verifica di disporre delle autorizzazioni richieste per questo documento.
- Utilizza un cluster GKE esistente o creane uno nuovo.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per raccogliere e visualizzare le metriche, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Crea risorse Kubernetes nel cluster:
Kubernetes Engine Developer (
roles/container.developer) -
Visualizza le metriche in Monitoring:
Monitoring Viewer (
roles/monitoring.viewer)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Abilita Google Cloud Managed Service per Prometheus
Google Cloud Managed Service per Prometheus è abilitato per impostazione predefinita in tutti i cluster GKE e non può essere disattivato nei cluster Autopilot. Se utilizzi un cluster Autopilot, vai alla sezione Configura la raccolta di metriche.
Per verificare che Google Cloud Managed Service per Prometheus sia abilitato nel cluster Standard, seleziona una delle seguenti opzioni:
Console
Nella Google Cloud console, vai alla pagina Cluster Kubernetes.
Nella riga del cluster che vuoi controllare, fai clic su Azioni > Modifica. Viene visualizzata la pagina Dettagli cluster.
Nella sezione Funzionalità, controlla il valore nel campo Managed Service per Prometheus. Se il valore è Abilitato, vai alla sezione Configura la raccolta di metriche. Se il valore è Disabilitato, abilita Google Cloud Managed Service per Prometheus:
- Fai clic su Modifica Managed Service per Prometheus. Viene visualizzata la finestra di dialogo Modifica Managed Service per Prometheus.
- Seleziona la casella di controllo Abilita Managed Service per Prometheus.
- Fai clic su Salva modifiche.
gcloud
Verifica se Google Cloud Managed Service per Prometheus è abilitato nel cluster:
gcloud container clusters describe CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--format='value(monitoringConfig.managedPrometheusConfig.enabled)'
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster Standard.CONTROL_PLANE_LOCATION: la regione o la zona del piano di controllo del cluster, ad esempious-central1ous-central1-a.
Se l'output è True, Google Cloud Managed Service per Prometheus è abilitato.
Se l'output è False, abilita Google Cloud Managed Service per Prometheus:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-managed-prometheus
Configura la raccolta di metriche
Per configurare Google Cloud Managed Service per Prometheus in modo che importi una metrica emessa specifica, devi disporre delle seguenti informazioni sulla metrica:
- Il nome della metrica, ad esempio
kubelet_working_pods. - L'endpoint che espone la metrica, ad esempio
/metrics/cadvisoro/metrics.
Per trovare le metriche e configurare la raccolta, segui questi passaggi:
Trova una metrica nella documentazione di riferimento per il componente specifico. Ad esempio, puoi utilizzare le seguenti risorse per trovare una metrica del nodo:
Controlla i pacchetti di metriche attivi per il cluster:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --flatten=monitoringConfig.componentConfig \ --format='value(enableComponents)'L'output è simile al seguente:
SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGMVerifica se la metrica che vuoi raccogliere è in uno di questi pacchetti attivi utilizzando le informazioni in Metriche disponibili. Se la metrica è inclusa in un pacchetto di metriche attivo, in Monitoring potrebbero essere visualizzate metriche duplicate. Se la metrica non è in un pacchetto di metriche attivo, vai al passaggio successivo.
(Facoltativo) Per verificare che la metrica sia disponibile nell'endpoint delle metriche, esegui una query sull'endpoint utilizzando il
kubectl get --rawcomando. Ad esempio, il seguente comando esegue una query sull'endpoint/metricsper la metricakubelet_working_pods:kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"Sostituisci
NODE_NAMEcon il nome del nodo su cui eseguire la query.L'output è simile al seguente, il che indica che la metrica è disponibile:
# HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible. # TYPE kubelet_working_pods gauge kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8 kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1 kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0Dopo aver identificato la metrica che vuoi raccogliere, utilizza una regola di rietichettatura di Prometheus in una risorsa personalizzata PodMonitoring, ClusterPodMonitoring o ClusterNodeMonitoring per filtrare la metrica. La risorsa personalizzata che utilizzi dipende dalle proprietà della metrica, come descritto nella sezione Risorse personalizzate per la raccolta di metriche.
Ad esempio, esamina il seguente manifest ClusterNodeMonitoring:
apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-pod-counts spec: selector: matchLabels: {} endpoints: - path: "/metrics" scheme: "https" interval: "30s" tls: insecureSkipVerify: true # metricRelabeling specifies the metrics to ingest. The metrics must be # available at the specified endpoint. metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_(active|working)_podsQuesto manifest ha le seguenti proprietà:
- Il campo
selector.matchLabelsè un insieme vuoto ({}), che corrisponde a tutti i nodi. - Il campo
endpoints.pathidentifica l'endpoint delle metriche da eseguire lo scraping. - Il campo
metricRelabelingidentifica le metriche specifiche da raccogliere. In questo esempio, Google Cloud Managed Service per Prometheus raccoglie le metriche con i nomikubelet_active_podsekubelet_working_podsdall'endpoint.
- Il campo
Quando esegui il deployment della risorsa personalizzata, Google Cloud Managed Service per Prometheus importa le metriche che corrispondono alla configurazione specificata. Puoi visualizzare ed eseguire query su queste metriche utilizzando gli stessi metodi utilizzati per altre metriche, ad esempio Cloud Monitoring.
Verifica la raccolta di metriche per un carico di lavoro di esempio
I seguenti passaggi mostrano come configurare Google Cloud Managed Service per Prometheus per raccogliere le metriche PSI (Pressure Stall Information) da cAdvisor. In questi passaggi di esempio, crei un ClusterNodeMonitoring (perché cAdvisor è un componente del nodo), crei un pod di test che attiva le metriche PSI e poi verifichi che le metriche vengano visualizzate in Monitoring. Per raccogliere le metriche PSI in questo esempio, il cluster deve eseguire GKE versione 1.35 o successive.
Crea un pod di test che attivi le metriche PSI da cAdvisor:
Salva il seguente pod come
psi-pod.yaml:apiVersion: v1 kind: Pod metadata: name: cpu-pressure-pod spec: restartPolicy: Never containers: - name: cpu-stress image: registry.k8s.io/e2e-test-images/agnhost:2.47 args: - "stress" - "--cpus" - "1" resources: limits: cpu: "500m" requests: cpu: "500m"Crea il pod:
kubectl apply -f psi-pod.yaml
Verifica che le metriche PSI non siano già in Monitoring:
Nella Google Cloud console, vai alla pagina Esplora metriche.
Nella sezione Query, nel campo Metrica, prova a selezionare la metrica
prometheus/container_pressure_cpu_stalled_seconds_total/counter. Se non vedi un risultato di ricerca, le metriche PSI non vengono raccolte.
Crea un ClusterNodeMonitoring per filtrare le metriche PSI:
Salva il seguente manifest ClusterNodeMonitoring come
psi-prometheus-collector.yaml:apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: psi-collector spec: selector: matchLabels: {} endpoints: - path: /metrics/cadvisor scheme: https interval: 30s tls: insecureSkipVerify: true metricRelabeling: - action: keep sourceLabels: [__name__] regex: container_pressure_(cpu|memory|io)_(waiting|stalled)_seconds_totalCrea il ClusterNodeMonitoring:
kubectl apply -f psi-prometheus-collector.yaml
Potrebbero essere necessari fino a 10 minuti prima che la metrica venga visualizzata in Monitoring.
Nella Google Cloud console, verifica che le metriche PSI vengano visualizzate in Monitoring:
Vai alla pagina Esplora metriche.
Nella sezione Query, nel campo Metrica, seleziona la metrica
prometheus/container_pressure_cpu_stalled_seconds_total/counter.(Facoltativo) Nel menu a discesa Filtro, seleziona il cluster.
La sezione Risultati mostra un grafico con la metrica PSI raccolta.
Passaggi successivi
- Esplora i pacchetti di metriche disponibili in GKE
- Configura il monitoraggio automatico delle applicazioni per i carichi di lavoro
- Crea e gestisci dashboard di Monitoring personalizzate