欢迎加入本站的kubernetes技术交流群,微信添加:加Blue_L。
最近再Kubernetes集群上部署kube-prometheus套件遇到了一点小问题,再次记录一下。
按照官方的快速指引部署到集群中后,发现没有部署custom-metrics和external-metrics服务,而正好需要使用这两个功能做自动扩缩容,因此按照该文档进行自定义部署,但是这里遇到了一些小问题。
首先按照文档中的指引,安装jb
,jsonnet
和gojsontoyaml
这几个命令:
# 此处静态编译为了拿到任何地方都能直接用
yum install -y glibc-devel
go install -a -ldflags='-linkmode external -extldflags -static' github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest
go install -a github.com/google/go-jsonnet/cmd/jsonnet@latest
go install -a github.com/brancz/gojsontoyaml@latest
mkdir bin/
cp ~/go/bin/{gojsontoyaml,jsonnet,jb} bin/
export PATH=`pwd`/bin:$PATH
jb init # Creates the initial/empty `jsonnetfile.json`
jb install github.com/prometheus-operator/kube-prometheus/jsonnet/kube-prometheus@release-0.9
# jb update
# 下载对应版本的build.sh和example.jsonnet文件
$ wget https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/release-0.9/example.jsonnet -O example.jsonnet
$ wget https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/release-0.9/build.sh -O build.sh
# 编辑example.jsonnet,去掉被注释掉的custom metrics和external metrics部分
sh build.sh example.jsonnet
# 上面命令会重新生成manifests目录
kubectl apply -f manifests/setup
kubectl apply -f manifests
遇到的问题如下:
一丶无法获取pods的cpu指标,通过打开prometheus的日志发现,访问kubelet的10250端口没权限(应该是和集群配置有关),通过修改下面文件,将kubelet监控的https-metrics改为http-metrics,这样会访问kubelet的10250端口获取cadvisor指标。
# 将serviceMonitorKubelet监控中的https-metrics改为http-metrics
./vendor/github.com/prometheus-operator/kube-prometheus/jsonnet/kube-prometheus/components/k8s-control-plane.libsonnet
二丶获取Pod的指标无权限,因为默认生成的prometheus的clusterrole中缺少了相关权限
# 将prometheus的clusterrole增加了权限
./vendor/kube-prometheus/components/prometheus.libsonnet
三丶在example.jsonnet中可自定义镜像配置(如下),但是grafana部分使用了一个jsonnet中的std.split
函数,使用“:”分割,导致生成的grafana镜像配置丢失了后面的端口和路径,目前手动修改manifests中的grafana deployment解决:
values+:: {
common+: {
namespace: 'monitoring',
images: {
alertmanager: 'mydomain.com:1234/prometheus/alertmanager:v' + $.values.common.versions.alertmanager,
blackboxExporter: 'mydomain.com:1234/prometheus/blackbox-exporter:v' + $.values.common.versions.blackboxExporter,
grafana: 'mydomain.com:1234/grafana/grafana:v' + $.values.common.versions.grafana,
kubeStateMetrics: 'hmydomain.com:1234/kube-state-metrics/kube-state-metrics:v' + $.values.common.versions.kubeStateMetrics,
nodeExporter: 'mydomain.com:1234/prometheus/node-exporter:v' + $.values.common.versions.nodeExporter,
prometheus: 'mydomain.com:1234/prometheus/prometheus:v' + $.values.common.versions.prometheus,
prometheusAdapter: 'mydomain.com:1234/prometheus-adapter/prometheus-adapter:v' + $.values.common.versions.prometheusAdapter,
prometheusOperator: 'mydomain.com:1234/prometheus-operator/prometheus-operator:v' + $.values.common.versions.prometheusOperator,
prometheusOperatorReloader: 'mydomain.com:1234/prometheus-operator/prometheus-config-reloader:v' + $.values.common.versions.prometheusOperator,
kubeRbacProxy: 'mydomain.com:1234/brancz/kube-rbac-proxy:v' + $.values.common.versions.kubeRbacProxy,
configmapReload: 'mydomain.com:1234/jimmidyson/configmap-reload:v' + $.values.common.versions.configmapReload,
},
},