Kubernetes 部署图表工具 Grafana

Kubernetes 部署图表工具 Grafana

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • Grafana 版本: 7.4.3
  • 操作系统: CentOS 7.9
  • Docker 版本: 19.03.13
  • Kubernetes 版本: 1.20.2

参考地址:

示例地址:


系列文章目录

一、什么是 Grafana

Grafana 是一个开源的度量分析与可视化工具。该工具提供查询、可视化、报警和指标展示等功能,能灵活创建图表、仪表盘等可视化界面。

其支持的主要提供的功能是:

可视化: 提供多种可选择的不同类型的图形,能够灵活绘制不同样式,且还提供很多插件,可以很方便的对数据指标和日志进行可视化操作。 • 动态仪表盘: 提供以模板和变量的方式来创建动态且可重复使用的仪表盘,这些模板变量显示在仪表盘顶部,可以灵活调整。 • 浏览指标: 通过瞬时查询和动态变化等方式展示数据,可以根据不同的时间范围拆分视图。 • 浏览日志: 体验使用保留的标签过滤器从指标切换到日志的魔力,可以快速搜索所有日志或实时流式传输的数据。 • 警报: 可以直观地根据重要的指标定义警报规则。Grafana 将不断评估并向 Slack,PagerDuty,VictorOps,OpsGenie 等系统发送通知。 • 混合数据源: 在同一图中混合不同的数据源,可以基于每个查询指定不同数据源。

二、Kubernetes 部署 Grafana 存储

部署 Grafana 之前,我们需要提前准备用于存储 Grafana 数据的 PVPVC 资源,这里创建 PVPVC 资源文件 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 参数。

接下来将存储相关 PVPVC 文件部署到 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:            ## 容器挂载配