Loading
Loading...

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,内容如下:

apiVersion: v1
kind: PersistentVolume
metadata:
name: grafana
labels:
k8s-app: grafana
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: grafana
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /nfs/grafana ## NFS 服务器目录
server: 192.168.2.31 ## NFS 服务器地址
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: grafana
labels:
k8s-app: grafana
spec:
accessModes:
- ReadWriteOnce
storageClassName: grafana
resources:
requests:
storage: 5Gi
selector:
matchLabels:
k8s-app: grafana

这里使用的是 NFS 方式的 PV,需要存在 NFS Server 端才行,如果使用其它存储,请自行按照对应的存储方式进行配置 PV 参数。

接下来将存储相关 PVPVC 文件部署到 Kubernetes 集群中:

  • -f: 指定要部署的资源文件。
  • -n: 指定 Namespace 名称。
Terminal window
$ kubectl apply -f grafana-storage.yaml -n kube-system

三、Kubernetes 部署 Grafana

接下来创建 Grafana 部署到 Kubernetes 的资源文件 grafana-deploy.yaml,内容如下:

apiVersion: v1
kind: Service
metadata:
name: grafana
labels:
k8s-app: grafana
spec:
type: NodePort
ports:
- name: http
port: 3000
targetPort: 3000
nodePort: 30300
selector:
k8s-app: grafana
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
labels:
k8s-app: grafana
spec:
selector:
matchLabels:
k8s-app: grafana
template:
metadata:
labels:
k8s-app: grafana
spec:
initContainers: ## 初始化容器,用于修改挂载的存储的文件夹归属组与归属用户
- name: init-file
image: busybox:1.28
imagePullPolicy: IfNotPresent
securityContext:
runAsUser: 0
command: ['chown', '-R', "472:0", "/var/lib/grafana"]
volumeMounts:
- name: data
mountPath: /var/lib/grafana
subPath: grafana
containers:
- name: grafana ## Grafana 容器
image: grafana/grafana:7.4.3
securityContext: ## 容器安全策略,设置运行容器使用的归属组与用户
fsGroup: 0
runAsUser: 472
ports:
- name: http
containerPort: 3000
env: ## 配置环境变量,设置 Grafana 的默认管理员用户名/密码
- name: GF_SECURITY_ADMIN_USER
value: "admin"
- name: GF_SECURITY_ADMIN_PASSWORD
value: "admin"
resources:
limits:
cpu: '2'
memory: 1Gi
requests:
cpu: 1
memory: 512Mi
readinessProbe: ## 就绪探针
failureThreshold: 10
httpGet:
path: /api/health
port: 3000
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 30
livenessProbe: ## 存活探针
failureThreshold: 10
httpGet:
path: /api/health
port: 3000
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
volumeMounts: ## 容器挂载配置
- name: data
mountPath: /var/lib/grafana
subPath: grafana
volumes: ## 共享存储挂载配置
- name: data
persistentVolumeClaim:
claimName: grafana ## 指定使用的 PVC

上面设置了 初始化容器,该容器作用就是在 Pod 初始化时候,将挂载的目录的归属组设置为 Grafana 镜像中配置的 用户组 ID,将目录归属的用户设置为 ROOT 用户

除了配置初始化容器外,我们也在 grafana 容器中指定了 GF_SECURITY_ADMIN_USERGF_SECURITY_ADMIN_PASSWORD 两个环境变量,这俩个环境变量分别用于配置初始化的 Grafana 的默认的 用户名/密码 分别为 admin/admin,等到后面登录到 Grafana 界面后我们就可以将该密码修改掉。

有了 Grafana 部署的资源文件,我们就可以将其部署到 Kubernetes 中,执行命令如下:

  • -f: 指定要部署的资源文件。
  • -n: 指定 Namespace 名称。
Terminal window
$ kubectl apply -f grafana-deploy.yaml -n kube-system

四、Grafana 安装并载入插件

等执行完 kubectl 命令将 Grafana 部署到 Kubernetes 集群后,我们首先要做的就是先给这个初始化的 Grafana 应用安装一些插件。默认情况下我们可以选择他通过 Grafana 界面中的插件界面里的按钮来安装插件,不过很多时候在界面里点击按钮执行安装都会提醒安装失败。所以,在这里我们可以选择进入 Grafana Pod 容器内,通过镜像自带的 grafana-cli 工具进行插件的安装。

首先获取部署的 GrafanaPod 的名称,执行的命令如下:

Terminal window
$ kubectl get pods -A | grep -e "grafana"
kube-system grafana-7cc5f9cc5c-65rlm 1/1 Running 0 2m41s

可以看到 Grafana 名称为 grafana-7cc5f9cc5c-65rlm,并且 Podkube-system 命名空间。

这里我们直接对该 Grafana Podgrafana 容器发送 grafana-cli plugins install 命令安装 饼图 插件,命令如下:

  • -c: 执行 Pod 中的一个容器。
  • -n: 指定命名空间。
  • —: 可以在 — 后面,添加要执行命令。
Terminal window
$ kubectl exec -it grafana-7cc5f9cc5c-65rlm \
-c grafana \
-n kube-system \
-- grafana-cli plugins install grafana-piechart-panel

如果命令执行成功,我们应该可以看到下面日志信息:

Terminal window
installing grafana-piechart-panel @ 1.6.1
from: https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.6.1/download
into: /var/lib/grafana/plugins
Installed grafana-piechart-panel successfully
Restart grafana after installing plugins . <service grafana-server restart>

虽然插件已经安装成功,不过在默认情况下 Grafana 并不会自动热加载插件,必须将应用重启后才能够重新加载插件,所以我们让 Pod 进行重启。

Kubernetes 中,可以通过 kubectlscale 命令控制 Deployment 资源缩成 0 个副本,然后再扩展成 1 个副本,这样 Pod 会被先删除,再进行重启,执行的命令如下:

Terminal window
## 缩放副本到 0 使 Grafana Pod 关闭
$ kubectl scale deployment grafana --replicas=0 -n kube-system
## 扩展副本到 1 使 Grafana Pod 启动
$ kubectl scale deployment grafana --replicas=1 -n kube-system

五、进入 Grafana Dashboard 界面

Grafana 已经部署完成,接下来我们尝试进入 Grafana 界面,输入默认的用户名和密码 (上面部署资源文件环境变量中已经配置了默认用户名/密码为 admin/admin) 进入 Grafana 界面中:

Grafana 登录界面

登录成功后,会提醒我们修改密码,这时候选择跳过即可,最后我们会进入到 Grafana 主界面,其样式如下图:

Grafana 主界面

然后我们可以尝试使用 Grafana,探索其都有哪些功能,后续本人在介绍 Prometheus 监控 Kubernetes 集群时,也会使用 Grafana 作为监控数据的图表的展示。

---END---
如果本文对你有帮助,可以关注我的公众号 "小豆丁技术栈" 了解最新动态,顺便也请帮忙 Github 点颗星哦,感谢~

本文作者:超级小豆丁 @ 小豆丁技术栈

本文链接:http://www.mydlq.club/article/111/

本文标题:Kubernetes 部署图表工具 Grafana

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!