
Kubernetes 部署图表工具 Grafana
文章目录
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。
系统环境:
- Grafana 版本: 7.4.3
- 操作系统: CentOS 7.9
- Docker 版本: 19.03.13
- Kubernetes 版本: 1.20.2
参考地址:
示例地址:
系列文章目录
- 01. Kubernetes 部署监控工具 Prometheus
- 02. Kubernetes 部署图表工具 Grafana
- 03. Prometheus 结合 Node Exporter 监控 Kubernetes 集群节点
- 04. Prometheus 结合 StateMetrics+cAdvisor 监控 Kubernetes 集群服务
- 05. Prometheus 监听指定标签 Kubernetes 服务
- 06. Prometheus 监控 Kubernetes ETCD 集群
- 07. Prometheus Exporter 黑盒监控 Kubernetes 服务
- 08. Kubernetes 部署告警工具 AlertManager
- 09. AlertManager 配置邮箱告警
- 其它章节整理中...
一、什么是 Grafana
Grafana 是一个开源的度量分析与可视化工具。该工具提供查询、可视化、报警和指标展示等功能,能灵活创建图表、仪表盘等可视化界面。
其支持的主要提供的功能是:
• 可视化: 提供多种可选择的不同类型的图形,能够灵活绘制不同样式,且还提供很多插件,可以很方便的对数据指标和日志进行可视化操作。 • 动态仪表盘: 提供以模板和变量的方式来创建动态且可重复使用的仪表盘,这些模板变量显示在仪表盘顶部,可以灵活调整。 • 浏览指标: 通过瞬时查询和动态变化等方式展示数据,可以根据不同的时间范围拆分视图。 • 浏览日志: 体验使用保留的标签过滤器从指标切换到日志的魔力,可以快速搜索所有日志或实时流式传输的数据。 • 警报: 可以直观地根据重要的指标定义警报规则。Grafana 将不断评估并向 Slack,PagerDuty,VictorOps,OpsGenie 等系统发送通知。 • 混合数据源: 在同一图中混合不同的数据源,可以基于每个查询指定不同数据源。

二、Kubernetes 部署 Grafana 存储
部署 Grafana 之前,我们需要提前准备用于存储 Grafana
数据的 PV
、PVC
资源,这里创建 PV
、PVC
资源文件 grafana-storage.yaml
,内容如下:
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: grafana
5 labels:
6 k8s-app: grafana
7spec:
8 capacity:
9 storage: 5Gi
10 accessModes:
11 - ReadWriteOnce
12 persistentVolumeReclaimPolicy: Retain
13 storageClassName: grafana
14 mountOptions:
15 - hard
16 - nfsvers=4.1
17 nfs:
18 path: /nfs/grafana ## NFS 服务器目录
19 server: 192.168.2.31 ## NFS 服务器地址
20---
21kind: PersistentVolumeClaim
22apiVersion: v1
23metadata:
24 name: grafana
25 labels:
26 k8s-app: grafana
27spec:
28 accessModes:
29 - ReadWriteOnce
30 storageClassName: grafana
31 resources:
32 requests:
33 storage: 5Gi
34 selector:
35 matchLabels:
36 k8s-app: grafana
这里使用的是
NFS
方式的PV
,需要存在NFS Server
端才行,如果使用其它存储,请自行按照对应的存储方式进行配置PV
参数。
接下来将存储相关 PV
、PVC
文件部署到 Kubernetes
集群中:
- -f: 指定要部署的资源文件。
- -n: 指定 Namespace 名称。
1$ kubectl apply -f grafana-storage.yaml -n kube-system
三、Kubernetes 部署 Grafana
接下来创建 Grafana 部署到 Kubernetes 的资源文件 grafana-deploy.yaml
,内容如下:
1apiVersion: v1
2kind: Service
3metadata:
4 name: grafana
5 labels:
6 k8s-app: grafana
7spec:
8 type: NodePort
9 ports:
10 - name: http
11 port: 3000
12 targetPort: 3000
13 nodePort: 30300
14 selector:
15 k8s-app: grafana
16---
17apiVersion: apps/v1
18kind: Deployment
19metadata:
20 name: grafana
21 labels:
22 k8s-app: grafana
23spec:
24 selector:
25 matchLabels:
26 k8s-app: grafana
27 template:
28 metadata:
29 labels:
30 k8s-app: grafana
31 spec:
32 initContainers: ## 初始化容器,用于修改挂载的存储的文件夹归属组与归属用户
33 - name: init-file
34 image: busybox:1.28
35 imagePullPolicy: IfNotPresent
36 securityContext:
37 runAsUser: 0
38 command: ['chown', '-R', "472:0", "/var/lib/grafana"]
39 volumeMounts:
40 - name: data
41 mountPath: /var/lib/grafana
42 subPath: grafana
43 containers:
44 - name: grafana ## Grafana 容器
45 image: grafana/grafana:7.4.3
46 securityContext: ## 容器安全策略,设置运行容器使用的归属组与用户
47 fsGroup: 0
48 runAsUser: 472
49 ports:
50 - name: http
51 containerPort: 3000
52 env: ## 配置环境变量,设置 Grafana 的默认管理员用户名/密码
53 - name: GF_SECURITY_ADMIN_USER
54 value: "admin"
55 - name: GF_SECURITY_ADMIN_PASSWORD
56 value: "admin"
57 resources:
58 limits:
59 cpu: '2'
60 memory: 1Gi
61 requests:
62 cpu: 1
63 memory: 512Mi
64 readinessProbe: ## 就绪探针
65 failureThreshold: 10
66 httpGet:
67 path: /api/health
68 port: 3000
69 scheme: HTTP
70 initialDelaySeconds: 10
71 periodSeconds: 10
72 successThreshold: 1
73 timeoutSeconds: 30
74 livenessProbe: ## 存活探针
75 failureThreshold: 10
76 httpGet:
77 path: /api/health
78 port: 3000
79 scheme: HTTP
80 initialDelaySeconds: 10
81 periodSeconds: 10
82 successThreshold: 1
83 timeoutSeconds: 1
84 volumeMounts: ## 容器挂载配