Helm 在 Kubernetes 上部署 Loki 日志聚合系统
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 界面
-
从
kubectl get svc -n monitoring的输出中找到loki-stack-grafana服务,确认其NodePort为30300。 -
在浏览器中访问
http://<你的Master节点IP>:30300。 -
使用用户名
admin和密码admin123登录。

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

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


6. 卸载
如果需要移除整个 Loki Stack,可以执行以下命令:
# 使用 Helm 卸载 release,并指定命名空间 helm uninstall loki-stack --namespace monitoring # 删除命名空间 (这将同时删除该命名空间下的所有资源,包括 PVC) kubectl delete namespace monitoring
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)