温馨提示×

centos上k8s的日志管理

小樊
41
2025-11-08 05:43:26
栏目: 智能运维

CentOS上Kubernetes日志管理指南
在CentOS上部署Kubernetes集群后,日志管理是保障集群稳定运行、快速排查问题的核心环节。完整的日志管理需覆盖收集→存储→查看/分析→轮转/清理→监控告警全链路,以下是具体实施方案:

一、日志收集方案选择

Kubernetes日志收集需根据集群规模、资源预算选择合适方案,常见工具及特点如下:

  • EFK Stack(Elasticsearch+Fluentd+Kibana):官方推荐的全链路日志方案,适合需要全文检索、复杂分析(如故障排查、业务指标监控)的场景。Fluentd作为DaemonSet部署在每个节点,收集容器/系统日志并转发至Elasticsearch,Kibana提供Web界面展示。
  • Loki+Promtail+Grafana轻量级云原生方案,适合大规模集群、低成本存储(如S3、OSS)。Promtail作为Sidecar或DaemonSet收集日志,Loki存储并索引,Grafana实现可视化,且能与Prometheus联动实现日志+指标统一监控。
  • Filebeat+Elasticsearch+Kibana简化版ELK,Filebeat作为轻量级收集器(资源占用低),适合资源受限的小型集群。需配合DaemonSet部署,收集/var/log/containers/*.log中的容器日志。

二、EFK Stack部署步骤(以DaemonSet为例)

1. 部署Elasticsearch

Elasticsearch需持久化存储(如NFS、云盘),并配置资源限制(避免OOM)。示例StatefulSet配置(简化版):

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
spec:
  serviceName: "elasticsearch"
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
        ports:
        - containerPort: 9200
        env:
        - name: discovery.type
          value: "single-node"
        - name: ES_JAVA_OPTS
          value: "-Xms512m -Xmx512m"
        volumeMounts:
        - name: elasticsearch-data
          mountPath: /usr/share/elasticsearch/data
  volumeClaimTemplates:
  - metadata:
      name: elasticsearch-data
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: nfs-client  # 替换为实际存储类
      resources:
        requests:
          storage: 10Gi

2. 部署Fluentd(DaemonSet)

Fluentd以DaemonSet模式运行在每个节点,收集/var/log/containers/*.log(容器日志)并转发至Elasticsearch。示例DaemonSet配置(简化版):

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1.16-es
        env:
        - name: FLUENT_ELASTICSEARCH_HOST
          value: "elasticsearch.default.svc.cluster.local"  # Elasticsearch服务地址
        - name: FLUENT_ELASTICSEARCH_PORT
          value: "9200"
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

3. 部署Kibana

Kibana通过Deployment和Service暴露,配置连接Elasticsearch。创建Service后,获取Service IP并通过浏览器访问(如http://<Kibana-Service-IP>:5601)。

三、日志查看与分析

1. 命令行工具

  • kubectl logs:查看Pod日志(示例:kubectl logs -f payment-service-abcde -n prod 实时查看);
  • kubectl logs --previous:查看容器重启前的日志;
  • kubectl logs -c <container-name>:查看多容器Pod中指定容器的日志。

2. 可视化工具

  • Kibana(EFK):通过Kibana创建索引模式(如k8s-logs-*),使用“Discover”页面查看实时日志,“Dashboard”构建可视化面板(如错误日志趋势、Pod日志量排名);
  • Grafana(Loki):若使用Loki,可通过Grafana的“Explore”功能查询日志,支持标签过滤(如namespace=prodpod_name=payment-service)。

3. 第三方工具

  • Kubetail:聚合多个Pod日志(示例:kubetail payment-service -n prod);
  • Stern:支持正则匹配Pod名称(示例:stern 'payment.*' -n prod)。

四、日志存储方案

  • Elasticsearch:适合需要全文检索、复杂分析的场景,支持水平扩展,但资源消耗较高;
  • Loki:轻量级日志聚合系统(专为Kubernetes设计),资源消耗低,与Prometheus集成好,适合日志+监控统一管理;
  • 对象存储(S3/MinIO):适合长期归档,成本低,但无法实时检索。

五、日志轮转与清理

容器日志默认存储在节点/var/log/containers目录,需通过logrotate配置轮转规则,避免日志文件过大。示例配置(/etc/logrotate.d/kubernetes-containers):

/var/lib/docker/containers/*/*.log {
    daily                   # 每天轮转
    rotate 7                # 保留7天
    compress                # 压缩旧日志
    delaycompress           # 延迟压缩(避免压缩当天日志)
    missingok               # 文件不存在不报错
    notifempty              # 空文件不轮转
    copytruncate            # 复制后截断原文件(不影响正在写入的日志)
}

此配置会每天轮转Docker容器日志,保留最近7天的压缩日志,节省磁盘空间。

六、日志监控与告警

结合Prometheus+Alertmanager实现日志监控与告警:

  • Prometheus:采集Elasticsearch/Loki的日志指标(如日志量、错误日志数、索引延迟);
  • Alertmanager:设置告警规则(如“5分钟内错误日志数超过100条”),通过邮件、Slack等方式通知运维人员。
    示例Prometheus告警规则:
groups:
- name: k8s-log-alerts
  rules:
  - alert: HighErrorLogs
    expr: rate(elasticsearch_indices_indexing_slowlog_total[5m]) > 100
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "K8s集群错误日志过多 (instance {{ $labels.instance }})"
      description: "5分钟内错误日志数超过100条,需立即排查"

通过以上流程,可在CentOS上搭建高效的Kubernetes日志管理系统,满足日志收集、存储、分析及监控需求,保障集群稳定运行。

0