Commencez à surveiller votre cluster Kubernetes avec Prometheus et Grafana

Dans mon article d’introduction sur l’ingénierie du chaos, l’une des principales choses que j’ai abordées était l’importance d’obtenir l’état stable de votre cluster Kubernetes fonctionnel. Avant de commencer à provoquer le chaos, vous devez savoir à quoi ressemble le cluster dans un état stable.
Cet article explique comment obtenir ces métriques à l’aide de Prometheus et Grafana. Cette procédure pas à pas utilise également Pop!_OS 20.04, Helm 3, Minikube 1.14.2 et Kubernetes 1.19.
Contents
Configurer Minikube
Installer Minikube de quelque manière que ce soit qui a du sens pour votre environnement. Si vous disposez de suffisamment de ressources, je vous recommande de donner à votre machine virtuelle un peu plus que la mémoire et la puissance CPU par défaut :
$ minikube config set memory 8192
❗ These changes will take effect upon a minikube delete and then a minikube start
$ minikube config set cpus 6
❗ These changes will take effect upon a minikube delete and then a minikube start
Ensuite, démarrez et vérifiez l’état de votre système :
$ minikube start
😄 minikube v1.14.2 on Debian bullseye/sid
🎉 minikube 1.19.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.19.0
💡 To disable this notice, run: 'minikube config set WantUpdateNotification false'✨ Using the docker driver based on user configuration
👍 Starting control plane node minikube in cluster minikube
🔥 Creating docker container (CPUs=6, Memory=8192MB) ...
🐳 Preparing Kubernetes v1.19.0 on Docker 19.03.8 ...
🔎 Verifying Kubernetes components...
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" by default
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Installer Prometheus
Une fois le cluster configuré, démarrez vos installations. Installer Prométhée d’abord en suivant les instructions ci-dessous.
Tout d’abord, ajoutez le référentiel dans Helm :
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories
Installez ensuite votre charte Prometheus Helm. Tu devrais voir:
$ helm install prometheus prometheus-community/prometheus
NAME: prometheus
LAST DEPLOYED: Sun May 9 11:37:19 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.default.svc.cluster.local
Obtenez l’URL du serveur Prometheus en exécutant ces commandes dans le même shell :
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 9090
Vous pouvez accéder au Prometheus Alertmanager via le port 80 sur ce nom DNS depuis votre cluster :
prometheus-alertmanager.default.svc.cluster.local
Obtenez l’URL Alertmanager en exécutant ces commandes dans le même shell :
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 9093
#################################################################################
###### WARNING: Pod Security Policy has been moved to a global property. #####
###### use .Values.podSecurityPolicy.enabled with pod-based #####
###### annotations #####
###### (e.g. .Values.nodeExporter.podSecurityPolicy.annotations) #####
#################################################################################
Vous pouvez accéder à Prometheus PushGateway via le port 9091 sur ce nom DNS depuis votre cluster :
prometheus-pushgateway.default.svc.cluster.local
Obtenez l’URL PushGateway en exécutant ces commandes dans le même shell :
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace default port-forward $POD_NAME 9091For more information on running Prometheus, visit:
https://prometheus.io/
Vérifiez que vos pods sont en cours d’exécution :
$ kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
prometheus-alertmanager-ccf8f68cd-hcrqr 2/2 Running 0 3m22s
prometheus-kube-state-metrics-685b975bb7-mhv54 1/1 Running 0 3m22s
prometheus-node-exporter-mfcwj 1/1 Running 0 3m22s
prometheus-pushgateway-74cb65b858-7ffhs 1/1 Running 0 3m22s
prometheus-server-d9fb67455-2g2jw 2/2 Running 0 3m22s
Ensuite, exposez votre port sur le pod du serveur Prometheus afin que vous puissiez voir l’interface Web Prometheus. Pour ce faire, vous avez besoin du nom du service et du port. Vous devez également trouver un nom pour ouvrir le service à l’aide de la commande de service Minikube.
Obtenez le nom du service pour prometheus-server
:
$ kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m
prometheus-alertmanager ClusterIP 10.106.68.12 <none> 80/TCP 8m22s
prometheus-kube-state-metrics ClusterIP 10.104.167.239 <none> 8080/TCP 8m22s
prometheus-node-exporter ClusterIP None <none> 9100/TCP 8m22s
prometheus-pushgateway ClusterIP 10.99.90.233 <none> 9091/TCP 8m22s
prometheus-server ClusterIP 10.103.195.104 <none> 9090/TCP 8m22s
Exposer le service en tant que type Node-port
. Fournir un port cible de 9090
et un nom que vous souhaitez appeler le serveur. Le port de nœud est le port d’écoute du serveur. Voici un extrait de la charte Helm :
## Port for Prometheus Service to listen on
##
port: 9090
La commande est :
$ kubectl expose service prometheus-server --type=NodePort --target-port=9090 --name=prom-server
service/prom-server exposed
Ensuite, vous avez besoin de Minikube pour ouvrir le service et le navigateur :
jess@Athena:~$ minikube service prom-server
|-----------|-------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|---------------------------|
| default | prom-server | 80 | http://192.168.49.2:32169 |
|-----------|-------------|-------------|---------------------------|
🎉 Opening service default/prom-server in default browser...
Votre navigateur devrait s’ouvrir et vous montrer le service Prometheus.
Toutes nos félicitations! Prometheus est maintenant installé sur votre cluster.
Installer Grafana
Ensuite, installez Grafana et configurez-le pour qu’il fonctionne avec Prometheus. Suivez les étapes ci-dessous pour exposer un service pour configurer Grafana et collecter des données de Prometheus pour recueillir votre état stable.
Commencez par obtenir votre charte Helm :
$ helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories
Recherchez votre graphique :
$ helm search repo grafana
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/grafana 5.2.11 7.5.5 Grafana is an open source, feature rich metrics...
bitnami/grafana-operator 0.6.5 3.10.0 Kubernetes Operator based on the Operator SDK f...
grafana/grafana 6.9.0 7.5.5 The leading tool for querying and visualizing t...
stable/grafana 5.5.7 7.1.1 DEPRECATED - The leading tool for querying and ...
Comme stable/grafana est déprécié, installez bitnami/grafana. Installez ensuite votre charte :
helm install grafana bitnami/grafana
NAME: grafana
LAST DEPLOYED: Sun May 9 12:09:53 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **
- Obtenez l’URL de l’application en exécutant :
echo "Browse to http://127.0.0.1:8080"
kubectl port-forward svc/grafana 8080:3000 & - Obtenez les identifiants d’administrateur :
echo "User: admin"
echo "Password: $(kubectl get secret grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 --decode)"
Comme vous pouvez le voir dans la sortie d’installation de Helm, le port cible de Grafana est 3000, vous utiliserez donc ce port pour exposer le service afin de voir l’interface Web de Grafana. Avant d’exposer le service, vérifiez que vos services sont en cours d’exécution :
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default grafana-6b84bbcd8f-xt6vd 1/1 Running 0 4m21s
Exposez le service :
$ kubectl expose service grafana --type=NodePort --target-port=3000 --name=grafana-server
service/grafana-server exposed
Activez le service pour ouvrir un navigateur avec un service Minikube :
jess@Athena:~$ minikube service grafana-server
|-----------|----------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|----------------|-------------|---------------------------|
| default | grafana-server | 3000 | http://192.168.49.2:30549 |
|-----------|----------------|-------------|---------------------------|
🎉 Opening service default/grafana-server in default browser...
Vous verrez l’écran d’accueil où vous pourrez vous connecter.
Configurez les informations d’identification pour vous connecter à Grafana à l’aide de kubectl. Les commandes sont apparues dans la sortie de l’installation ; voici les commandes utilisées :
$ echo "User: admin"
User: admin
$ echo "Password: $(kubectl get secret grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 --decode)"
Password: G6U5VeAejt
Connectez-vous avec vos nouvelles informations d’identification et vous verrez le tableau de bord Grafana.
Toutes nos félicitations! Vous avez maintenant une installation Grafana fonctionnelle dans votre cluster Minikube avec la possibilité de vous connecter. L’étape suivante consiste à configurer Grafana pour qu’il fonctionne avec Prometheus pour collecter des données et afficher votre état stable.
Configurer Grafana avec Prometheus
Maintenant que vous pouvez vous connecter à votre instance Grafana, vous devez configurer la collecte de données et le tableau de bord. Comme il s’agit d’une configuration entièrement basée sur le Web, je vais passer en revue la configuration à l’aide de captures d’écran. Commencez par ajouter votre collection de données Prometheus. Clique le icône d’engrenage sur le côté gauche de l’écran pour ouvrir le Configuration paramètres, puis sélectionnez La source de données.
Sur l’écran suivant, cliquez sur Ajouter une source de données.
Sélectionner Prométhée.
Étant donné que vous avez configuré votre instance Prometheus pour qu’elle soit exposée sur le port 80, utilisez le nom de service serveur prometheus et le serveur port 80.
Enregistrez et testez votre nouvelle source de données en faisant défiler l’écran jusqu’en bas et en cliquant sur Enregistrer et tester. Vous devriez voir une bannière verte qui dit La source de données fonctionne.
Revenez en haut de la page et cliquez sur Tableaux de bord.
Importez les trois options de tableau de bord.
Clique le loupe sur le côté gauche pour confirmer que les trois tableaux de bord ont été importés.
Maintenant que tout est configuré, cliquez sur Statistiques de Prometheus 2.0, et vous devriez voir quelque chose de similaire à ceci.
Toutes nos félicitations! Vous disposez d’une collecte de données de base de Prometheus sur votre cluster.
Importez plus de tableaux de bord de surveillance
Vous pouvez importer des tableaux de bord détaillés supplémentaires à partir de Grafana Labs tableaux de bord communautaires collection. J’ai choisi deux de mes favoris, Dash-minikube et Surveillance de cluster Kubernetes, pour cette procédure pas à pas rapide.
Pour importer un tableau de bord, vous avez besoin de son ID de la collection de tableaux de bord. Tout d’abord, cliquez sur le plus (+) signe sur le côté gauche pour créer un tableau de bord, puis cliquez sur Importer dans la liste déroulante et saisissez l’ID. Pour Dash-minikube, c’est l’ID 10219.
Cliquez sur Charge, et entrez la source de données sur l’écran suivant. Comme cela utilise Prometheus, entrez votre source de données Prometheus.
Cliquez sur Importer, et le nouveau tableau de bord apparaîtra.
Vous disposez désormais d’un nouveau tableau de bord pour suivre vos statistiques Minikube. Si vous suivez les mêmes étapes en utilisant Kubernetes Cluster Monitoring (ID 2115), vous verrez un tableau de bord de surveillance plus détaillé.
Vous pouvez désormais suivre votre état d’équilibre avec les collections de données et les visuels Grafana et Prometheus.
Dernières pensées
Avec ces outils open source, vous pouvez collecter l’état stable de votre cluster et maintenir une bonne impulsion dessus. Ceci est important dans l’ingénierie du chaos, car cela vous permet de tout vérifier dans un état destructeur et instable et d’utiliser ces données pour tester votre hypothèse sur ce qui pourrait arriver à son état lors d’une panne.