Kubernetes 集群上安装 Grafana 和 Prometheus
Kubernetes 是一种强大的容器编排系统,它使您能够轻松地部署、管理和扩展容器化应用程序。在监控和可视化方面,Grafana 和 Prometheus 是两个非常有用的工具。本文将引导读者朋友们在 Kubernetes 集群上安装和配置 Grafana 和 Prometheus。
前言
当在Kubernetes集群上安装Grafana和Prometheus之前,让我们首先了解一下这两个工具的基本概念和功能。
Grafana
主要作用是帮助用户将监控数据可视化,从而更容易理解应用程序和系统的性能、健康状况以及趋势。它提供了一个用户友好的界面,可以让用户创建漂亮和有用的监控仪表板,用于监视和分析数据。当与Prometheus等数据源集成时,Grafana可以展示Prometheus采集到的数据。
Prometheus
一个开源的监控和警报工具,最初由SoundCloud开发并开源。其工作原理是定期从各种目标(如应用程序、容器、操作系统、数据库等)中抓取指标数据,存储在本地数据库中,并提供查询和警报功能。这种方式使得Prometheus适合于云原生环境和容器化应用程序的监控。
准备Kubernetes集群
若没有Kubernetes集群可用,请先参阅《使用 k3s 快速部署 kubernetes 集群》部署集群。推荐使用腾讯云轻量服务器·K3s镜像,开箱即用,无需手动部署集群。
创建kubernetes部署配置文件
1、将下面的代码保存为grafpro.yaml
,可根据实际情况修改部分配置,或使用后文的脚本自动修改。
kind: Deployment
apiVersion: apps/v1
metadata:
name: &name grafpro
labels:
app: *name
spec:
selector:
matchLabels:
app: *name
template:
metadata:
labels:
app: *name
spec:
initContainers:
- name: busybox
image: busybox
command:
- sh
- -c
- |
if [ ! -f /etc/prometheus/prometheus.yml ]; then
cat <<EOF >/etc/prometheus/prometheus.yml
global:
scrape_timeout: 25s
scrape_interval: 1m
evaluation_interval: 1m
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- 127.0.0.1:9090
EOF
fi
volumeMounts:
- name: *name
subPath: etc
mountPath: /etc/prometheus
containers:
- name: grafana
image: grafana/grafana
securityContext:
runAsUser: 0
ports:
- containerPort: 3000
volumeMounts:
- name: *name
subPath: grafana
mountPath: /var/lib/grafana
- name: prometheus
image: prom/prometheus
securityContext:
runAsUser: 0
ports:
- containerPort: 9090
volumeMounts:
- name: *name
subPath: etc
mountPath: /etc/prometheus
- name: *name
subPath: prometheus
mountPath: /prometheus
volumes:
- name: *name
hostPath:
path: /srv/grafpro
type: DirectoryOrCreate
---
kind: Service
apiVersion: v1
metadata:
name: &name grafpro
labels:
app: *name
spec:
selector:
app: *name
ports:
- name: grafana
port: 3000
targetPort: 3000
- name: prometheus
port: 9090
targetPort: 9090
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: &name grafpro
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
spec:
rules:
- host: grafana.example.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: *name
port:
name: grafana
- host: prometheus.example.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: *name
port:
name: prometheus
tls:
- secretName: default
2、将下面的代码保存为grafpro.sh
,文件的换行符必须为LF
,否则无法执行。请注意修改GRAFPRO_STORAGE
、GRAFPRO_DOMAIN
和PROMETHEUS_DOMAIN
变量的值。
# 配置存储路径
export GRAFPRO_STORAGE=${GRAFPRO_STORAGE:-"/srv/grafpro"}
# 配置访问域名
export GRAFANA_DOMAIN=${GRAFPRO_DOMAIN:-"grafana.example.org"}
export PROMETHEUS_DOMAIN=${PROMETHEUS_DOMAIN:-"prometheus.example.org"}
# 修改参数并部署服务
cat grafpro.yaml \
| sed "s#/srv/grafpro#$GRAFPRO_STORAGE#g" \
| sed "s#grafana.example.org#$GRAFANA_DOMAIN#g" \
| sed "s#prometheus.example.org#$PROMETHEUS_DOMAIN#g" \
| kubectl apply -f -
部署 Grafana 和 Prometheus
将grafpro.yaml
和grafpro.sh
文件上传到k8s主服务器上的同一目录内。通过ssh登录服务器,执行以下命令完成部署。
chmod +x grafpro.sh
./grafpro.sh
测试和验证
Grafana
1、浏览器打开http://grafana.example.org
,使用用户名admin
和密码admin
登录,此时会提示修改一个新的密码,修改后将自动转入控制台页面。
2、浏览器打开http://grafana.example.org/connections/datasources/edit/bc3e3d0a-090a-469f-8c25-f93818410784
,在Prometheus server URL
输入框内填入http://127.0.0.1:9090
,点击Save & Test
后保存。
3、浏览器打开http://grafana.example.org/connections/datasources/edit/bc3e3d0a-090a-469f-8c25-f93818410784/dashboards
,导入Prometheus 2.0 Stats
仪表盘。
Prometheus
浏览器打开http://prometheus.example.org
,无需登录即可使用查询面板。生产环境建议至少添加Basic Auth
认证,防止数据泄露。
写在最后
本文介绍了如何安装Grafana和Prometheus,并未添加数据采集器(exporter),我将分为不同的章节为大家一一介绍常用的数据采集器。请大家收藏若海の技术写真,关注后续的章节。