introduction
Outre le traçage et la journalisation, la surveillance et l’alerte sont des composants essentiels de la pile d’observabilité de Kubernetes. La configuration de la surveillance de votre cluster Kubernetes vous permet de suivre l'utilisation de vos ressources et d'analyser et de déboguer les erreurs des applications.
Un système de surveillance consiste généralement en une base de données chronologique contenant des données métriques et une couche de visualisation. En outre, une couche d'alerte crée et gère les alertes, en les transférant aux intégrations et aux services externes selon les besoins. Enfin, un ou plusieurs composants génèrent ou exposent les données de métrique qui seront stockées, visualisées et traitées pour les alertes par cette pile de surveillance.
Une solution de surveillance populaire est la pile open-sourcePrometheus,Grafana etAlertmanager:
-
Prometheus est une base de données chronologique et un outil de surveillance qui fonctionne en interrogeant les points de terminaison de métriques et en récupérant et en traitant les données exposées par ces points de terminaison. Il vous permet d'interroger ces données à l'aide dePromQL, un langage d'interrogation de données de séries chronologiques.
-
Grafana est un outil de visualisation et d'analyse de données qui vous permet de créer des tableaux de bord et des graphiques pour vos données de métriques.
-
Alertmanager, généralement déployé aux côtés de Prometheus, forme la couche d'alerte de la pile, gérant les alertes générées par Prometheus et les dédupliquant, les regroupant et les acheminant vers des intégrations comme les e-mails ouPagerDuty.
En outre, des outils tels quekube-state-metrics etnode_exporter exposent des métriques d'objets Kubernetes au niveau du cluster ainsi que des métriques au niveau de la machine telles que l'utilisation du processeur et de la mémoire.
Implémenter cette pile de surveillance sur un cluster Kubernetes peut être compliqué, mais heureusement, une partie de cette complexité peut être gérée avec le gestionnaire de packagesHelm et les projetsPrometheus Operator etkube-prometheus de CoreOS. Ces projets cuisent dans des configurations standard et des tableaux de bord pour Prometheus et Grafana et font abstraction de certaines définitions d’objets de Kubernetes de niveau inférieur. Helmprometheus-operator
chart vous permet de mettre en place une solution complète de surveillance de cluster en installant Prometheus Operator et le reste des composants répertoriés ci-dessus, ainsi qu'un ensemble par défaut de tableaux de bord, de règles et d'alertes utiles pour surveiller les clusters Kubernetes.
Dans ce didacticiel, nous montrerons comment installer le graphique Helmprometheus-operator
sur un cluster DigitalOcean Kubernetes. À la fin du didacticiel, vous aurez installé une pile de surveillance complète dans votre cluster.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin de:
-
Un clusterDigitalOcean Kubernetes.
-
L'interface de ligne de commande
kubectl
installée sur votre ordinateur local et configurée pour se connecter à votre cluster. Vous pouvez en savoir plus sur l'installation et la configuration dekubectl
in its official documentation. -
Le gestionnaire de paquetsHelm (2.10+) installé sur votre machine locale et Tiller installé sur votre cluster, comme détaillé dansHow To Install Software on Kubernetes Clusters with the Helm Package Manager.
[[step-1 -—- creation-a-custom-values-file]] == Étape 1 - Création d'un fichier de valeurs personnalisées
Avant d'installer le graphique Helm deprometheus-operator
, nous allons créer un fichier de valeurs personnalisées qui remplacera certaines des valeurs par défaut du graphique par des paramètres de configuration spécifiques à DigitalOcean. Pour en savoir plus sur le remplacement des valeurs de graphique par défaut, consultez la sectionHelm Install de la documentation Helm.
Pour commencer, créez et ouvrez un fichier appelécustom-values.yaml
sur votre machine locale en utilisantnano
ou votre éditeur préféré:
nano custom-values.yaml
Copiez et collez les valeurs personnalisées suivantes, qui activent le stockage persistant pour les composants Prometheus, Grafana et Alertmananger, et désactivent la surveillance des composants du plan de contrôle Kubernetes non exposés sur DigitalOcean Kubernetes:
custom-values.yaml
# Define persistent storage for Prometheus (PVC)
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: do-block-storage
resources:
requests:
storage: 5Gi
# Define persistent storage for Grafana (PVC)
grafana:
# Set password for Grafana admin user
adminPassword: your_admin_password
persistence:
enabled: true
storageClassName: do-block-storage
accessModes: ["ReadWriteOnce"]
size: 5Gi
# Define persistent storage for Alertmanager (PVC)
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: do-block-storage
resources:
requests:
storage: 5Gi
# Change default node-exporter port
prometheus-node-exporter:
service:
port: 30206
targetPort: 30206
# Disable Etcd metrics
kubeEtcd:
enabled: false
# Disable Controller metrics
kubeControllerManager:
enabled: false
# Disable Scheduler metrics
kubeScheduler:
enabled: false
Dans ce fichier, nous remplaçons certaines des valeurs par défaut fournies avec le graphique dans sesvalues.yaml file.
Nous activons tout d'abord le stockage persistant pour Prometheus, Grafana et Alertmanager afin que leurs données persistent lors des redémarrages de pod. En arrière-plan, cela définit une revendication de volume persistant (PVC)5 Gi
pour chaque composant, en utilisant la classe de stockage DigitalOceanBlock Storage. Vous devez modifier la taille de ces PVC en fonction de vos besoins en stockage de surveillance. Pour en savoir plus sur les PVC, consultezPersistent Volumes de la documentation officielle de Kubernetes.
Ensuite, remplacezyour_admin_password
par un mot de passe sécurisé que vous utiliserez pour vous connecter au tableau de bord des métriques deGrafana avec l'utilisateuradmin.
Nous allons ensuite configurer un port différent pournode-exporter. Node-exporter s'exécute sur chaque nœud Kubernetes et fournit des métriques de système d'exploitation et de matériel à Prometheus. Nous devons modifier son port par défaut pour contourner les paramètres par défaut du pare-feu DigitalOcean Kubernetes, qui bloquera le port 9100 tout en autorisant les ports situés dans la plage 30000 à 32767. Vous pouvez également configurer une règle de pare-feu personnalisée pour un exportateur de noeud. Pour savoir comment procéder, consultezHow to Configure Firewall Rules de la documentation officielle sur les pare-feu Cloud DigitalOcean.
Enfin, nous désactiverons la collecte de métriques pour trois Kubernetescontrol plane components qui n'exposent pas de métriques sur DigitalOcean Kubernetes: le Kubernetes Scheduler et Controller Manager, et le magasin de données de cluster etcd.
Pour voir la liste complète des paramètres configurables pour le graphiqueprometheus-operator
, consultez la sectionConfiguration du fichier README du référentiel de graphiques ou du fichier de valeurs par défaut.
Lorsque vous avez terminé, enregistrez et fermez le fichier. Nous pouvons maintenant installer la carte en utilisant Helm.
[[step-2 -—- installation-the-prometheus-operator-chart]] == Étape 2 - Installation du graphiqueprometheus-operator
Le graphique Helmprometheus-operator
installera les composants de surveillance suivants dans votre cluster DigitalOcean Kubernetes:
-
Prometheus Operator, un KubernetesOperator qui vous permet de configurer et de gérer les clusters Prometheus. Les opérateurs Kubernetes intègrent une logique spécifique à un domaine dans le processus de création, de déploiement et de gestion des applications avec Kubernetes. Pour en savoir plus sur les opérateurs Kubernetes, consultez lesCoreOS Operators Overview. Pour en savoir plus sur l'opérateur Prometheus, consultezthis introductory post sur l'opérateur Prometheus et l'opérateur PrometheusGitHub repo. Prometheus Operator sera installé en tant queDeployment.
-
Prometheus, installé en tant queStatefulSet.
-
Alertmanager, un service qui gère les alertes envoyées par le serveur Prometheus et les achemine vers des intégrations telles que PagerDuty ou par courrier électronique. Pour en savoir plus sur Alertmanager, consultezAlerting de la documentation Prometheus. Alertmanager sera installé en tant que StatefulSet.
-
Grafana, un outil de visualisation de données chronologiques qui vous permet de visualiser et de créer des tableaux de bord pour vos métriques Prometheus. Grafana sera installé en tant que déploiement.
-
node-export, exportateur Prometheus qui s'exécute sur des nœuds de cluster et fournit des métriques de système d'exploitation et de matériel à Prometheus. Consultez lesnode-exporter GitHub repo pour en savoir plus. node-exporter sera installé en tant queDaemonSet.
-
kube-state-metrics, agent complémentaire qui écoute le serveur d'API Kubernetes et génère des métriques sur l'état des objets Kubernetes tels que Deployments et Pods. Vous pouvez en savoir plus en consultant leskube-state-metrics GitHub repo. kube-state-metrics sera installé en tant que déploiement.
Par défaut, avec les métriques de récupération générées par le noeud exportateur, les métriques de l'état du kube et les autres composants répertoriés ci-dessus, Prometheus sera configuré pour extraire des métriques des composants suivants:
-
kube-apiserver, lesKubernetes API server.
-
CoreDNS, le serveur DNS du cluster Kubernetes.
-
kubelet, l'agent de nœud principal qui interagit avec kube-apiserver pour gérer les pods et les conteneurs sur un nœud.
-
cAdvisor, un agent de noeud qui découvre les conteneurs en cours d'exécution et collecte leurs métriques d'utilisation du processeur, de la mémoire, du système de fichiers et du réseau.
Sur votre ordinateur local, commençons par installer le graphique Helmprometheus-operator
et en passant le fichier de valeurs personnalisées que nous avons créé ci-dessus:
helm install --namespace monitoring --name doks-cluster-monitoring -f custom-values.yaml stable/prometheus-operator
Ici, nous exécutonshelm install
et installons tous les composants dans l'espace de nomsmonitoring
, que nous créons en même temps. Cela nous permet de séparer proprement la pile de surveillance du reste du cluster Kubernetes. Nous nommons la version Helmdoks-cluster-monitoring
et transmettons le fichier de valeurs personnalisées que nous avons créé dansStep 1. Enfin, nous précisons que nous souhaitons installer le graphiqueprometheus-operator
depuis Helmstable
directory.
Vous devriez voir la sortie suivante:
OutputNAME: doks-cluster-monitoring
LAST DEPLOYED: Mon Apr 22 10:30:42 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
doks-cluster-monitoring-grafana Pending do-block-storage 10s
==> v1/ServiceAccount
NAME SECRETS AGE
doks-cluster-monitoring-grafana 1 10s
doks-cluster-monitoring-kube-state-metrics 1 10s
. . .
==> v1beta1/ClusterRoleBinding
NAME AGE
doks-cluster-monitoring-kube-state-metrics 9s
psp-doks-cluster-monitoring-prometheus-node-exporter 9s
NOTES:
The Prometheus Operator has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=doks-cluster-monitoring"
Visit https://github.com/coreos/prometheus-operator for instructions on how
to create & configure Alertmanager and Prometheus instances using the Operator.
Cela indique que l'opérateur Prometheus, Prometheus, Grafana et les autres composants répertoriés ci-dessus ont été installés avec succès dans votre cluster DigitalOcean Kubernetes.
À la suite de la remarque dans la sortiehelm install
, vérifiez l'état des pods de la version à l'aide dekubectl get pods
:
kubectl --namespace monitoring get pods -l "release=doks-cluster-monitoring"
Vous devriez voir ce qui suit:
OutputNAME READY STATUS RESTARTS AGE
doks-cluster-monitoring-grafana-9d7f984c5-hxnw6 2/2 Running 0 3m36s
doks-cluster-monitoring-kube-state-metrics-dd8557f6b-9rl7j 1/1 Running 0 3m36s
doks-cluster-monitoring-pr-operator-9c5b76d78-9kj85 1/1 Running 0 3m36s
doks-cluster-monitoring-prometheus-node-exporter-2qvxw 1/1 Running 0 3m36s
doks-cluster-monitoring-prometheus-node-exporter-7brwv 1/1 Running 0 3m36s
doks-cluster-monitoring-prometheus-node-exporter-jhdgz 1/1 Running 0 3m36s
Cela indique que tous les composants de surveillance sont opérationnels et que vous pouvez commencer à explorer les métriques Prometheus à l'aide de Grafana et de ses tableaux de bord préconfigurés.
[[step-3 -—- access-grafana-and-explore-metrics-data]] == Étape 3 - Accéder à Grafana et explorer les données de métriques
Le graphique Helmprometheus-operator
expose Grafana en tant que serviceClusterIP
, ce qui signifie qu'il n'est accessible que via une adresse IP interne au cluster. Pour accéder à Grafana en dehors de votre cluster Kubernetes, vous pouvez soit utiliserkubectl patch
pour mettre à jour le service en place vers un type public commeNodePort
ouLoadBalancer
, oukubectl port-forward
pour transférer un port local vers un port Grafana Pod.
Dans ce didacticiel, nous transférerons les ports, mais pour en savoir plus sur les types de servicekubectl patch
et Kubernetes, vous pouvez consulterUpdate API Objects in Place Using kubectl patch etServices à partir de la documentation officielle de Kubernetes.
Commencez par lister les services en cours d'exécution dans l'espace de nomsmonitoring
:
kubectl get svc -n monitoring
Vous devriez voir les services suivants:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None 9093/TCP,6783/TCP 34m
doks-cluster-monitoring-grafana ClusterIP 10.245.105.130 80/TCP 34m
doks-cluster-monitoring-kube-state-metrics ClusterIP 10.245.140.151 8080/TCP 34m
doks-cluster-monitoring-pr-alertmanager ClusterIP 10.245.197.254 9093/TCP 34m
doks-cluster-monitoring-pr-operator ClusterIP 10.245.14.163 8080/TCP 34m
doks-cluster-monitoring-pr-prometheus ClusterIP 10.245.201.173 9090/TCP 34m
doks-cluster-monitoring-prometheus-node-exporter ClusterIP 10.245.72.218 30206/TCP 34m
prometheus-operated ClusterIP None 9090/TCP 34m
Nous allons rediriger le port local8000
vers le port80
du servicedoks-cluster-monitoring-grafana
, qui à son tour redirigera vers le port3000
d'un Grafana Pod en cours d'exécution. Ces ports de service et de pod sont configurés dans le graphique Helmstable/grafana
values file:
kubectl port-forward -n monitoring svc/doks-cluster-monitoring-grafana 8000:80
Vous devriez voir la sortie suivante:
OutputForwarding from 127.0.0.1:8000 -> 3000
Forwarding from [::1]:8000 -> 3000
Cela indique que le port local8000
est transféré avec succès vers un pod Grafana.
Visitezhttp://localhost:8000
dans votre navigateur Web. Vous devriez voir la page de connexion Grafana suivante:
Entrezadmin comme nom d'utilisateur et le mot de passe que vous avez configuré danscustom-values.yaml
. Ensuite, appuyez surLog In.
Vous serez redirigé vers lesHome Dashboard suivants:
Dans la barre de navigation de gauche, sélectionnez le boutonDashboards, puis cliquez surManage:
Vous serez redirigé vers l'interface de gestion de tableau de bord suivante, qui répertorie les tableaux de bord installés par le graphique Helm deprometheus-operator
:
Ces tableaux de bord sont générés parkubernetes-mixin
, un projet open-source qui vous permet de créer un ensemble standardisé de tableaux de bord Grafana de surveillance de cluster et d'alertes Prometheus. Pour en savoir plus, consultez lesKubernetes Mixin GitHub repo.
Cliquez sur le tableau de bordKubernetes / Nodes, qui visualise l'utilisation du processeur, de la mémoire, du disque et du réseau pour un nœud donné:
Décrire chaque tableau de bord et son utilisation pour visualiser les données de métriques de votre cluster dépasse le cadre de ce didacticiel. Pour en savoir plus sur la méthode USE permettant d’analyser les performances d’un système, vous pouvez consulter la pageThe Utilization Saturation and Errors (USE) Method de Brendan Gregg. LesSRE Book de Google sont une autre ressource utile, en particulier le chapitre 6:Monitoring Distributed Systems. Pour apprendre à créer vos propres tableaux de bord Grafana, consultez la pageGetting Started de Grafana.
Dans la prochaine étape, nous suivrons un processus similaire pour nous connecter et explorer le système de surveillance Prometheus.
[[step-4 -—- access-prometheus-and-alertmanager]] == Étape 4 - Accéder à Prometheus et Alertmanager
Pour se connecter aux pods Prometheus, nous devons à nouveau utiliserkubectl port-forward
pour rediriger un port local. Si vous avez terminé d'explorer Grafana, vous pouvez fermer le tunnel de transfert de port en appuyant surCTRL-C
. Vous pouvez également ouvrir un nouveau shell et une nouvelle connexion de port.
Commencez par lister les services en cours d'exécution dans l'espace de nomsmonitoring
:
kubectl get svc -n monitoring
Vous devriez voir les services suivants:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None 9093/TCP,6783/TCP 34m
doks-cluster-monitoring-grafana ClusterIP 10.245.105.130 80/TCP 34m
doks-cluster-monitoring-kube-state-metrics ClusterIP 10.245.140.151 8080/TCP 34m
doks-cluster-monitoring-pr-alertmanager ClusterIP 10.245.197.254 9093/TCP 34m
doks-cluster-monitoring-pr-operator ClusterIP 10.245.14.163 8080/TCP 34m
doks-cluster-monitoring-pr-prometheus ClusterIP 10.245.201.173 9090/TCP 34m
doks-cluster-monitoring-prometheus-node-exporter ClusterIP 10.245.72.218 30206/TCP 34m
prometheus-operated ClusterIP None 9090/TCP 34m
Nous allons transférer le port local9090
vers le port9090
du servicedoks-cluster-monitoring-pr-prometheus
:
kubectl port-forward -n monitoring svc/doks-cluster-monitoring-pr-prometheus 9090:9090
Vous devriez voir la sortie suivante:
OutputForwarding from 127.0.0.1:9090 -> 9090
Forwarding from [::1]:9090 -> 9090
Cela indique que le port local9090
est transféré avec succès vers un pod Prometheus.
Visitezhttp://localhost:9090
dans votre navigateur Web. Vous devriez voir la page PrometheusGraphuivante:
À partir de là, vous pouvez utiliser PromQL, le langage de requête Prometheus, pour sélectionner et regrouper les métriques de série temporelle stockées dans sa base de données. Pour en savoir plus sur PromQL, consultezQuerying Prometheus de la documentation officielle de Prometheus.
Dans le champExpression, tapezmachine_cpu_cores
et appuyez surExecute. Vous devriez voir une liste de séries temporelles avec la métriquemachine_cpu_cores
qui indique le nombre de cœurs de processeur sur un nœud donné. Vous pouvez voir quel nœud a généré la métrique et quel travail a récupéré la métrique dans les étiquettes de métriques.
Enfin, dans la barre de navigation supérieure, cliquez surStatus puis surTargets pour voir la liste des cibles que Prometheus a été configuré pour gratter. Vous devriez voir une liste de cibles correspondant à la liste des points de terminaison de surveillance décrits au début deStep 2.
Pour en savoir plus sur Promtheus et comment interroger vos métriques de cluster, consultez lesPrometheus docs officiels.
Nous suivrons un processus similaire pour nous connecter à AlertManager, qui gère les alertes générées par Prometheus. Vous pouvez explorer ces alertes en cliquant surAlerts dans la barre de navigation supérieure de Prometheus.
Pour nous connecter aux pods Alertmanager, nous utiliserons à nouveaukubectl port-forward
pour rediriger un port local. Si vous avez fini d'explorer Prometheus, vous pouvez fermer le tunnel de transfert de port en appuyant surCTRL-C
. Vous pouvez également ouvrir un nouveau shell et une nouvelle connexion de port.
Commencez par lister les services en cours d'exécution dans l'espace de nomsmonitoring
:
kubectl get svc -n monitoring
Vous devriez voir les services suivants:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None 9093/TCP,6783/TCP 34m
doks-cluster-monitoring-grafana ClusterIP 10.245.105.130 80/TCP 34m
doks-cluster-monitoring-kube-state-metrics ClusterIP 10.245.140.151 8080/TCP 34m
doks-cluster-monitoring-pr-alertmanager ClusterIP 10.245.197.254 9093/TCP 34m
doks-cluster-monitoring-pr-operator ClusterIP 10.245.14.163 8080/TCP 34m
doks-cluster-monitoring-pr-prometheus ClusterIP 10.245.201.173 9090/TCP 34m
doks-cluster-monitoring-prometheus-node-exporter ClusterIP 10.245.72.218 30206/TCP 34m
prometheus-operated ClusterIP None 9090/TCP 34m
Nous allons transférer le port local9093
vers le port9093
du servicedoks-cluster-monitoring-pr-alertmanager
.
kubectl port-forward -n monitoring svc/doks-cluster-monitoring-pr-alertmanager 9093:9093
Vous devriez voir la sortie suivante:
OutputForwarding from 127.0.0.1:9093 -> 9093
Forwarding from [::1]:9093 -> 9093
Cela indique que le port local9093
est transféré avec succès vers un pod Alertmanager.
Visitezhttp://localhost:9093
dans votre navigateur Web. Vous devriez voir la page suivante AlertmanagerAlerts:
À partir de là, vous pouvez explorer les alertes de déclenchement et les désactiver éventuellement. Pour en savoir plus sur Alertmanager, consultez lesofficial Alertmanager documentation.
Conclusion
Dans ce didacticiel, vous avez installé une pile de surveillance Prometheus, Grafana et Alertmanager dans votre cluster DigitalOcean Kubernetes avec un ensemble standard de tableaux de bord, de règles Prometheus et d'alertes. Puisque cela a été fait à l'aide de Helm, vous pouvez utiliserhelm upgrade
,helm rollback
ethelm delete
pour mettre à niveau, restaurer ou supprimer la pile de surveillance. Pour en savoir plus sur ces fonctions, consultezHow To Install Software on Kubernetes Clusters with the Helm Package Manager.
Le graphiqueprometheus-operator
vous aide à démarrer rapidement la surveillance du cluster à l'aide de Helm. Vous souhaiterez peut-être créer, déployer et configurer manuellement Prometheus Operator. Pour ce faire, consultez les dépôts GitHubPrometheus Operator etkube-prometheus.