Metrics Server collecte les métriques kubernetes
Publié le :
Metrics Server est venue remplacer rapidement Heapster et permet de collecter et d’aggreger des metriques de consommation en provenance des nodes et des pods du cluster Kubernetes.
Prérequis
Pour que Metrics Server fonctionne correctement il faut au préalable activer la diffustion des certificats généré par kubelet, pour les faire signer par l’autorité de certification du cluster. Si vous ne faites pas cela vous obtiendrez des erreurs dans les logs du pods metrics-server avec ce genre de contenu :
"Failed to scrape node" err="Get \"https://192.168.121.106:10250/stats/summary?only_cpu_and_memory=true\": x509: cannot validate certificate for 192.168.121.106 because it doesn't contain any IP SANs" node="master1"On pourrait désactiver le controle des certificats mais j’aime pas ça. Donc dans un premier il faut éditer le configmap kubelet-config appartenant au namespace kube-system :
source <(kubectl completion bash) # Activation de l'autocompletionkubectl -n kube-system get configmapsNAME                                 DATA   AGEcalico-config                        4      79mcoredns                              1      5h49mextension-apiserver-authentication   6      5h49mkube-proxy                           2      5h49mkube-root-ca.crt                     1      5h49mkubeadm-config                       1      5h49mkubelet-config-1.23                  1      5h49mkubectl -n kube-system edit configmaps kubelet-config-1.23Rechercher la ligne contenant kind: KubeletConfiguration et ajouter juste en
dessous ceci :
    kind: KubeletConfiguration    serverTLSBootstrap: trueComme sous vi :wq
Ensuite sur tous les noeuds du cluster (master et worker) éditer de la même
façon le fichier /var/lib/kubelet/config.yaml. Je fourni les exemples de
commande à réaliser dans ma CKASandBox :
ssh master1vagrant@master1:~$ sudo suroot@master1:/home/vagrant# vi /var/lib/kubelet/config.yamlDe la même manière que précédement :
    kind: KubeletConfiguration    serverTLSBootstrap: trueSauvegardez et quittez. Il faut ensuite relancer le service kubelet
root@master1:/home/vagrant# systemctl restart kubeletRépétez l’opération sur tous les noeuds du cluster !
Maintenant nous allons signer les certificats.
kubectl get csrNAME        AGE     SIGNERNAME                                    REQUESTOR                 REQUESTEDDURATION   CONDITIONcsr-fjfpn   2m17s   kubernetes.io/kubelet-serving                 system:node:worker1       <none>              Approved,Issuedcsr-mh2vl   4s      kubernetes.io/kubelet-serving                 system:node:master1       <none>              Pendingcsr-t6nxf   10m     kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:kh6206   <none>              Approved,IssuedPour tous les certificats en status pending :
kubectl certificate approve csr-mh2vlcertificatesigningrequest.certificates.k8s.io/csr-mh2vl approvedInstallation de Metrics Server
C’est assez simple il suffit de lancer cette commande kubectl :
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlserviceaccount/metrics-server createdclusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader createdclusterrole.rbac.authorization.k8s.io/system:metrics-server createdrolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader createdclusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator createdclusterrolebinding.rbac.authorization.k8s.io/system:metrics-server createdservice/metrics-server createddeployment.apps/metrics-server createdapiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io createdVérifions le status du pod metrics-server :
kubectl get pod -ANAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGEkube-system   calico-kube-controllers-647d84984b-pl26z   1/1     Running   0          8m20skube-system   calico-node-bl2cw                          1/1     Running   0          8m21skube-system   calico-node-cfqvd                          1/1     Running   0          8m21skube-system   coredns-64897985d-kbf5d                    1/1     Running   0          4h38mkube-system   coredns-64897985d-xtv92                    1/1     Running   0          4h38mkube-system   etcd-master1                               1/1     Running   5          4h38mkube-system   kube-apiserver-master1                     1/1     Running   5          4h38mkube-system   kube-controller-manager-master1            1/1     Running   5          4h38mkube-system   kube-proxy-2h652                           1/1     Running   0          4h38mkube-system   kube-proxy-6sz96                           1/1     Running   0          8m42skube-system   kube-scheduler-master1                     1/1     Running   5          4h38mkube-system   metrics-server-6c49cf6978-hxcsw            0/1     Running   0          8sSi au bout de quelques minutes il n’est pas Ready (1/1). Alors consulter ces logs :
kubectl -n kube-system logs -f metrics-server-6c49cf6978-hxcswConsultation des metriques remontées par Metrics Server
Kubectl permet d’afficher et d’exploiter les informations stockées dans metrics-server.
Pour les nodes :
kubectl top nodeNAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%master1   147m         7%     1116Mi          68%worker1   58m          5%     572Mi           64%Pour les pods
kubectl top pod -ANAMESPACE     NAME                                       CPU(cores)   MEMORY(bytes)kube-system   calico-kube-controllers-647d84984b-pl26z   2m           15Mikube-system   calico-node-bl2cw                          24m          122Mikube-system   calico-node-cfqvd                          26m          126Mikube-system   coredns-64897985d-kbf5d                    2m           20Mikube-system   coredns-64897985d-xtv92                    1m           17Mikube-system   etcd-master1                               13m          52Mikube-system   kube-apiserver-master1                     38m          310Mikube-system   kube-controller-manager-master1            16m          55Mikube-system   kube-proxy-2h652                           1m           18Mikube-system   kube-proxy-6sz96                           1m           16Mikube-system   kube-scheduler-master1                     3m           24Mikube-system   metrics-server-6c49cf6978-hxcsw            3m           16MiCes informations vont vous permettre de mettre en place des limites de ressources à chacun des composants de kubernetes.
Plus loin avec Metrics Server
Metrics-Server ne propose aucune historisation des données collectées. Pour cela il faut installer par exemple Prometheus, pour le stockage et Grafana, pour la visualisation des données collectées. Cela fera le sujet d’un prochain billet.
Autre point Metrics Server intègre un outil d’autoscaling Horizontal qui fera aussi le sujet d’un autre billet.
