Activer les métriques personnalisées définies par l'utilisateur pour l'autoscaling horizontal des pods

Cette rubrique explique comment configurer des métriques définies par l'utilisateur pour l'autoscaling horizontal des pods (HPA, Horizontal Pod Autoscaling) dans Anthos Clusters on VMware (GKE On-Prem) .

Activer Logging et Monitoring pour les applications utilisateur

La configuration de Logging et Monitoring se trouve dans un objet Stackdriver nommé stackdriver.

  1. Ouvrez l'objet stackdriver à modifier :

    kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
    

    Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès du fichier kubeconfig de votre cluster d'utilisateur.

  2. Sous spec, définissez enableStackdriverForApplications et enableCustomMetricsAdapter sur true :

    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
    enableVPC: stackdriver-enable-VPC
    optimizedMetrics: true
    
  3. Enregistrez et fermez le fichier modifié.

Une fois ces étapes effectuées, tous les journaux des applications utilisateur sont envoyés à Cloud Logging.

L'étape suivante consiste à annoter l'application utilisateur pour la collecte de métriques.

Annoter une application utilisateur pour la collecte de métriques

Pour annoter une application utilisateur de sorte qu'elle soit interrogée et les journaux envoyés à Cloud Monitoring, vous devez ajouter les annotations correspondant aux métadonnées du service, du pod et des points de terminaison.

  metadata:
    name: "example-monitoring"
    namespace: "default"
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/path: "" - Overriding metrics path (default "/metrics")
  

Déployer un exemple d'application utilisateur

Dans cette section, vous allez déployer un exemple d'application à la fois avec des journaux et des métriques compatibles avec prometheus.

  1. Enregistrez les fichiers manifeste de service et de déploiement suivants dans un fichier nommé my-app.yaml. Notez que le service possède l'annotation prometheus.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
  1. Créez le déploiement et le service :

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Utiliser les métriques personnalisées dans le HPA

Déployez l'objet HPA pour utiliser la métrique exposée à l'étape précédente. Pour en savoir plus sur les différents types de métriques personnalisées, consultez la section Autoscaling sur plusieurs métriques et métriques personnalisées.

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étrique du type de pods comporte un sélecteur de métriques par défaut pour les libellés des pods cibles, ce qui correspond au fonctionnement de kube-controller-manager. Dans cet exemple, vous pouvez interroger la métrique example_monitoring_up avec le sélecteur {matchLabels: {app: example-monitoring}}, car elle est disponible dans les pods cibles. Tout autre sélecteur spécifié est ajouté à la liste. Pour éviter d'utiliser le sélecteur par défaut, vous pouvez supprimer n'importe quel libellé du pod cible ou utiliser la métrique de type objet.

Vérifier que les métriques d'application définies par l'utilisateur sont utilisées par le HPA

Vérifiez que le HPA utilise les métriques d'application définies par l'utilisateur :

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa

Le résultat doit se présenter comme suit :

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

Coûts

L'utilisation de métriques personnalisées pour le HPA n'entraîne aucuns frais supplémentaires. Les utilisateurs ne sont facturés que pour les métriques et les journaux de l'application. Pour en savoir plus, consultez les tarifs de la suite Google Cloud Operations. Le pod permettant d'activer les métriques personnalisées consomme 15 m de processeur et 20 Mo de mémoire supplémentaires.