centos

centos部署k8s的日志管理怎么做

小樊
59
2025-10-05 06:31:50
栏目: 智能运维

CentOS部署K8s的日志管理实践指南

在CentOS上部署Kubernetes(K8s)集群后,日志管理是保障系统稳定性、快速排查问题的核心环节。以下是完整的日志管理方案,涵盖工具选择、部署步骤及最佳实践:

一、日志来源梳理

K8s集群的日志主要分为三类,需全面覆盖:

  1. 容器内部日志:应用通过stdout/stderr输出的日志(K8s默认采集);
  2. K8s组件日志:kubelet、kube-apiserver、kube-controller-manager等系统组件的日志;
  3. 节点操作系统日志:宿主机的系统日志(如/var/log/messages/var/log/syslog)。

二、常用日志收集方案

1. EFK Stack(官方推荐)

EFK(Elasticsearch + Fluentd + Kibana)是K8s生态中最成熟的日志解决方案,适合需要全文检索、复杂分析的场景。

部署步骤

2. Loki + Promtail(轻量级替代)

Loki是Grafana Labs推出的轻量级日志聚合系统,适合大规模集群、低成本存储场景(无需索引,通过标签组织日志)。

部署步骤

3. Filebeat(轻量级单容器收集)

Filebeat是Elastic官方推出的轻量级日志收集器,适合资源受限的环境(如边缘节点),通常以Sidecar模式部署在Pod中(每个Pod运行一个Filebeat容器,收集应用日志)。

部署示例

apiVersion: v1
kind: Pod
metadata:
  name: payment-service
spec:
  containers:
  - name: app
    image: payment:v1.2
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
  - name: filebeat
    image: docker.elastic.co/beats/filebeat:8.9
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
    - name: filebeat-config
      mountPath: /usr/share/filebeat/filebeat.yml
      readOnly: true
volumes:
- name: logs
  emptyDir: {}
- name: filebeat-config
  configMap:
    name: filebeat-config

配置说明:通过ConfigMap定义filebeat.yml,设置filebeat.inputs指向容器日志路径(/var/log/app/*.log),输出至Elasticsearch或Logstash。

三、日志轮转与清理

为避免日志文件无限增长占用磁盘空间,需使用logrotate工具进行自动轮转。以下是针对Docker容器日志的配置示例(保存为/etc/logrotate.d/docker):

/var/lib/docker/containers/*/*-json.log {
    create 0644 root root
    notifempty
    missingok
    copytruncate  # 截断原日志文件,避免容器重启
    rotate 7      # 保留7天日志
    daily         # 每天轮转一次
    compress      # 压缩旧日志
    delaycompress # 延迟压缩(避免压缩当天日志)
}

说明copytruncate是关键参数,用于在不重启容器的情况下截断日志文件(适用于无法修改应用日志配置的场景)。

四、日常日志操作命令

  1. 查看Pod日志

    • 实时日志:kubectl logs -f <pod-name> -c <container-name>-f表示实时跟踪);
    • 历史日志:kubectl logs --previous <pod-name> -c <container-name>--previous查看前一个容器实例的日志);
    • 指定时间范围:kubectl logs --since=1h <pod-name>(查看最近1小时的日志)。
  2. 导出日志到文件

    kubectl logs <pod-name> > pod.log 2>&1
    

    用于将日志保存到本地进行分析(如提交给开发人员排查问题)。

五、日志管理最佳实践

  1. 日志分类与标记

    • 在日志中添加namespacepod_namedeployment_name等标签(通过Fluentd或Filebeat的fields配置),便于后续过滤和分析;
    • 示例(Fluentd配置):
      <record>
        kubernetes_namespace "#{ENV['KUBERNETES_NAMESPACE']}"
        kubernetes_pod_name "#{ENV['KUBERNETES_POD_NAME']}"
      </record>
      
  2. 敏感信息过滤

    • 使用Fluentd或Filebeat的filter插件过滤敏感数据(如银行卡号、密码),避免日志泄露;
    • 示例(Fluentd过滤银行卡号):
      <filter kubernetes.**>
        @type grep
        exclude1 /^(?=.*\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}).*$/
      </filter>
      
  3. 日志保留策略

    • 根据日志重要性设置保留时间(如业务日志保留7天,系统日志保留30天);
    • 结合Elasticsearch的ILM(Index Lifecycle Management)策略自动删除旧索引,或使用Loki的retention_period参数设置保留时间。
  4. 监控与告警

    • 使用Prometheus监控日志系统的关键指标(如Fluentd的内存使用率、Elasticsearch的索引速率);
    • 设置告警规则(如“Elasticsearch磁盘空间剩余<20%”触发告警),及时扩容或清理日志。

通过以上方案,可在CentOS上构建高效、可靠的K8s日志管理系统,满足日常运维、故障排查及审计需求。根据集群规模(如节点数量、日志量)和业务需求(如是否需要全文检索),选择合适的工具组合(EFK适合复杂分析,Loki适合轻量级场景)即可。

0
看了该问题的人还看了