简介
先介绍下我本地k8s的情况
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
最后变为
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
如果可以访问,说明没有什么问题
欢迎关注我的博客www.bboy.app
Have Fun