Commencez à surveiller votre cluster Kubernetes avec Prometheus et Grafana

  • FrançaisFrançais



  • 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.

    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 9091

    For 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 **

    1. 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 &

    2. 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.

    Source

    N'oubliez pas de voter pour cet article !
    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading...

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée.