组件介绍
Kube-Prometheus
项目用来方便在Kubernetes
中安装Prometheus
Prometheus-adapter
用来将Prometheus
采集到的数据,转化成Kubernetes
认识的格式,并同时会启动一个custom-metrics-api-server
,用于扩展`api-server
以上两个组件配合,其目的是要实现其他指标的HPA
。因为官方提供的HPA
只能基于CPU
与内存
前期准备
kube-prometheus
安装
-
下载源码
1
2
|
# 最好是检出指定版本,指定版本对应指定的K8S版本
git clone https://github.com/prometheus-operator/kube-prometheus.git
|
-
应用YAML
1
2
3
4
|
cd kube-prometheus/manifests
kubectl apply -f setup/
# 应用其他所有
kubectl apply -f manifests/
|
Prometheus-adapter
安装
下载项目
1
|
git clone -b 0.8.4 https://github.com/kubernetes-sigs/prometheus-adapter.git
|
因这它会用到服务端的证书,所以还要下载另外三个工具
SSL
证书工具
1
2
3
4
5
6
7
8
9
10
11
12
|
# cfssl
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
chmod +x cfssl_linux-amd64
mv cfssl_linux-amd64 /root/local/bin/cfssl
# cfssljson
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
chmod +x cfssljson_linux-amd64
mv cfssljson_linux-amd64 /root/local/bin/cfssljson
# 生成证书/configMap YAML的部署脚本
wget https://github.com/prometheus-operator/kube-prometheus/raw/62fff622e9900fade8aecbd02bc9c557b736ef85/experimental/custom-metrics-api/gencerts.sh
|
如果因为某些众所周知的原因,以上资源下载不下来,那么可以这样..
1
2
3
4
5
6
7
8
|
docker pull unknowname/download
docker run -d --name tmp unknowname/download sleep 3600
# 以上相关资源都放在/tmp目录下了
docker exec -ti tmp ls -al /tmp
# 将容器里面的东西复制到本机
docker cp tmp:/tmp/cfssljosn ./
...
|
Golang
安装
因为生成证书的脚本使用到的Golang
,所以也需要安装下
1
|
yum install golang jq -y
|
设置GOPROXY
1
2
|
# 加入gencerts.sh文件内,加速下载
export GOPROXY=https://goproxy.io,direct
|
实施
创建证书以及ConfigMap
资源
1
2
3
4
5
|
cd prometheos-adapter/deploy
kubectl create namespace custom-metrics
# 生成证书以及prometheos-adapter所需要的ConfigMap,
# 执行以后,会在当前目前下生成cm-adapter-serving-certs.yaml
sh gencerts.sh
|
修改prometheus-adapter
的Deployment
1
2
3
|
vim mainifests/custom-metrics-apiserver-deployment.yaml
# Prometheus的SVC地址改为prometheus-k8s.monitoring.svc:9090
# 即kube-prometheus项目提供的prometheus的SVC地址
|
应用YAML
1
2
3
|
# 应用cm-adapter-serving-certs.yaml
kubectl apply -f cm-adapter-serving-certs.yaml -n custom-metrics
kubectl apply -f manifests/
|
验证
查看Prometheus
提供的自定义指标集
1
|
kubectl get --raw "/apis/custom.metrics.k8s.io" | jq .
|
应该返回类似如下数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{
"kind": "APIGroup",
"apiVersion": "v1",
"name": "custom.metrics.k8s.io",
"versions": [
{
"groupVersion": "custom.metrics.k8s.io/v1beta2",
"version": "v1beta2"
},
{
"groupVersion": "custom.metrics.k8s.io/v1beta1",
"version": "v1beta1"
}
],
"preferredVersion": {
"groupVersion": "custom.metrics.k8s.io/v1beta2",
"version": "v1beta2"
}
}
|
查看Prometheus
提供的自定义指标
1
|
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq . | more
|
好了,万里长征完成了一小步,输出的指标都可以用来做HPA
,但是通过仔细观察,你会发现,这上面的指标对真正实现HPA
貌似没多大作用。