Installer Metrics Server sur un cluster Kubernetes

Introduction

Metrics Server pemet de collecter des données de consommations de ressources depuis les noeuds du cluster et les pods fonctionnant dessus.
Dans cet article nous nous baserons sur le cluster Kubernetes configuré dans le précédent article.

Prérequis

Sur tous les nodes (masters et workers), nous allons executer la commande suivante :

echo "serverTLSBootstrap: true" >> /var/lib/kubelet/config.yaml && systemctl restart kubelet

La commande kubectl get csr nous permet ensuite de visualiser les demandes de signature de certificats :

Nous allons ensuite les signer grace à la commande kubectl certificate approve :

Ensuite, sur les noeuds master-1, master-2 et master-3, nous allons éditer le fichier /etc/kubernetes/manifests/kube-apiserver.yaml pour y ajouter une ligne

--enable-aggregator-routing=true

Nous pouvons à présent redémarrer le service kubelet.

Installation de Metrics Server

L’installation se fait très facilement grâce à la commande :

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Au bout de quelques instants, nous pouvons voir que le pod metrics-server est démarré :

Nous pouvons également vérifier que les données sont correctement collectées grace à la commande kubectl top nodes :

Exemple d’utilisation

Grâce au Metrics Server, nous pouvons par exemple utiliser une ressource de type HorizontalPodAutoscaler afin d’adapter le nombre de pods en fonction de l’utilisation du CPU.
Par exemple nous pouvons créer le fichier hpa.yaml :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      run: nginx
  replicas: 1
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 250m
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    run: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 30

Et ensuite executer la commande :

kubectl create -f hpa.yaml

Au bout de quelques instants, nous pouvons avoir une visualisation de l’état de l’HorizontalPodAutoscaler grâce à la commande kubectl get hpa:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.