目录
1).安装地址:https://github.com/prometheus-operator/kube-prometheus
12).下载对应的grafana的dashboard,镜像页面展示,地址如下:
一、背景:
作为一名运维工程师,现在业务升级,需要安装prometheus,用于监控微服务,在这做一个记录,以后不想在去查找,有需要的可以借鉴,交流。
二、环境:
1、集群安装
2、k8s版本为1.15.1
3.选择了prometheus 2.11.0
4.选择grafana版本为 6.2.2
5.选择node-exporter0.18.0
6.kube-state-metrics1.7.2版本
7.alertmanager 0.18.0
8.k8s-prometheus-adater 0.5.0版本
9.addon-resizer 1.8.4
10.kube-rbac-proxy 0.4.1
三、实施过程
1).安装地址:https://github.com/prometheus-operator/kube-prometheus
2).安装方式两种,
一是,prometheus安装在服务器上,采集组件安装在k8s集群内
二是,都安装在集群内部(建议安装在集群内部,较为简单)
3).安装Prometheus需要对照k8s集群版本。
git clone https://github.com/prometheus-operator/kube-prometheus #拉去部署文件
cd kube-prometheus
git tag #先查看有哪些版本分支
git checkout 0.4.0 #切换分支
这里我出现的问题是,因为安装prometheus需要对照底层k8s的版本,但是我的k8s版本是1.15.1,早都不用的垃圾版本,所以,通过官网查询要去找0.2.0版本,这里找了很久.....,一定找好对应的版本,会避免很多事情。
4).拉去prometheus
5).导入镜像,替换镜像地址
因为是本地部署,没有联网,所以需要修改镜像地址。
cd kube-prometheus
grep -rn image: ./manifests
挨个去替换分别我替换的镜像为:
grafana.tar
k8s-proemtheus-adapter.tar
kube-rbac-proxy.tar
kube-state-metrics.tar
node-exporter.tar
prometheus2.11.0.tar
prometheus-oprator
addon-resizer
alertmanager
prometheus-config-reloader
config-reloader
由于版本太低,导致一些镜像不好找,希望大家不会遇到这种情况,这些镜像把我找死了
6).部署
cd kube-prometheus
kubectl apply -f ./manifests #部署之后可能会有一些镜像不兼容的情况
如果出现镜像不兼容,需要查看每个pod的日志和详细情况,找出对应的镜像名称以及版本,然后去下载更换。
7).开放端口
因为在集群里部署,prometheus和grafana做的都是clusterIP
需要修改为nodeport,ingress,或者metalb,这里我修改为了nodeport,让服务发出来
8).访问
在浏览器里输入,http://localhost:30080 #这里我映射的端口为30080,这里根据个人修改的配置
http://localhost:30081 #同上
ps:到这里不要高兴的太早,真正的好戏才是最后登场,fucking.......
9).根据业务添加prometheus监控项
因为prometheus在k8s集群里,需要去找配置文件挂载路径
通过查看pod的yaml,--config.file
参数指定了配置文件的路径为 /etc/prometheus/config_out/prometheus.env.yaml
在 Volumes
部分,可以看到以下内容
这表示配置文件是通过 Secret
挂载的,SecretName
为 prometheus-k8s。
PS:这里建议先做备份,如果改不好还有回退的机会
kubectl get secret prometheus-k8s -n monitoring -o yaml
#这会显示 Secret 中的内容,通常配置文件是经过 base64 编码的
kubectl get secret prometheus-k8s -n monitoring -o yaml | tee prometheus-k8s-secret.yaml.bak
kubectl get secret prometheus-k8s -n monitoring -o jsonpath='{.data.prometheus\.yaml\.gz}' | base64 -d > prometheus.yaml.gz #secret解码内容
gunzip prometheus.yaml.gz #解压缩包,查看内容
vi prometheus.yaml #进行配置,添加监控项
gzip prometheus.yaml #将修改好的文件,重新压缩文件
base64 prometheus.yaml.gz > prometheus.yaml.gz.base64 #重新编码
kubectl create secret generic prometheus-k8s -n monitoring --from-file=prometheus.yaml.gz --dry-run=client -o yaml | kubectl apply -f - #一般这种都会好,但是我这里出现了问题
secret被operator调用,跟改不了的情况
这里出现的原因是:
直接原因,云控制台编辑时未自动刷新资源版本(但是在底层也不行)
根本原因,prometheus Operator 在后台持续同步Secret,(通过helm或者Operator管理)
解决方案:
步骤一:禁用Operator自动同步(临时)
kubectl -nmonitoring patch promehtus k8s --type merge -p '{"spec":{"paused":true}}'
#暂停Prometheus Operator 自动协调(避免冲突)
#作用:阻止Operator覆盖修改内容,保持约5分钟窗口期
步骤二:通过底层命令安全更新Secret
kubectl create secret generic prometheus-k8s -n monitoring --from-file=prometheus.yaml.gz --dry-run=client -o yaml | kubectl apply -f - #这里不能apply,解决方案如下
kubectl delete secret prometheus-k8s -nmonitoring #首先删除之前的包
kubectl create -f prometheus.yaml #将之前备份的源文件,把secret内容更改为新的之后,进行创建
10).镜像验证是否完成监控项的添加
kubectl get secret prometheus-k8s -n monitoring -o yaml
访问prometheus的端口,页面的status中target里查看是否有内容(因为工作内容原因,无法放图,大家部署到这一步的时候,会看到的....)
11).配置Grafana
1、进入页面之后,点击左边齿轮里的Data Sources
2、右边的Add data source进行数据源添加
3、选择Prometheus ,配置url,起个名字
4、点击下面的Test
12).下载对应的grafana的dashboard,镜像页面展示,地址如下:
https://grafana.com/grafana/dashboards/ #地址
如果是离线部署,建议下载json格式的,然后进行导入,在grafana页面左边有一个+号,点击进去有一个Improt,右边有一个绿色的Upload .json File的接口,导入你下载的json文件,然后会有几个选项如下
Options:
Name:随便起个名字
Folder:给个目录
Uid:自动会出现
prometheus:选择数据源
然后点击Import(Overwrite)提交就完成了
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OKOK,到这里就结束了,因为我这里的版本太低,所以导致安装不顺利,希望大家不会遇到,如果有k8s版本为1.15.的需要安装prometheus可以参考一下。