组件介绍

Kube-Prometheus 项目用来方便在Kubernetes中安装Prometheus

Prometheus-adapter用来将Prometheus采集到的数据,转化成Kubernetes认识的格式,并同时会启动一个custom-metrics-api-server,用于扩展`api-server

以上两个组件配合,其目的是要实现其他指标的HPA。因为官方提供的HPA只能基于CPU内存

前期准备

kube-prometheus安装

  1. 下载源码

    1
    2
    
    # 最好是检出指定版本,指定版本对应指定的K8S版本
    git clone  https://github.com/prometheus-operator/kube-prometheus.git
    
  2. 应用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-adapterDeployment

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貌似没多大作用。