kubernetes搭建mertics-server

简介

先介绍下我本地k8s的情况

1
2
3
4
5
6
NAME                     STATUS   ROLES    AGE     VERSION
k8s-master1 Ready master 6h22m v1.18.0
k8s-master2 Ready master 6h22m v1.18.0
k8s-master3 Ready master 6h21m v1.18.0
k8s-slave1 Ready <none> 6h21m v1.18.0
k8s-slave2 Ready <none> 6h21m v1.18.0

mertics api 简介

从k8s 1.8开始,注意是1.8不是我安装的1.18 1.18版本是大于1.8的,不知道为什么总有人觉得1.18版本小于1.8版本

从k8s 1.8开始kubernetes就有metics api了,这些指标可以被用户直接使用,比如kubectl top这个命令,还有hpa(Horizontal Pod Autoscaler)会使用这些指标去决策。如果你要使用mertics api那么就要安装mertics server

Metrics Server是k8s集群范围资源使用数据的聚合器,因为我使用的是kubeadm去创建的集群,所以Metrics Server是没有默认安装的,需要手动安装,集群安装完成时候kubectl top命令是不能使用的

操作

首先clone mertics-server的仓库

git clone https://github.bboysoul.tk/kubernetes-sigs/metrics-server.git

因为mertics-server是要使用aggregation layer的,所以我们要把apiserver 的aggregation layer打开,编辑

vim /etc/kubernetes/manifests/kube-apiserver.yaml

在command中加入

- --enable-aggregator-routing=true

把每个master节点的kubelet重启

systemctl restart kubelet

之后还有一个问题是因为我们kubelet的证书安装的时候就是自签名的证书,所以是不受信任的,我们要在deploy/kubernetes/metrics-server-deployment.yaml的containers.args加入

- --kubelet-insecure-tls

最后变为

1
2
3
4
5
6
7
8
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls

之后apply这些yaml文件

kubectl apply -f deploy/kubernetes

因为容器是存储在k8s.gcr.io中的,所以有些神奇的操作你懂的

查看api是不是创建成功

kubectl api-versions

看下top命令是不是可以使用

kubectl top nodes

使用kubectl打开一个proxy

kubectl proxy --port=8080

之后访问下api

curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/nodes

curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/pods

如果可以访问,说明没有什么问题

欢迎关注Bboysoul的博客www.bboy.app

Have Fun

欢迎关注我的其它发布渠道