Questo argomento descrive come configurare le metriche definite dall'utente per la scalabilità automatica pod orizzontale (HPA) nei cluster Anthos su VMware (GKE on-prem).
Abilitazione di Logging e Monitoring per le applicazioni utente
La configurazione per Logging e Monitoring è
contenuta in un oggetto Stackdriver denominato stackdriver
.
Apri l'oggetto
stackdriver
per la modifica:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.
In
spec
, imposta siaenableStackdriverForApplications
cheenableCustomMetricsAdapter
sutrue
:apiVersion: addons.sigs.k8s.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: project-id clusterName: cluster-name clusterLocation: cluster-location proxyConfigSecretName: secret-name enableStackdriverForApplications: true enableCustomMetricsAdapter: true scalableMonitoring: true enableVPC: stackdriver-enable-VPC optimizedMetrics: true
Salva e chiudi il file modificato.
Una volta completati questi passaggi, tutti i log dell'applicazione utente vengono inviati a Cloud Logging.
Il passaggio successivo consiste nell'annotazione dell'applicazione utente per la raccolta di metriche.
Annota un'applicazione utente per la raccolta di metriche
Per annotare un'applicazione utente da estrarre e i log inviati a Cloud Monitoring, devi aggiungere annotations
corrispondenti ai metadati per il servizio, al pod e agli endpoint.
metadata: name: "example-monitoring" namespace: "default" annotations: prometheus.io/scrape: "true" prometheus.io/path: "" - Overriding metrics path (default "/metrics")
Esegui il deployment di un'applicazione utente di esempio
In questa sezione eseguirai il deployment di un'applicazione di esempio con log e metriche compatibili con prometheus.
- Salva i seguenti manifest di servizio e deployment in un file denominato
my-app.yaml
. Nota che il servizio ha l'annotazioneprometheus.io/scrape: "true"
:
kind: Service
apiVersion: v1
metadata:
name: "example-monitoring"
namespace: "default"
annotations:
prometheus.io/scrape: "true"
spec:
selector:
app: "example-monitoring"
ports:
- name: http
port: 9090
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: "example-monitoring"
namespace: "default"
labels:
app: "example-monitoring"
spec:
replicas: 1
selector:
matchLabels:
app: "example-monitoring"
template:
metadata:
labels:
app: "example-monitoring"
spec:
containers:
- image: gcr.io/google-samples/prometheus-example-exporter:latest
name: prometheus-example-exporter
imagePullPolicy: Always
command:
- /bin/sh
- -c
- ./prometheus-example-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
resources:
requests:
cpu: 100m
Crea il deployment e il servizio:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Utilizzare le metriche personalizzate in HPA
Esegui il deployment dell'oggetto HPA per utilizzare la metrica esposta nel passaggio precedente. Per ulteriori informazioni sui diversi tipi di metriche personalizzate, consulta Scalabilità automatica in più metriche e metriche personalizzate.
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: example-monitoring-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-monitoring minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: example_monitoring_up target: type: AverageValue averageValue: 20
La metrica Tipo di pod ha un selettore di metriche predefinito per le etichette dei pod di destinazione, ossia come funziona kube-controller-maneger. In questo esempio, esegui la query sulla metrica example_monitoring_up con un selettore di {matchLabels: {app: example-monitoring}}
, poiché sono disponibili nei pod di destinazione. Eventuali altri selettori specificati vengono aggiunti all'elenco. Per evitare il selettore predefinito, puoi rimuovere qualsiasi etichetta sul pod di destinazione o utilizzare la metrica Tipo di oggetto.
Verifica che le metriche delle applicazioni definite dall'utente siano utilizzate da HPA
Verifica che le metriche delle applicazioni definite dall'utente vengano utilizzate da HPA:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa
L'output avrà il seguente aspetto:
Name: example-monitoring-hpa Namespace: default Labels:Annotations: CreationTimestamp: Mon, 19 Jul 2021 16:00:40 -0800 Reference: Deployment/example-monitoring Metrics: ( current / target ) "example_monitoring_up" on pods: 1 / 20 Min replicas: 1 Max replicas: 5 Deployment pods: 1 current / 1 desired Conditions: Type Status Reason Message
AbleToScale True ReadyForNewScale recommended size matches current size ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric example_monitoring_up ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Costi
L'uso delle metriche personalizzate per HPA non comporta costi aggiuntivi. Gli utenti pagano solo per le metriche e i log delle applicazioni. Per i dettagli, consulta i prezzi della suite operativa di Google Cloud. Il pod per l'abilitazione delle metriche personalizzate consuma una CPU aggiuntiva di 15 m e 20 MB di memoria.