En este tema, se describe cómo configurar métricas definidas por el usuario para el ajuste de escala automático horizontal de Pods (HPA) en clústeres de Anthos alojados en VMware (GKE On-Prem).
Habilita Logging y Monitoring para las aplicaciones de usuario
La configuración de Logging y Monitoring se conserva en un objeto de Stackdriver llamado stackdriver
.
Abre el objeto
stackdriver
para editarlo:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Reemplaza USER_CLUSTER_KUBECONFIG con la ruta de tu archivo kubeconfig del clúster de usuario.
En
spec
, configuraenableStackdriverForApplications
yenableCustomMetricsAdapter
comotrue
: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
Guarda y cierra el archivo editado.
Una vez que se completan estos pasos, todos los registros de la aplicación del usuario se envían a Cloud Logging.
El siguiente paso es anotar la aplicación de usuario para la recopilación de métricas.
Anota una aplicación de usuario para la recopilación de métricas
Para anotar una aplicación de usuario que se debe recopilar y los registros enviados a Cloud Monitoring, debes agregar annotations
correspondiente a los metadatos del servicio, el pod y los extremos.
metadata: name: "example-monitoring" namespace: "default" annotations: prometheus.io/scrape: "true" prometheus.io/path: "" - Overriding metrics path (default "/metrics")
Implementa una aplicación de usuario de ejemplo
En esta sección, implementarás una aplicación de ejemplo con registros y métricas compatibles con Prometheus.
- Guarda los siguientes manifiestos de Service y Deployment en un archivo llamado
my-app.yaml
. Ten en cuenta que el Service tiene la anotaciónprometheus.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 el Deployment y el Service:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Usa las métricas personalizadas en HPA
Implementa el objeto de HPA para usar la métrica expuesta en el paso anterior. Consulta Ajuste de escala automático en varias métricas y métricas personalizadas para obtener información más avanzada sobre diferentes tipos de métricas personalizadas.
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 métrica de tipo de pods tiene un selector de métrica predeterminado para las etiquetas de los pods de destino, que funciona de la misma manera kube-controller-maneger. En este ejemplo, puedes consultar la métrica example_monitoring_up con un selector de {matchLabels: {app: example-monitoring}}
, ya que están disponibles en los pods de destino. Cualquier otro selector especificado se agrega a la lista. Para evitar el selector predeterminado, puedes quitar cualquier etiqueta en el Pod de destino o usar la métrica Tipo de objeto.
Verifica que HPA use las métricas de la aplicación definidas por el usuario
Verifica que HPA use las métricas de la aplicación definidas por el usuario:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa
El resultado se verá así:
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
Costos
El uso de métricas personalizadas para HPA no genera cargos adicionales. A los usuarios solo se les cobra por las métricas y los registros de las aplicaciones. Consulta los precios de Google Cloud's operations suite para obtener más detalles. El pod para habilitar métricas personalizadas consume 15 m adicionales de CPU y 20 MB de memoria.