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: