Cette rubrique décrit comment déployer l'extension TKG v1.3.1 pour Prometheus. Prometheus est un système et un système de surveillance des services. Il collecte des mesures auprès de cibles configurées à intervalles donnés, évalue les expressions de règle, affiche les résultats et peut déclencher des alertes si certaines conditions sont observées comme vraies. Alertmanager gère les alertes générées par Prometheus et les achemine vers leurs points de terminaison de réception. Déployez l'extension TKG pour Prometheus afin de collecter et d'afficher des mesures pour les clusters Tanzu Kubernetes.

Configuration requise pour l'extension

Respectez les exigences suivantes avant de déployer l'extension TKG v1.3.1 pour Prometheus avec Alertmanager pour la surveillance des clusters. Outre les exigences générales, la surveillance Prometheus nécessite une classe de stockage persistant par défaut. Vous pouvez créer un cluster avec une classe de stockage persistante par défaut ou en spécifier un dans le fichier de configuration Prometheus lors du déploiement de l'extension. Reportez-vous à la section Vérifier les exigences de stockage persistant pour les extensions TKG.

Déployer l'extension Prometheus

L'extension TKG pour Prometheus installe plusieurs conteneurs. Pour plus d'informations, consultez https://prometheus.io/.
Conteneur Type de ressource Réplicas Description
prometheus-alertmanager Déploiement 1 Gère les alertes envoyées par les applications clientes, telles que le serveur Prometheus.
prometheus-cadvisor DaemonSet 5 Analyse et expose les données d'utilisation des ressources et de performances des conteneurs en cours d'exécution.
prometheus-kube-state-metrics Déploiement 1 Surveille l'état et la capacité du nœud, la conformité de l'ensemble de réplicas, l'état de l'espace, de la tâche et du croobob, ainsi que les demandes de ressources et les limitations.
prometheus-node-exporter DaemonSet 5 Exportateur de mesures matérielles et de système d'exploitation exposées par les noyaux.
prometheus-pushgateway Déploiement 1 Service qui vous permet de transférer des mesures à partir de tâches pour lesquelles le scraping est impossible.
prometheus-server Déploiement 1 Fournit des fonctionnalités essentielles, notamment le scraping, le traitement des règles et les alertes.
L'extension est configurée pour extraire les conteneurs du registre public VMware à l'adresse https://projects.registry.vmware.com/. Si vous utilisez un registre privé, modifiez l'URL du point de terminaison dans les valeurs de données et les configurations de l'extension pour qu'elle corresponde. Reportez-vous à la section Configurer l'extension Prometheus.
  1. Vérifiez que vous avez rempli chacune des conditions préalables de l'extension. Reportez-vous à la section Configuration requise pour l'extension.
  2. Remplacez le répertoire par celui de l'extension Prometheus.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
  3. Créez l'espace de noms tanzu-system-monitoring, ainsi que le compte de service et les objets de rôle Prometheus.
    kubectl apply -f namespace-role.yaml
  4. Créez un fichier de valeurs de données Prometheus.

    L'exemple de fichier de valeurs de données fournit la configuration minimale.

    cp prometheus-data-values.yaml.example prometheus-data-values.yaml
  5. Configurez l'extension Prometheus en mettant à jour prometheus-data-values.yaml. Pour obtenir une description des champs et des options, reportez-vous à la section Configurer l'extension Prometheus.
    Si le cluster n'est pas provisioné avec une classe de stockage persistant par défaut, vous pouvez le spécifier dans le fichier de valeurs de données. Assurez-vous également que l'espace de noms dispose de suffisamment de stockage pour les réclamations de volume persistant.
    monitoring:
      prometheus_server:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
      alertmanager:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
    ...      
    
  6. Créez le secret Prometheus à l'aide du fichier prometheus-data-values.
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
    

    Le secret prometheus-data-values est créé dans l'espace de noms tanzu-system-monitoring. Effectuez la vérification à l'aide de la commande kubectl get secrets -n tanzu-system-monitoring.

  7. Déployez l'extension Prometheus.
    kubectl apply -f prometheus-extension.yaml

    En cas de réussite, l'application Prometheus est créée : app.kappctrl.k14s.io/prometheus created.

  8. Vérifiez l'état de l'application Prometheus.
    kubectl get app prometheus -n tanzu-system-monitoring
    L'état doit passer de Reconciling à Reconcile succeeded. Si l'état est Reconcile failed, reportez-vous à la section Dépannage.
  9. Affichez des informations détaillées sur l’application Prometheus.
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml
  10. Effectuez la vérification des DaemonSets Prometheus.
    kubectl get daemonsets -n tanzu-system-monitoring
  11. Vérifiez les déploiements Prometheus.
    kubectl get deployments -n tanzu-system-monitoring

Dépanner le déploiement Prometheus

En cas d'échec du déploiement ou du rapprochement, exécutez kubectl get pods -A pour afficher l'état des espaces. Dans des conditions normales, les espaces doivent être à l'état Running. Si l'état est ImagePullBackOff ou ImageCrashLoopBackOff, l'image de conteneur n'a pas pu être extraite du registre. Vérifiez l'URL dans les valeurs de données et les fichiers YAML de l'extension, et assurez-vous qu'elles sont correctes.

Vérifiez les journaux du conteneur, où name-XXXX est le nom d'espace unique lorsque vous exécutez kubectl get pods -A :
kubectl logs pod/prometheus-alertmanager-XXXXX -c prometheus-alertmanager -n tanzu-system-monitoring
kubectl logs pod/prometheus-server-XXXXX -c prometheus-server -n tanzu-system-monitoring

Mettre à jour l'extension Prometheus

Mettez à jour la configuration d'une extension Prometheus qui est déployée sur un cluster Tanzu Kubernetes.

  1. Obtenez des valeurs de données Prometheus à partir du secret.
    kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
    
  2. Mettez à jour le secret des valeurs de données Prometheus.
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
    
    L'extension Prometheus sera rapprochée des valeurs de données mises à jour.
    Note : Par défaut, kapp-controller synchronise les applications toutes les 5 minutes. La mise à jour doit prendre effet en 5 minutes ou moins. Si vous souhaitez que la mise à jour prenne effet immédiatement, modifiez syncPeriod dans prometheus-extension.yaml à une valeur inférieure et appliquez l'extension Fluent Bit à l'aide de kubectl apply -f prometheus-extension.yaml.
  3. Vérifiez l'état de l'extension.
    kubectl get app prometheus -n tanzu-system-monitoring

    L'état doit être Reconcile Succeeded une fois que Prometheus est mise à jour.

  4. Affichez l'état détaillé et résolvez les problèmes.
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml

Supprimer l'extension Prometheus

Supprimez l'extension Prometheus d'un cluster Tanzu Kubernetes.
Note : Suivez la procédure dans l'ordre. Ne supprimez pas l'espace de noms, le compte de service et les objets de rôle avant la suppression complète de l'application Prometheus. Cela pourrait entraîner des erreurs système.
Attention : Prometheus et Grafana utilisent le même espace de noms. La suppression de l'espace de noms est destructrice pour toutes les extensions qui y sont déployées. Si Grafana est déployé, ne supprimez pas l’espace de noms avant de supprimer Grafana.
  1. Remplacez le répertoire par celui de l'extension Prometheus.
    cd /extensions/monitoring/prometheus/
  2. Supprimez l'application Prometheus.
    kubectl delete app prometheus -n tanzu-system-monitoring

    Résultat attendu : app.kappctrl.k14s.io "prometheus" deleted

  3. Vérifiez que l'application Prometheus est supprimée.
    kubectl get app prometheus -n tanzu-system-monitoring

    Résultat attendu : apps.kappctrl.k14s.io "prometheus" not found

  4. Supprimez l'espace de noms tanzu-system-monitoring, ainsi que le compte de service et les objets de rôle Prometheus.
    Avertissement : N’effectuez pas cette étape si Grafana est déployé.
    kubectl delete -f namespace-role.yaml
  5. Si vous souhaitez redéployer Prometheus, supprimez le secret prometheus-data-values.
    kubectl delete secret prometheus-data-values -n tanzu-system-monitoring

    Résultat attendu : secret "prometheus-data-values" deleted

Mettre à niveau l'extension Prometheus

Si une extension Prometheus existante est déployée, vous pouvez la mettre à niveau vers la dernière version.
  1. Exportez le configmap Prometheus et enregistrez-le en tant que sauvegarde.
    kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
    
  2. Supprimez le déploiement Prometheus existant. Reportez-vous à la section Supprimer l'extension Prometheus.
  3. Déployez l'extension Prometheus. Reportez-vous à la section Déployer l'extension Prometheus.

Configurer l'extension Prometheus

La configuration Prometheus est définie dans /extensions/monitoring/prometheus/prometheus-data-values.yaml.
Tableau 1. Paramètres de configuration Prometheus
Paramètre Description Type Par défaut
monitoring.namespace Espace de noms dans lequel Prometheus sera déployé string tanzu-system-monitoring
monitoring.create_namespace L'indicateur permet de savoir s'il faut créer l'espace de noms spécifié par monitoring.namespace booléen false
monitoring.prometheus_server.config.prometheus_yaml Détails de la configuration du moniteur de cluster Kubernetes à transmettre à Prometheus Fichier yaml prometheus.yaml
monitoring.prometheus_server.config.alerting_rules_yaml Règles d'alerte détaillées définies dans Prometheus Fichier yaml alerting_rules.yaml
monitoring.prometheus_server.config.recording_rules_yaml Règles d'enregistrement détaillées définies dans Prometheus Fichier yaml recording_rules.yaml
monitoring.prometheus_server.service.type Type de service pour exposer Prometheus. Valeurs prises en charge : ClusterIP string ClusterIP
monitoring.prometheus_server.enable_alerts.kubernetes_api Activer l'alerte SLO pour l'API Kubernetes dans Prometheus booléen true
monitoring.prometheus_server.sc.aws_type Type AWS défini pour storageclass sur AWS string gp2
monitoring.prometheus_server.sc.aws_fsType Type de système de fichiers AWS défini pour storageclass sur AWS string ext4
monitoring.prometheus_server.sc.allowVolumeExpansion Définir si l'extension de volume est autorisée pour storageclass sur AWS booléen true
monitoring.prometheus_server.pvc.annotations Annotations de classe de stockage mappage {}
monitoring.prometheus_server.pvc.storage_class Classe de stockage à utiliser pour la réclamation de volume persistant. Par défaut, cette valeur est nulle, et le provisionneur par défaut est utilisé string null
monitoring.prometheus_server.pvc.accessMode Définissez le mode d'accès pour la réclamation de volume persistant. Valeurs prise en charge : ReadWriteOnce, ReadOnlyMany, ReadWriteMany string ReadWriteOnce
monitoring.prometheus_server.pvc.storage Définir la taille de stockage pour la réclamation de volume persistant string 8Gi
monitoring.prometheus_server.deployment.replicas Nombre de réplicas Prometheus entier 1
monitoring.prometheus_server.image.repository Emplacement du référentiel avec l'image Prometheus. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg/prometheus
monitoring.prometheus_server.image.name Nom de l'image Prometheus string prometheus
monitoring.prometheus_server.image.tag Balise d'image Prometheus. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version. string v2.17.1_vmware.1
monitoring.prometheus_server.image.pullPolicy Stratégie d'extraction d'image Prometheus string IfNotPresent
monitoring.alertmanager.config.slack_demo Configuration des notifications Slack pour Alertmanager string
slack_demo:
  name: slack_demo
  slack_configs:
  - api_url: https://hooks.slack.com
    channel: '#alertmanager-test'
monitoring.alertmanager.config.email_receiver Configuration des notifications par e-mail pour Alertmanager string
email_receiver:
  name: email-receiver
  email_configs:
  - to: [email protected]
    send_resolved: false
    from: [email protected]
    smarthost: smtp.eample.com:25
    require_tls: false
monitoring.alertmanager.service.type Type de service pour exposer Alertmanager. Valeurs prises en charge : ClusterIP string ClusterIP
monitoring.alertmanager.image.repository Emplacement du référentiel avec l'image Alertmanager. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg/prometheus
monitoring.alertmanager.image.name Nom de l'image Alertmanager string alertmanager
monitoring.alertmanager.image.tag Balise d'image Alertmanager. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version. string v0.20.0_vmware.1
monitoring.alertmanager.image.pullPolicy Stratégie d'extraction d'image Alertmanager string IfNotPresent
monitoring.alertmanager.pvc.annotations Annotations de classe de stockage mappage {}
monitoring.alertmanager.pvc.storage_class Classe de stockage à utiliser pour la réclamation de volume persistant. Par défaut, cette valeur est nulle et le provisionneur par défaut est utilisé. string null
monitoring.alertmanager.pvc.accessMode Définissez le mode d'accès pour la réclamation de volume persistant. Valeurs prise en charge : ReadWriteOnce, ReadOnlyMany, ReadWriteMany string ReadWriteOnce
monitoring.alertmanager.pvc.storage Définir la taille de stockage pour la réclamation de volume persistant string 2Gi
monitoring.alertmanager.deployment.replicas Nombre de réplicas Alertmanager entier 1
monitoring.kube_state_metrics.image.repository Référentiel contenant l'image kube-state-metrics. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg/prometheus
monitoring.kube_state_metrics.image.name Nom de l'image kube-state-metrics string kube-state-metrics
monitoring.kube_state_metrics.image.tag Balise d'image kube-state-metrics. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version. string v1.9.5_vmware.1
monitoring.kube_state_metrics.image.pullPolicy Stratégie d'extraction d'image kube-state-metrics string IfNotPresent
monitoring.kube_state_metrics.deployment.replicas Nombre de réplicas kube-state-metrics entier 1
monitoring.node_exporter.image.repository Référentiel contenant l'image de l'exportateur de nœuds. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg/prometheus
monitoring.node_exporter.image.name Nom de l'image du exportateur de nœuds string node-exporter
monitoring.node_exporter.image.tag Balise d'image de l'exportateur de nœuds. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version. string v0.18.1_vmware.1
monitoring.node_exporter.image.pullPolicy Stratégie d'extraction d'image node-exporter string IfNotPresent
monitoring.node_exporter.hostNetwork Si cette valeur est définie sur hostNetwork: true, l'espace peut utiliser l'espace de noms réseau et les ressources réseau du nœud. booléen false
monitoring.node_exporter.deployment.replicas Nombre de réplicas node-exporter entier 1
monitoring.pushgateway.image.repository Référentiel contenant l'image pushgateway. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg/prometheus
monitoring.pushgateway.image.name Nom de l'image pushgateway string pushgateway
monitoring.pushgateway.image.tag Balise d'image pushgateway. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version. string v1.2.0_vmware.1
monitoring.pushgateway.image.pullPolicy Stratégie d'extraction d'image pushgateway string IfNotPresent
monitoring.pushgateway.deployment.replicas Nombre de réplicas pushgateway entier 1
monitoring.cadvisor.image.repository Référentiel contenant l'image cadvisor. La valeur par défaut est le registre VMware public. Modifiez cette valeur si vous utilisez un référentiel privé (par exemple, un environnement air-gapped). string projects.registry.vmware.com/tkg/prometheus
monitoring.cadvisor.image.name Nom de l'image cadvisor string cadvisor
monitoring.cadvisor.image.tag Balise d'image cadvisor. Il peut être nécessaire de mettre à jour cette valeur si vous mettez à niveau la version. string v0.36.0_vmware.1
monitoring.cadvisor.image.pullPolicy Stratégie d'extraction d'image cadvisor string IfNotPresent
monitoring.cadvisor.deployment.replicas Nombre de réplicas cadvisor entier 1
monitoring.ingress.enabled Activer/désactiver l'entrée pour Prometheus et Alertmanager booléen

false

Pour utiliser l'entrée, définissez ce champ sur true et déployez Contour. Pour accéder à Prometheus, mettez à jour votre /etc/hosts local avec une entrée qui mappe prometheus.system.tanzu à l'adresse IP d'un nœud worker.

monitoring.ingress.virtual_host_fqdn Nom d'hôte pour accéder à Prometheus et Alertmanager string prometheus.system.tanzu
monitoring.ingress.prometheus_prefix Préfixe de chemin d'accès pour Prometheus string /
monitoring.ingress.alertmanager_prefix Préfixe de chemin d'accès pour Alertmanager string /alertmanager/
monitoring.ingress.tlsCertificate.tls.crt Certificat facultatif pour entrée si vous souhaitez utiliser votre propre certificat TLS. Un cert auto-signé est généré par défaut string Certificat généré
monitoring.ingress.tlsCertificate.tls.key Clé privée de certificat facultatif pour entrée si vous souhaitez utiliser votre propre certificat TLS. string Clé de certificat généré
Tableau 2. Champs configurables pour Prometheus_Server Configmap
Paramètre Description Type Par défaut
evaluation_interval Fréquence d'évaluation des règles durée 1 min
scrape_interval Fréquence de scraping des cibles durée 1 min
scrape_timeout Délai d'attente avant expiration d'une demande de scraping durée 10 s
rule_files Les fichiers de règle spécifient une liste de globs. Les règles et les alertes sont lues à partir de tous les fichiers correspondants Fichier yaml
scrape_configs Liste des configurations de scraping. liste
job_name Nom de la tâche attribué aux métriques de scraping par défaut string
kubernetes_sd_configs Liste des configurations de détection de services Kubernetes. liste
relabel_configs Liste des configurations de relabel cibles. liste
action Action à effectuer en fonction de la correspondance regex. string
regex Expression régulière par rapport à laquelle la valeur extraite est mises en correspondance. string
source_labels Les étiquettes source sélectionnent des valeurs à partir d'étiquettes existantes. string
scheme Configure le schéma de protocole utilisé pour les demandes. string
tls_config Configure les paramètres TLS de la demande de scraping. string
ca_file Certificat CA avec qui valider le certificat du serveur API. filename
insecure_skip_verify Désactivez la validation du certificat de serveur. booléen
bearer_token_file Informations d'authentification facultatives du fichier de jeton de support. filename
replacement Valeur de remplacement par rapport à laquelle un remplacement regex est effectué si l'expression régulière correspond. string
target_label Étiquette dans laquelle la valeur résultante est écrite dans une action de remplacement. string
Tableau 3. Champs configurables pour Alertmanager Configmap
Paramètre Description Type Par défaut
resolve_timeout « ResolveTimeout » est la valeur par défaut utilisée par Alertmanager si l'alerte n'inclut pas « EndsAt » durée 5 min
smtp_smarthost Hôte SMTP par lequel les e-mails sont envoyés. durée 1 min
slack_api_url URL du Webhook Slack. string global.slack_api_url
pagerduty_url URL pagerduty à laquelle envoyer les demandes d'API. string global.pagerduty_url
modèles Fichiers à partir desquels les définitions de modèles de notifications personnalisées sont lues chemin d'accès du fichier
group_by grouper les alertes par étiquette string
group_interval Définir le temps d'attente avant l'envoi d'une notification concernant les nouvelles alertes ajoutées à un groupe durée 5 min
group_wait Délai d'attente initiale avant l'envoi d'une notification pour un groupe d'alertes durée 30 s
repeat_interval Délai d'attente avant de renvoyer une notification si elle a déjà été correctement envoyée pour une alerte durée 4 h
receivers Liste de récepteurs de notification. liste
severity Gravité de l'incident. string
channel Canal ou utilisateur auquel envoyer des notifications. string
html Corps HTML de la notification par e-mail. string
text Corps du texte de la notification par e-mail. string
send_resolved Notifier ou non les alertes résolues. filename
email_configs Configurations pour l'intégration des e-mails booléen
Les annotations sur les espaces permettent un contrôle précis du processus de scraping. Ces annotations doivent faire partie des métadonnées de l'groupe. Elles n'auront aucun effet si elles sont définies sur d'autres objets, tels que Services ou DaemonSets.
Tableau 4. Annotations d'un espace Prometheus
Annotation d'un espace Description
prometheus.io/scrape La configuration par défaut effectuera le scraping de tous les espaces et, si elle est définie sur « false », cette annotation exclura l'espace du processus de scraping.
prometheus.io/path Si le chemin des métriques n'est pas « /metrics », définissez-le avec cette annotation.
prometheus.io/port Effectuez le scraping de l'espace sur le port indiqué au lieu des ports déclarés de l'espace (la cible par défaut est sans port si aucun n'est déclaré).
Le manifeste DaemonSet ci-dessous demandera à Prometheus d'effectuer le scraping de tous ses espaces sur le port 9102.
apiVersion: apps/v1beta2 # for versions before 1.8.0 use extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: weave
  labels:
    app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9102'
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20