主流的K8s日志收集方案ELK需要部署es集群,很重,需要的机器资源比我们运行服务的机器还多。
调研发现轻量级日志方案loki,正好满足我们需求。
1 Helm安装loki
1 2 3 4 5
| kubectl create ns loki helm repo add grafana https: # 8.5.13修复 chrome bom字符bug helm upgrade --install loki --namespace=loki grafana/loki-stack --set grafana.enabled=true --set grafana.image.tag=8.5.13
|
2 部署Ingress暴露访问
1 2 3 4
| kubectl -n loki apply -f ingress.yaml
kubectl get secret --namespace loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: loki-grafana-ingress spec: rules: - host: loki-grafana.XXX.com http: paths: - backend: service: name: loki-grafana port: name: service path: / pathType: Prefix tls: - hosts: - loki-grafana.XXX.com secretName: loki-grafana-XXX-tls
|
3 挂载硬盘持久化日志
loki提供多种持久化方案,但最直接的是硬盘。我们使用挂载硬盘方式。
1 2 3 4
| # 查看配置 kubectl -n loki get statefulsets.apps loki -o yaml
# 修改 `storage` volumeClaimTemplates后重新创建
|
1 2 3 4 5 6 7 8 9 10 11
|
volumeClaimTemplates: - metadata: name: storage spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "gp2" resources: requests: storage: 100Gi
|
4 修改日志保存时间
loki配置记录在loki secrets,可以改成configmap并修改配置
1 2
| kubectl get secrets loki -n loki -o "jsonpath={.data['loki\.yaml']}" | base64 -d | tee loki.yaml
|
修改保存时间
1 2 3
| table_manager: retention_deletes_enabled: true retention_period: 168h //需要24h的整数倍
|
创建configmap
1
| kubectl create cm -n loki loki-conf --from-file=loki.yaml=loki.yml
|
更新loki statefulsets,读configmap配置
1
| kubectl -n loki edit statefulsets loki
|
等待服务更新完成,至此Loki部署完成。
相关资料