系统环境

  • Kubernetes 版本: 1.20.0
  • Grafana 版本: 7.4.3
  • Docker 版本: 19.03.13
  • 操作系统: CentOS 7.6

Grafana简介

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

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

k8s-grafana-1

k8s部署grafana

部署Grafana存储

本文采用nfs动态生成pvc存储

[root@k8s01 grafana]# vim grafana-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc
  namespace: monitoring
  labels:
    app: grafana
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: managed-nfs-storage
  
[root@k8s01 grafana]# kubectl apply -f grafana-pvc.yaml 
persistentvolumeclaim/grafana-pvc created

部署grafana

创建Grafana部署到Kubernetes的资源文件grafana-deploy.yaml

[root@k8s01 grafana]# vim grafana-deploy.yaml 
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
  labels:
    k8s-app: grafana
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: 3000
    nodePort: 30088
  selector:
    k8s-app: grafana
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitoring
  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             
        image: grafana/grafana:7.4.3
        imagePullPolicy: IfNotPresent
        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     #指定使用的 PVC
[root@k8s01 grafana]# kubectl apply -f grafana-deploy.yaml 
service/grafana created
deployment.apps/grafana created                    

上面设置了 初始化容器,该容器作用就是在 Pod 初始化时候,将挂载的目录的归属组设置为 Grafana 镜像中配置的 用户组 ID,将目录归属的用户设置为 ROOT 用户,除了配置初始化容器外,我们也在 grafana 容器中指定了 GF_SECURITY_ADMIN_USER 和 GF_SECURITY_ADMIN_PASSWORD 两个环境变量,这俩个环境变量分别用于配置初始化的 Grafana 的默认的 用户名/密码 分别为 admin/admin,等到后面登录到 Grafana 界面后就可以将该密码修改掉

Grafana安装插件

进入 Grafana Pod 容器内,通过镜像自带的 grafana-cli 工具进行插件的安装,本文以安装饼图插件为例

[root@k8s01 monitoring]# kubectl get -n monitoring po |grep grafana
grafana-58ffb4db5d-c4wlz   1/1     Running   0          3m
[root@k8s01 monitoring]# kubectl exec -it -n monitoring grafana-58ffb4db5d-c4wlz bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-5.0$ grafana-cli plugins install grafana-piechart-panel
installing grafana-piechart-panel @ 1.6.2
from: https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.6.2/download
into: /var/lib/grafana/plugins

✔ Installed grafana-piechart-panel successfully 

Restart grafana after installing plugins . <service grafana-server restart>

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

[root@k8s01 monitoring]# kubectl delete -n monitoring po grafana-58ffb4db5d-c4wlz 
pod "grafana-58ffb4db5d-c4wlz" deleted

访问Grafana

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

k8s-grafana-3

文章作者: 鲜花的主人
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱吃可爱多
监控服务 Kubernetes Kubernetes 监控服务
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝