Skip to content

Grafana on Kubernetes 部署

使用 Bitnami Helm Chart 在 Kubernetes 上部署 Grafana,含持久化設定、NodePort 暴露與匿名登入的 grafana.ini 自訂。

概述

Grafana 是監控體系中的視覺化前端,連接 Prometheus 資料來源,以 Dashboard 呈現時序指標、設定告警規則。在 Kubernetes 上透過 Bitnami Helm Chart(OCI Registry 版本)部署,以持久化 Volume 保存 Dashboard 設定與資料來源。

Bitnami 的 Grafana Chart 提供兩種設定擴充方式:(1)透過 --set 參數在 Helm 安裝時直接指定;(2)透過 grafana.ini ConfigMap 進行細粒度設定,適合需要啟用匿名登入、自訂 root_url、關閉遙測等進階需求。

核心內容

grafana.ini 自訂設定

當需要超出 Helm Chart --set 所能控制的設定時,可透過 ConfigMap 掛載 grafana.ini

bash
--set config.useGrafanaIniFile="true" \
--set config.grafanaIniConfigMap="grafana-custom-config"

常用的設定區塊:

  • [auth.anonymous]:啟用匿名登入,適合內部共享儀表板(設定 org_role = Viewer
  • [server]:設定 root_url 確保連結跳轉正確(尤其在 NodePort 或 subpath 部署時)
  • [analytics]:關閉使用報告與更新檢查

Dashboard 管理

Grafana 官方 Dashboard 市集提供豐富的現成範本,輸入 Dashboard ID 即可一鍵匯入,常用範本:

  • Redis:#763
  • PostgreSQL:#9628
  • RabbitMQ:搜尋 "RabbitMQ Overview"
  • Node Exporter:#1860

連線 Prometheus 資料來源

部署後需在 Grafana UI 中設定 Prometheus 資料來源,叢集內部 URL 格式:

http://prometheus-server.monitoring.svc.cluster.local:80

關鍵要點

  • Bitnami Chart 以 OCI Registry 格式分發(oci://registry-1.docker.io/bitnamicharts/grafana
  • 需持久化 Volume(persistence.enabled=true)才能保留 Dashboard 和資料來源設定
  • 自訂 root_url 在 NodePort 或 Ingress subpath 部署時很重要,確保連結導向正確
  • hide_version = true 可隱藏 Grafana 版本號(安全最佳實踐)
  • 升級時建議透過 image.registry / image.repository / image.tag 明確釘定版本(如 bitnamilegacy/grafana:12.1.1),避免自動拉取未驗證的新版
  • 正式環境應設定 Resource Limits(grafana.resources.limits.*),避免 Grafana 異常時耗盡節點資源
  • helm upgrade 的認證參數名稱為 auth.username / auth.password(早期版本 Chart 用 admin.user / admin.password),兩者不相容,升級時請確認 Chart 版本對應的參數名

實際應用

Grafana 作為 Prometheus 的視覺化前端,在 NodePort 30900 上提供 Web 介面。搭配匿名登入設定,內部使用者無需帳號即可查看監控 Dashboard,適合公司內部監控看板。實際監控各服務的 Dashboard 可從 Grafana 市集匯入對應的 Exporter Dashboard,如 Redis ExporterPostgres ExporterRabbitMQ Exporter 等。

部署設定參考

以下為實際部署時使用的完整設定,供日後查詢與複製使用。

環境參數

項目
Namespacemonitoring
StorageClassnfs-client
PVC 大小20Gi
管理員帳號admin
管理員密碼Bed200@2023
Service 類型NodePort
NodePort30900
root_urlhttp://10.248.36.248:30900/
Image Registrydocker.io
Image Repositorybitnamilegacy/grafana
Image Tag12.1.1
CPU Limit / Request1 / 250m
Memory Limit / Request1024Mi / 256Mi

安裝指令

bash
helm install grafana \
  --namespace monitoring \
  --set persistence.enabled="true" \
  --set persistence.storageClass="nfs-client" \
  --set persistence.accessMode="ReadWriteOnce" \
  --set persistence.size="20Gi" \
  --set admin.user="admin" \
  --set admin.password="Bed200@2023" \
  --set service.type="NodePort" \
  --set service.nodePorts.grafana="30900" \
  oci://registry-1.docker.io/bitnamicharts/grafana

升級指令(版本更新 / 2025-10-09)

用於已存在的 Release 版本升級,新增指定 Image、Resource Limits,並加上 --wait。 注意:此版本 Chart 的認證參數改為 auth.username / auth.password, NodePort 參數改為 service.nodePorts.http

bash
helm upgrade grafana oci://registry-1.docker.io/bitnamicharts/grafana \
  --namespace monitoring \
  --set persistence.enabled=true \
  --set persistence.storageClass="nfs-client" \
  --set persistence.accessMode="ReadWriteOnce" \
  --set persistence.size="20Gi" \
  --set auth.username="admin" \
  --set auth.password="Bed200@2023" \
  --set service.type="NodePort" \
  --set service.nodePorts.http=30900 \
  --set image.registry="docker.io" \
  --set image.repository="bitnamilegacy/grafana" \
  --set image.tag=12.1.1 \
  --set grafana.resources.limits.cpu=1 \
  --set grafana.resources.limits.memory=1024Mi \
  --set grafana.resources.requests.cpu=250m \
  --set grafana.resources.requests.memory=256Mi \
  --set config.useGrafanaIniFile="true" \
  --set config.grafanaIniConfigMap="grafana-custom-config" \
  --wait

與初始安裝指令的差異對照:

項目初始安裝升級版本
認證帳號參數admin.userauth.username
認證密碼參數admin.passwordauth.password
NodePort 參數service.nodePorts.grafanaservice.nodePorts.http
Image 版本未指定(Chart 預設)bitnamilegacy/grafana:12.1.1
Resource Limits未設定CPU 1 / Memory 1024Mi
--wait

grafana.ini ConfigMap(匿名登入設定)

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-custom-config
  namespace: monitoring
data:
  grafana.ini: |-
    [auth.anonymous]
    enabled = true
    org_name = Main Org.
    org_role = Viewer
    hide_version = true

    [server]
    root_url = http://10.248.36.248:30900/

    [analytics]
    reporting_enabled = false
    check_for_updates = false

啟用 grafana.ini 自訂設定:

bash
# 在 helm install 指令中加入以下參數
--set config.useGrafanaIniFile="true" \
--set config.grafanaIniConfigMap="grafana-custom-config"

相關概念

來源