Debian系统下Kubernetes日志管理指南
在Debian系统上管理Kubernetes(K8s)集群的日志,需围绕日志收集、存储、分析及优化四大核心环节展开。以下是具体实施方案及最佳实践:
K8s集群的日志主要来自三类场景:
stdout/stderr输出的日志,由Kubelet自动采集并存储到节点的/var/log/containers目录(符号链接至节点的/var/lib/docker/containers)。/var/log目录(如/var/log/kubelet.log)。/var/log/syslog、/var/log/auth.log),可通过系统日志服务(如rsyslog)管理。EFK是K8s官方推荐的日志管理方案,适合需要全文检索、复杂分析的场景。
/var/log/containers/*.log)并转发至Elasticsearch。示例DaemonSet配置需包含volumeMounts挂载日志目录(如/var/log、/var/lib/docker/containers),并通过env参数指定Elasticsearch的地址(FLUENT_ELASTICSEARCH_HOST、FLUENT_ELASTICSEARCH_PORT)。elasticsearch.yml(设置集群名称、节点名称、存储路径等),建议使用StatefulSet部署以保证稳定性。kibana.yml配置Elasticsearch的URL(elasticsearch.hosts),提供日志查询、仪表盘创建及告警功能。Loki是Grafana Labs推出的轻量级日志聚合系统,适合大规模集群、低成本存储场景(无需索引,仅按标签分类)。
kubernetes_sd_configs实现服务发现,通过relabel_configs过滤所需Pod(如app=my-app)。loki.yaml(设置存储路径、 chunk 大小等),并与Grafana集成(在Grafana中添加Loki数据源)。Filebeat是Elastic公司推出的轻量级日志收集器,适合资源受限的环境(如小型集群)。
paths(如/var/log/containers/*.log)、tags(如k8s)及输出目标(如Elasticsearch)。logrotate工具对节点本地的日志文件进行轮换,设置maxsize(如100M)、maxage(如7天)等参数,防止日志文件过大占用磁盘空间。示例logrotate配置:/var/log/containers/*.log {
daily
rotate 7
maxsize 100M
compress
missingok
notifempty
copytruncate
}
logql查询语言(如{namespace="default", pod="my-app"} |= "error")查询日志,展示日志趋势、分布等信息。--v=2(中等详细程度),避免记录过多无用信息(如--v=0为最低级别,--v=8为最高级别)。timestamp、level、message等字段)。RBAC机制限制日志访问权限(如仅允许运维人员访问Kibana、Grafana),并对敏感日志(如包含用户密码的日志)进行脱敏处理。