Neste tópico, descrevemos como configurar métricas definidas pelo usuário para escalonamento automático horizontal de pods (HPA) no GKE em VMware.
Como ativar o Logging e o Monitoring para aplicativos do usuário
A configuração do Logging e do Monitoring é
mantida em um objeto do Stackdriver chamado stackdriver
.
Abra o objeto
stackdriver
para edição:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Substitua USER_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster de usuário.
Em
spec
, definaenableStackdriverForApplications
eenableCustomMetricsAdapter
comotrue
:apiVersion: addons.gke.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
Salve e feche o arquivo editado.
Após a conclusão dessas etapas, todos os registros de aplicativo do usuário serão enviados para o Cloud Logging.
A próxima etapa é anotar o aplicativo do usuário para a coleta de métricas.
Anotar um aplicativo de usuário para coletar métricas
Para anotar um aplicativo de usuário a ser extraído e os registros enviados ao Cloud Monitoring, adicione annotations
correspondentes aos metadados do serviço, pod e endpoints.
metadata: name: "example-monitoring" namespace: "default" annotations: prometheus.io/scrape: "true" prometheus.io/path: "" - Overriding metrics path (default "/metrics")
Implantar um aplicativo de usuário de amostra
Nesta seção, você implantará um aplicativo de amostra com registros e métricas compatíveis com o Prometheus.
- Salve os seguintes manifestos de Serviço e Implantação em um arquivo chamado
my-app.yaml
. Observe que o Serviço tem a anotaçãoprometheus.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
Crie a implantação e o serviço:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Usar as métricas personalizadas no HPA
Implante o objeto do HPA para usar a métrica exposta na etapa anterior. Saiba mais sobre os diversos tipos de métricas personalizadas em Como fazer escalonamento automático em métricas diversas e 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
A métrica do tipo pods tem um seletor de métricas padrão para os rótulos dos pods de destino, e é assim que o kube-controller-manager funciona. Neste exemplo, você consulta a métrica example_monitoring_up com um seletor de
{matchLabels: {app: example-monitoring}}
, porque eles estão disponíveis nos pods de destino. Qualquer outro seletor especificado será adicionado à lista. Para evitar o seletor padrão, remova todos os rótulos do pod de destino ou use a métrica "Tipo de objeto".
Verificar se as métricas do aplicativo definidas pelo usuário são usadas pelo HPA
Verifique se as métricas do aplicativo definidas pelo usuário são usadas pelo HPA:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa
A saída será semelhante ao seguinte:
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
Custos
O uso de métricas personalizadas para HPA não gera custos extras. Os usuários são cobrados apenas pelas métricas e registros do aplicativo. Veja mais detalhes na parte de preços do pacote de operações do Google Cloud. O pod para ativar métricas personalizadas consome uma CPU extra de 15 m e 20 MB de memória.