1. 文档目的

本文档旨在指导如何在 Kubernetes 集群上,通过 Helm 包管理器,部署由 Grafana Loki 和 Promtail 组成的日志聚合解决方案。此方案用于集中收集、存储和可视化集群内 Pod 的日志。

2. 环境准备

  • 操作系统: Windows (用于执行 Helm 命令的宿主机) / Linux (Kubernetes Master 节点)

  • 软件:

    • kubectl: 已配置好 kubeconfig,能正常访问 K8s 集群。

    • helm: v3.x 版本。

  • K8s 集群: 一个运行正常的 Kubernetes 集群(如由 kubeadm 搭建)。

  • 存储: 集群中需要有可用的 StorageClass(如 local-path, nfs-client等),以便为 Loki 和 Grafana 提供持久化存储。


3. 部署步骤

步骤一:在 Windows 宿主机上添加 Helm 仓库并拉取 Chart

此步骤在你的 Windows 电脑上执行,目的是从互联网下载所需的 Helm Chart 包。

# 添加 Grafana 官方的 Helm 软件源。
# 这相当于告诉 Helm 去哪里找 Loki Stack 的安装包。
.\helm.exe repo add grafana https://grafana.github.io/helm-charts
​
# 更新本地 Helm 仓库的索引。
# 这会从远程源获取最新的软件包列表和版本信息,确保我们下载的是最新版。
.\helm.exe repo update
​
# 拉取 (下载) loki-stack Chart 到当前目录。
# 这会下载一个 .tgz 格式的压缩包,里面包含了部署 Loki, Grafana, Promtail 所需的所有 Kubernetes YAML 模板和默认配置。
.\helm.exe pull grafana/loki-stack
​
# 查看当前目录下是否已成功下载 loki-stack 的压缩包。
# 如果成功,你会看到类似 loki-stack-2.9.10.tgz 的文件。
dir loki-stack*.tgz
步骤二:传输文件到 Kubernetes Master 节点

将下载好的 loki-stack-*.tgz压缩包,以及我们将要创建的 values.yaml配置文件,通过 scp或其他文件传输工具,拷贝到你的 K8s Master 节点上的一个目录中,例如 /opt/loki/

# 在 Windows 上使用 scp 命令示例 (需要在 PowerShell 或 WSL 中执行)
# scp .\loki-stack-2.9.10.tgz root@10.0.0.11:/opt/loki/
步骤三:在 Master 节点上解压并配置 values.yaml

此步骤在 K8s Master 节点 上执行。我们将自定义配置写入 values.yaml文件,覆盖 Chart 的默认值。

# 1. 登录到 Master 节点,进入存放文件的目录
ssh root@10.0.0.11
cd /opt/loki/
​
# 2. 解压刚才拷贝过来的 Helm Chart 包
tar -zxvf loki-stack-*.tgz
​
# 3. 创建并编辑自定义的 values.yaml 配置文件
# 这个文件将用来定制我们的 Loki Stack 部署。
cat > loki-stack/values.yaml << 'EOF'
# my-values.yaml
# 这是一个自定义的 Helm Values 文件,用于覆盖 loki-stack Chart 的默认配置。
​
# --- 全局设置 ---
# 在此处定义各个组件的通用配置。
​
# 1. Loki 配置 (核心日志存储)
loki:
  enabled: true              # 启用 Loki 组件
  isDefault: true            # 将此 Loki 实例设为日志收集的默认目标
​
  # 【修改点】开启持久化存储
  # 如果不开启,Loki 的数据只会存在于 Pod 的内存中,Pod 重启后日志会丢失。
  persistence:
    enabled: true           # 开启持久化
    size: 5Gi               # 申请的持久化卷大小。测试环境 5-10Gi 通常足够。
    # storageClassName: ""  # 留空表示使用集群默认的 StorageClass。
                           # 也可以指定,如 "local-path" 或 "nfs-client"。
    accessModes:
      - ReadWriteOnce       # 访问模式,单节点读写。
​
  # 资源限制 (保持低配置以防 OOM)
  # 在资源有限的测试环境中,限制资源使用非常重要,防止 Loki 耗尽节点内存。
  resources:
    requests:               # 调度时保证的资源
      cpu: 100m             # 0.1 个 CPU 核心
      memory: 256Mi         # 256 Mebibytes 内存
    limits:                 # 允许使用的最大资源
      cpu: 500m             # 0.5 个 CPU 核心
      memory: 512Mi         # 512 Mebibytes 内存
​
# 2. Grafana 配置 (界面与配置存储)
grafana:
  enabled: true              # 启用 Grafana 组件,用于可视化日志和指标
  adminPassword: "admin123"  # 设置 Grafana 的 admin 用户密码
​
  service:
    type: NodePort           # 将 Grafana 服务类型设置为 NodePort,以便从集群外部访问
    nodePort: 30300          # 指定 NodePort 端口号为 30300
    port: 80                 # Service 自身监听的端口
​
  # 【修改点】开启持久化 (存储 Dashboard 和用户数据)
  # 如果不开启,Grafana 的仪表盘配置在 Pod 重启后会丢失。
  persistence:
    enabled: true           # 开启持久化
    size: 2Gi               # Grafana 配置数据量不大,2Gi 足够
    # storageClassName: ""  # 同样留空使用默认 StorageClass
    accessModes:
      - ReadWriteOnce
​
  # 资源限制
  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      cpu: 500m
      memory: 512Mi
​
  # 启用 Sidecar 自动发现数据源
  # 这个配置会让 Grafana 自动识别并加载由 Promtail 暴露的 Loki 数据源。
  sidecar:
    datasources:
      enabled: true
      label: "grafana_datasource"
      labelValue: "1"
​
# 3. Promtail 配置
promtail:
  enabled: true              # 启用 Promtail 组件,负责采集日志并发送给 Loki
  resources:
    requests:
      cpu: 50m              # Promtail 资源消耗很低
      memory: 64Mi
    limits:
      cpu: 200m
      memory: 128Mi
EOF
步骤四:使用 Helm 安装 Loki Stack

此步骤也在 K8s Master 节点 上执行。我们将使用自定义配置来安装应用。

# 1. 创建一个独立的命名空间 "monitoring",用于存放监控相关的组件。
# 这有助于资源隔离和管理。
kubectl create namespace monitoring
​
# 2. 执行 Helm 安装命令
# --namespace monitoring: 指定应用安装在 "monitoring" 命名空间。
# -f ./loki-stack/values.yaml: 指定我们自定义的配置文件,覆盖默认值。
# loki-stack: 这是在 K8s 中创建的 Release 名称,可以用 kubectl get all -n monitoring 查看到。
helm install loki-stack ./loki-stack-*.tgz \
  --namespace monitoring \
  -f ./loki-stack/values.yaml

4. 验证部署

安装完成后,可以通过以下命令检查各组件的运行状态。

# 查看 monitoring 命名空间下的所有 Pod,等待它们都处于 Running 状态。
kubectl get pods -n monitoring
​
# 查看 monitoring 命名空间下的 Service,确认 Grafana 的 NodePort 已分配。
kubectl get svc -n monitoring
​
# 查看所有资源的部署状态
kubectl get all -n monitoring

5. 访问 Grafana 界面

  1. kubectl get svc -n monitoring的输出中找到 loki-stack-grafana服务,确认其 NodePort30300

  2. 在浏览器中访问 http://<你的Master节点IP>:30300

  3. 使用用户名 admin和密码 admin123登录。

  1. 登录后,你应该能在左侧菜单看到 "Explore" (探索),在这里可以选择 Loki 数据源并开始查询日志。

5.可以通过选择标签查看,点击右上角run可以下载下放查看


6. 卸载

如果需要移除整个 Loki Stack,可以执行以下命令:

# 使用 Helm 卸载 release,并指定命名空间
helm uninstall loki-stack --namespace monitoring
​
# 删除命名空间 (这将同时删除该命名空间下的所有资源,包括 PVC)
kubectl delete namespace monitoring
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐