使用Prometheus监控kubernetes集群
一键安装(网络可访问quay.io):
kubectl apply --filename https://raw.githubusercontent.com/giantswarm/kubernetes-prometheus/master/manifests-all.yaml
操作面板(到https://github.com/giantswarm/kubernetes-prometheus下载文件):
kubectl apply --filename ./manifests/grafana/import-dashboards/job.yaml
国内:
我们使用 Giantswarm 开源的 kubernetes-promethues 来监控 kubernetes 集群,所有 的 YAML 文件可以在 ../manifests/prometheus 目录下找到。
需要用到的镜像有:
- sz-pg-oam-docker-hub-001.tendcloud.com/library/prometheus-alertmanager:v0.7.1
- sz-pg-oam-docker-hub-001.tendcloud.com/library/grafana:4.2.0
- sz-pg-oam-docker-hub-001.tendcloud.com/library/giantswarm-tiny-tools:latest
- sz-pg-oam-docker-hub-001.tendcloud.com/library/prom-prometheus:v1.7.0
- sz-pg-oam-docker-hub-001.tendcloud.com/library/kube-state-metrics:v1.0.1
- sz-pg-oam-docker-hub-001.tendcloud.com/library/dockermuenster-caddy:0.9.3
- sz-pg-oam-docker-hub-001.tendcloud.com/library/prom-node-exporter:v0.14.0
同时备份到时速云:
- index.tenxcloud.com/jimmy/prometheus-alertmanager:v0.7.1
- index.tenxcloud.com/jimmy/grafana:4.2.0
- index.tenxcloud.com/jimmy/giantswarm-tiny-tools:latest
- index.tenxcloud.com/jimmy/prom-prometheus:v1.7.0
- index.tenxcloud.com/jimmy/kube-state-metrics:v1.0.1
- index.tenxcloud.com/jimmy/dockermuenster-caddy:0.9.3
- index.tenxcloud.com/jimmy/prom-node-exporter:v0.14.0
注:所有镜像都是从官方镜像仓库下载下。
部署
我将部署时需要用的的配置文件分成了 namespace、serviceaccount、configmaps、clusterrolebinding 和最后的部署 prometheus、grafana 的过程。
## 创建 monitoring namespaece
kubectl create -f prometheus-monitoring-ns.yaml
## 创建 serviceaccount
kubectl create -f prometheus-monitoring-serviceaccount.yaml
## 创建 configmaps
kubectl create -f prometheus-configmaps.yaml
## 创建 clusterrolebinding
kubectl create clusterrolebinding kube-state-metrics --clusterrole=cluster-admin --serviceaccount=monitoring:kube-state-metrics
kubectl create clusterrolebinding prometheus --clusterrole=cluster-admin --serviceaccount=monitoring:prometheus
## 部署 Prometheus
kubectl create -f prometheus-monitoring.yaml
访问 kubernetes 任何一个 node 上的 Grafana service 的 nodeport:
图片 - Grafana页面
该图中的数据显示明显有问题,还需要修正。
prometheus-monitoring.yaml
文件中有一个 Job 就是用来导入 grafana dashboard 配置信息的,如果该 Job 执行失败,可以单独在在 monitoring
的 namespace 中启动一个容器,将 manifests/prometheus
目录下的 json 文件复制到容器中,然后进入容器 json 文件的目录下执行:
for file in *-datasource.json ; do if [ -e "$file" ] ; then echo "importing $file" &&curl --silent --fail --show-error \--request POST http://admin:admin@grafana:3000/api/datasources \--header "Content-Type: application/json" \--data-binary "@$file" ;echo "" ;fi done ;for file in *-dashboard.json ; do if [ -e "$file" ] ; then echo "importing $file" &&( echo '{"dashboard":'; \cat "$file"; \echo ',"overwrite":true,"inputs":[{"name":"DS_PROMETHEUS","type":"datasource","pluginId":"prometheus","value":"prometheus"}]}' ) \| jq -c '.' \| curl --silent --fail --show-error \--request POST http://admin:admin@grafana:3000/api/dashboards/import \--header "Content-Type: application/json" \--data-binary "@-" ;echo "" ;fi done
这样也可以向 grafana 中导入 dashboard。
存在的问题
该项目的代码中存在几个问题。
1. RBAC 角色授权问题
需要用到两个 clusterrolebinding:
kube-state-metrics
,对应的serviceaccount
是kube-state-metrics
prometheus
,对应的serviceaccount
是prometheus-k8s
在部署 Prometheus 之前应该先创建 serviceaccount、clusterrole、clusterrolebinding 等对象,否则在安装过程中可能因为权限问题而导致各种错误,所以这些配置应该写在一个单独的文件中,而不应该跟其他部署写在一起,即使要写在一个文件中,也应该写在文件的最前面,因为使用 kubectl
部署的时候,kubectl 不会判断 YAML 文件中的资源依赖关系,只是简单的从头部开始执行部署,因此写在文件前面的对象会先部署。
解决方法
也可以绕过复杂的 RBAC 设置,直接使用下面的命令将对应的 serviceaccount 设置成 admin 权限,如下:
kubectl create clusterrolebinding kube-state-metrics --clusterrole=cluster-admin --serviceaccount=monitoring:kube-state-metrics
kubectl create clusterrolebinding prometheus --clusterrole=cluster-admin --serviceaccount=monitoring:prometheus
参考 RBAC——基于角色的访问控制
2. API 兼容问题
从 kube-state-metrics
日志中可以看出用户 kube-state-metrics 没有权限访问如下资源类型:
- *v1.Job
- *v1.PersistentVolumeClaim
- *v1beta1.StatefulSet
- *v2alpha1.CronJob
而在我们使用的 kubernetes 1.6.0 版本的集群中 API 路径跟 kube-state-metrics
中不同,无法 list 以上三种资源对象的资源。详情见:https://github.com/giantswarm/kubernetes-prometheus/issues/77
3. Job 中的权限认证问题
在 grafana-import-dashboards
这个 job 中有个 init-containers
其中指定的 command 执行错误,应该使用
curl -sX GET -H "Authorization:bearer `cat /var/run/secrets/kubernetes.io/serviceaccount/token`" -k https://kubernetes.default/api/v1/namespaces/monitoring/endpoints/grafana
不需要指定 csr 文件,只需要 token 即可。
参考 wait-for-endpoints init-containers fails to load with k8s 1.6.0 #56
本文转自开源中国-使用Prometheus监控kubernetes集群
使用Prometheus监控kubernetes集群相关推荐
- Prometheus-使用Prometheus监控Kubernetes集群
Prometheus是一个集数据收集存储.数据查询和数据图表显示于一身的开源监控组件.本文主要讲解如何搭建Prometheus,并使用它监控Kubernetes集群. 准备工作 Kubernete ...
- 巧用 Prometheus 监控 Kubernetes 集群所有组件的证书
KubeSphere 虽然提供了运维友好的向导式操作界面,简化了 Kubernetes 的运维操作,但它还是建立在底层 Kubernetes 之上的,Kubernetes 默认的证书有效期都是一年,即 ...
- k8s学习(二十四) 使用prometheus监控kubernetes集群应用
1.修改部署traefik时的traefik.toml 添加 [metrics][metrics.prometheus]entryPoint = "traefik"buckets ...
- 三种监控 Kubernetes 集群证书过期方案
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 Kubernetes 中大量用到了证书, 比如 ca证书.以及 kubelet.apiserver.prox ...
- Prometheus监控Kafka集群
prometheus监控kafka常见的有两种开源方案,一种是传统的部署exporter的方式,一种是通过jmx配置监控,本文将采用第二种方式进行配置. 项目地址: kafka_exporter:ht ...
- Prometheus监控kubernetes
Prometheus监控 kubernetes 咱们的目标通过Prometheus监控Kubernetes集群. 1.使用ConfigMaps管理Prometheus的配置文件 创建prometheu ...
- 在Kubernetes集群上部署和管理JFrog Artifactory
JFrog Artifactory是一个artifacts仓库管理平台,它支持所有的主流打包格式.构建工具和持续集成(CI)服务器.它将所有二进制内容保存在一个单一位置并提供一个接口,这使得用户在整个 ...
- 骚操作,这款工具可以把Kubernetes集群打包成一个镜像
sealer[ˈsiːlər]是一款分布式应用打包交付运行的解决方案,通过把分布式应用及其数据库中间件等依赖一起打包以解决复杂应用的交付问题. sealer 构建出来的产物我们称之为集群镜像, 集群镜 ...
- 查看grafana版本_使用 Prometheus 与 Grafana 为 Kubernetes 集群建立监控与警报机制
作者 | Gregoire DAYET 策划 | 田晓旭 IT 团队已经明确意识到对基础设施进行监控的必要性.目前市面上存在着大量适用于传统基础设施且历史悠久的解决方案:Nagios.Zabbix 等 ...
最新文章
- Django的第二次尝试
- php统计键出现的次数,php统计数组元素出现的次数
- gitee传入公钥以后每次push依然需要输入密码
- 【渝粤教育】电大中专电商运营实操 答案作业 题库
- 20172303 2017-2018-2 《程序设计与数据结构》实验五报告
- Codeforces 486D Valid Sets (树型DP)
- 移动通信原理学习笔记之二—— 移动通信中的调制解调技术
- inter uhd graphics630显卡驱动_极为全面的!从零开始的!小白都能看懂的!硬件科普#4 显卡选择篇...
- 深圳中科智美3D精确数据化整形软件系统三维扫描模块
- 女生转行学习IT技术需要考虑什么
- Java小题精炼训练营(篇十三)
- 2021-2027中国高效空气过滤器市场现状及未来发展趋势
- 学习挖掘机和程序员哪个好
- 浅墨博客 六 笔记
- 图像处理------Mean Shift滤波(边缘保留的低通滤波)
- cuda性能分析工具
- Error occurred while trying to proxy request项目突然起不来了
- 手撸一款属于自己的Maven插件,说干就干
- mysql 时间段分组,MySQL 按时间单位进行分组
- CAD无法拖动工具栏或菜单解决方法
热门文章
- html5中不再支持的元素
- 【Linux开发】【Qt开发】Qt界面键盘、触摸屏、鼠标的响应设置
- Hadoop介绍及最新稳定版Hadoop 2.4.1下载地址及单节点安装
- 怎么将电脑中的声音录制成WAV格式
- docker入门实践之数据卷管理
- 《HTML5游戏编程核心技术与实战》一2.3 图像API
- 一些系统事件的手动触发方法
- 出现错误ActivityManager: Warning: Activity not started
- MySQL查询数据表中数据记录(包括多表查询)
- shared_ptr使用场景、陷阱、性能分析,使用建议