Commandes status et flare de l’Agent de cluster

Si vous rencontrez des difficultés avec votre serveur de métriques custom :

  • Vérifiez que la couche agrégation et les certificats sont bien configurés.

  • Assurez-vous que les métriques utilisées pour l’autoscaling sont disponibles. Lorsque vous créez le HPA (Horizontal Pod Autoscaler), l’Agent de cluster Datadog analyse le manifeste et envoie une requête à Datadog pour tenter de récupérer la métrique. Si le nom de la métrique n’est pas correct ou que la métrique n’existe pas dans votre compte Datadog, l’erreur suivante est générée :

    2018-07-03 13:47:56 UTC | ERROR | (datadogexternal.go:45 in queryDatadogExternal) | Returned series slice empty
    

Exécutez la commande agent status pour afficher le statut du fournisseur de métriques externes :

  Custom Metrics Provider
  =======================
  External Metrics
  ================
    ConfigMap name: datadog-hpa
    Number of external metrics detected: 2

Les erreurs liées au fournisseur de métriques externes s’affichent lorsque vous exécutez cette commande. Si vous souhaitez obtenir des informations plus détaillées, exécutez la commande flare : agent flare.

La commande flare génère un fichier zip contenant le fichier custom-metrics-provider.log. Son contenu ressemble à ceci :

  Custom Metrics Provider
  =======================
  External Metrics
  ================
    ConfigMap name: datadog-hpa
    Number of external metrics detected: 2

    hpa:
    - name: nginxext
    - namespace: default
    labels:
    - cluster: eks
    metricName: redis.key
    ts: 1532042322
    valid: false
    value: 0

    hpa:
    - name: nginxext
    - namespace: default
    labels:
    - dcos_version: 1.9.4
    metricName: docker.mem.limit
    ts: 1.532042322
    valid: true
    value: 268435456

Si le flag de la métrique Valid est défini sur false, la métrique n’est pas prise en compte dans le pipeline de l’Autoscaler de pods horizontaux.

Description du manifeste du HPA

Si le message suivant apparaît lors de la description du manifeste du HPA :

Conditions:
  Type           Status  Reason                   Message
  ----           ------  ------                   -------
  AbleToScale    True    SucceededGetScale        the HPA controller was able to get the target's current scale
  ScalingActive  False   FailedGetExternalMetric  the HPA was unable to compute the replica count: unable to get external metric default/nginx.net.request_per_s/&LabelSelector{MatchLabels:map[string]string{kube_container_name: nginx,},MatchExpressions:[],}: unable to fetch metrics from external metrics API: the server could not find the requested resource (get nginx.net.request_per_s.external.metrics.k8s.io)

Alors la configuration RBAC ou la connectivité du service pour le fournisseur de métriques n’est probablement pas correcte. Assurez-vous que kubectl api-versions renvoie ceci :

% kubectl get apiservices
NAME                                   SERVICE                                     AVAILABLE   AGE
...
v1beta1.external.metrics.k8s.io        default/datadog-cluster-agent-metrics-api   True        57s

Les métriques externes du service dʼAPI s’affiche avec true si le service dʼAPI, le service et le mappage de port dans le pod correspondent tous. De même, l’adresse de lʼAgent de cluster doit avoir les autorisations RBAC appropriées. Assurez-vous d’avoir créé les ressources à l’étape Enregistrer le fournisseur de métriques externes.

Si l’erreur suivante s’affiche lorsque vous inspectez le manifeste du HPA :

Warning  FailedComputeMetricsReplicas  3s (x2 over 33s)  horizontal-pod-autoscaler  failed to get nginx.net.request_per_s external metric: unable to get external metric default/nginx.net.request_per_s/&LabelSelector{MatchLabels:map[string]string{kube_container_name: nginx,},MatchExpressions:[],}: unable to fetch metrics from external metrics API: the server is currently unable to handle the request (get nginx.net.request_per_s.external.metrics.k8s.io)

Assurez-vous que l’Agent de cluster Datadog est en cours d’exécution et que le service qui expose le port 8443 (dont le nom est enregistré dans APIService) est disponible.

Différences de valeurs dans Datadog et dans Kubernetes

Comme Kubernetes développe automatiquement vos ressources, le HPA prend une décision de mise à l’échelle basée sur la valeur de la métrique fournie par lʼAgent de cluster. LʼAgent de cluster demandera et stockera la valeur exacte de la métrique renvoyée par l’API Datadog. Si votre HPA utilise une cible avec type: Value, cette valeur de métrique exacte est fournie au HPA. Si votre HPA utilise type: AverageValue, cette valeur de métrique est divisée par le nombre actuel de répliques.

C’est pourquoi vous pouvez voir des valeurs renvoyées ainsi :

% kubectl get datadogmetric
NAME             ACTIVE   VALID   VALUE   REFERENCES                UPDATE TIME
example-metric   True     True    7       hpa:default/example-hpa   21s

% kubectl get hpa
NAME          REFERENCE          TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
example-hpa   Deployment/nginx   3500m/5 (avg)   1         3         2          24

La valeur de 7 a été divisée par les répliques 2 pour obtenir la moyenne de 3.5. Les deux types sont pris en charge par le HPA, il suffit de prendre en compte le type lors de la configuration de votre requête et de la valeur cible. Consultez le guide relatif à lAgent de cluster pour obtenir des exemples de configuration.

Remarque : par défaut, l’Agent de cluster Datadog traite les métriques définies dans les différents manifestes du HPA et récupère les valeurs auprès de Datadog toutes les 30 secondes. De même, Kubernetes interroge l’Agent de cluster Datadog toutes les 30 secondes par défaut. Ce processus étant effectué de manière asynchrone, la règle ci-dessus ne s’applique pas systématiquement, en particulier si la métrique varie. Les deux fréquences sont toutefois paramétrables afin de limiter les problèmes éventuels.

Pour aller plus loin