Aller au contenu

Surveillance de l'état de santé du cluster

Kubernetes Metrics Server

Installation avec le fichier de manifest

Bash
1
2
3
mkdir -p ~/k8s/kube-system && cd ~/k8s/kube-system
# Download the manifest
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

Il faut modifier ce fichier pour y ajouter l'argument --kubelet-insecure-tls dans le Deployment du metrics-server. Le nombre de replicas peut également être augmenté si souhaité.

Suite à ça, il est possible d'installer le metrics server à partir du manifest

Bash
kubectl apply -f high-availability-1.21+.yaml

To summarize in a sentence: kube-state-metrics exposes metrics for all sorts of Kubernetes objects. metrics-server only exposes very few metrics to Kubernetes itself (not scrapable directly with Prometheus), like node & pod utilization.

Prometheus

Bash
1
2
3
4
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/prometheus -f values.yaml \
--create-namespace -n monitoring

Grafana

Bash
1
2
3
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana -f values.yaml --create-namespace -n monitoring

Dashboards utilisés

Dashboard ID
Prometheus 19105
Kubernetes / System / API Server 15761
Kubernetes / System / CoreDNS 15762
Kubernetes / Views / Global 15757
Kubernetes / Views / Namespaces 15758
Kubernetes / Views / Nodes 15759
Kubernetes / Views / Pods 15760

Certains panels peuvent ne pas afficher correctement leur donner, si besoin les instructions ci-dessous devraient résoudre ces problèmes.

  • Le dashboard Kubernetes / Views / Namespaces doit être modifié :

    • Edit le panel Namespace(s) usage on total cluster CPU in %
    • Aller dans les options de la requête, modifier le type Instant en Range et activer Exemplars
    • Sauvegarder le dashboard
  • Le dashboard Kubernetes / Views / Nodes doit être modifié :

    • Edit les panels CPU Total, RAM Total, CPU usage by Pod, Memory usage by Pod, Persistent Volumes - Usage in %, Persistent Volumes - Usage in GB et Persistent Volumes - Inodes
    • Modifier les requêtes pour remplacer node par instance
    • Sauvegarder le dashboard

Elastic Cloud

Installation

Bash
1
2
3
4
5
# Installation custom resource definitions
kubectl create -f https://download.elastic.co/downloads/eck/2.13.0/crds.yaml

# Install the operator with its RBAC rules
kubectl apply -f https://download.elastic.co/downloads/eck/2.13.0/operator.yaml

La suite de l'installation consiste à

  1. Déployer le cluster elasticsearch
  2. Déployer Kibana
  3. Déployer différents beats, tel que Filebeat et Metricbeat

Accéder à Kibana

L'accès à Kibana nécessite obligatoirement une connexion SSL. La configuration Traefik suivant permet d'y accéder.

YAML
apiVersion: traefik.io/v1alpha1
kind: ServersTransport
metadata:
  name: transportinsecure
  namespace: elk
spec:
  insecureSkipVerify: true
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-ir-ssl
  namespace: elk # must match the namespace of services to access
spec:
  entryPoints:
    - websecure # Defined in traefik.yaml args
  routes:
  - match: Host(`kibana.bota-hepia.ch`)
    kind: Rule
    services:
    - name: kibana-kb-http
      port: 5601
      serversTransport: transportinsecure # allow self signed certificates
  tls:
    domains:
    - main: bota-hepia.ch

La page de login est désormais accessible à l'adresse https://kibana.bota-hepia.ch.

  • L'utilisateur par défaut pour se connecter elastic
  • Le mot de passe est stocké dans un secret, et s'obtient avec la commande suivante :
Bash
kubectl get secret elasticsearch-es-elastic-user -o=jsonpath='{.data.elastic}' -n elk \
| base64 --decode; echo

Vérifier que tout est fonctionnel depuis la page des métriques en https://kibana.bota-hepia.ch/app/metrics/hosts.

Ressources

Kubernetes Metrics Server :

Prometheus :

Grafana :

Elastic :