Grafana Loki在Azure上的Helm部署指南
前言
Grafana Loki是一个水平可扩展、高可用性、多租户的日志聚合系统,专为效率和易用性而设计。本文将详细介绍如何在Azure云平台上使用Helm图表部署Loki的微服务模式,并重点讲解如何通过联邦令牌实现安全的身份验证机制。
核心概念解析
在开始部署前,我们需要理解几个关键概念:
- 微服务模式:Loki的分布式部署方式,各组件(如ingester、querier等)作为独立服务运行
- 联邦令牌:Azure AD提供的安全凭证,允许Kubernetes工作负载访问Azure资源而无需存储凭证
- TSDB存储:Loki v2.0引入的存储引擎,显著提高了查询性能
环境准备
工具要求
- Helm 3+:Kubernetes包管理工具
- kubectl:Kubernetes命令行工具
- Azure CLI:Azure云平台管理工具
基础设施要求
-
AKS集群:
- Kubernetes版本≥1.30
- 3个节点(生产环境建议更多)
- 节点规格:
- 测试环境:Standard_E2ds_v5
- 生产环境:Standard_D4_v5
-
存储资源:
- Azure Blob Storage账户
- 两个容器:
- chunks:存储日志数据
- ruler:存储告警规则
详细部署步骤
1. 创建AKS集群
az group create --name loki-rg --location eastus
az aks create \
--resource-group loki-rg \
--name loki-cluster \
--node-count 3 \
--node-vm-size Standard_E2ds_v5 \
--enable-workload-identity \
--enable-oidc-issuer
关键参数说明:
--enable-workload-identity
:启用工作负载身份功能--enable-oidc-issuer
:启用OIDC发行者
2. 配置Blob Storage
# 创建存储账户
az storage account create \
--name lokistorage \
--location eastus \
--sku Standard_ZRS \
--resource-group loki-rg
# 创建容器
az storage container create \
--account-name lokistorage \
--name loki-chunks \
--auth-mode login
az storage container create \
--account-name lokistorage \
--name loki-ruler \
--auth-mode login
安全建议:
- 使用ZRS冗余确保数据高可用
- 为不同环境使用不同的容器名称
3. 配置身份认证
获取OIDC发行者URL
az aks show \
--resource-group loki-rg \
--name loki-cluster \
--query "oidcIssuerProfile.issuerUrl" \
-o tsv
创建Azure AD应用
appId=$(az ad app create \
--display-name loki \
--query appId \
-o tsv)
az ad sp create --id $appId
配置联邦凭证
创建credentials.json文件:
{
"name": "LokiFederatedIdentity",
"issuer": "<OIDC-URL>",
"subject": "system:serviceaccount:loki:loki",
"audiences": ["api://AzureADTokenExchange"]
}
应用配置:
az ad app federated-credential create \
--id $appId \
--parameters credentials.json
分配存储权限
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee $appId \
--scope /subscriptions/<sub-id>/resourceGroups/loki-rg/providers/Microsoft.Storage/storageAccounts/lokistorage
4. 部署Loki Helm图表
基础认证配置
# 创建认证文件
htpasswd -c .htpasswd loki-user
# 创建Kubernetes Secret
kubectl create secret generic loki-basic-auth \
--from-file=.htpasswd \
-n loki
kubectl create secret generic canary-basic-auth \
--from-literal=username=loki-user \
--from-literal=password=your-password \
-n loki
values.yaml关键配置
loki:
storage_config:
azure:
account_name: "lokistorage"
container_name: "loki-chunks"
use_federated_token: true
ruler:
storage:
azure:
account_name: "lokistorage"
container_name: "loki-ruler"
use_federated_token: true
serviceAccount:
annotations:
"azure.workload.identity/client-id": "<app-id>"
gateway:
basicAuth:
enabled: true
existingSecret: loki-basic-auth
执行部署
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install loki grafana/loki -n loki -f values.yaml
配置详解
存储架构
-
TSDB索引:
- 从2024-04-01开始使用v13模式
- 24小时为一个索引周期
- 前缀为loki_index_
-
数据保留:
- 默认28天(672小时)
- 通过compactor组件实现
组件副本配置
| 组件 | 副本数 | 最大不可用 | |---------------|--------|------------| | Ingester | 3 | 2 | | Querier | 3 | 2 | | QueryFrontend | 2 | 1 | | IndexGateway | 2 | 1 |
安全配置
-
认证层:
- 通过NGINX Gateway提供基础认证
- 所有外部请求必须提供凭证
-
网络隔离:
- Gateway使用LoadBalancer类型
- 内部组件使用ClusterIP
验证部署
kubectl get pods -n loki -w
# 检查服务状态
kubectl get svc -n loki
预期输出应显示所有Pod处于Running状态,gateway服务有外部IP。
生产环境建议
-
监控:
- 部署Loki自监控
- 设置Azure Monitor告警
-
扩展性:
- 根据负载调整各组件副本数
- 考虑使用专用节点组
-
备份:
- 配置存储账户的定期备份
- 测试灾难恢复流程
常见问题排查
-
认证失败:
- 检查联邦凭证的subject是否匹配
- 验证服务账户注解是否正确
-
存储访问问题:
- 检查角色分配
- 验证容器名称拼写
-
性能问题:
- 调整查询并发数
- 检查索引配置
通过本文的详细指导,您应该能够在Azure上成功部署生产可用的Grafana Loki集群。这种部署方式充分利用了Azure的托管服务和安全特性,是企业在云环境中实施日志解决方案的理想选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考