centos

centos k8s部署后如何进行日志管理

小樊
44
2025-10-01 01:05:43
栏目: 智能运维

CentOS上Kubernetes集群日志管理指南

一、日志收集方案选择

Kubernetes日志收集需根据场景选择合适方案,常见工具及特点如下:

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

1. 部署Elasticsearch

Elasticsearch需持久化存储(如NFS、云盘),配置资源限制(避免OOM):

# elasticsearch-statefulset.yaml
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收集节点上所有容器日志(路径:/var/log/containers/*.log),转发至Elasticsearch:

# fluentd-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
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"
        - 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连接Elasticsearch,提供可视化界面:

kubectl apply -f https://raw.githubusercontent.com/elastic/cloud-on-k8s/2.16/deploy/kibana/kibana.yaml

访问http://<KIBANA_IP>:5601,配置Elasticsearch连接(默认地址:elasticsearch.default.svc.cluster.local:9200)。

三、Loki+Promtail部署步骤(轻量级替代)

1. 部署Loki(StatefulSet)

Loki存储日志,支持S3/OSS等外部存储:

# loki-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: loki
spec:
  serviceName: "loki"
  replicas: 1
  selector:
    matchLabels:
      app: loki
  template:
    metadata:
      labels:
        app: loki
    spec:
      containers:
      - name: loki
        image: grafana/loki:2.9.0
        ports:
        - containerPort: 3100
        args:
        - "--config.file=/etc/loki/config.yaml"
        volumeMounts:
        - name: loki-config
          mountPath: /etc/loki
  volumeClaimTemplates:
  - metadata:
      name: loki-storage
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: nfs-client
      resources:
        requests:
          storage: 20Gi
2. 部署Promtail(DaemonSet)

Promtail收集日志并发送至Loki:

# promtail-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: promtail
spec:
  selector:
    matchLabels:
      app: promtail
  template:
    metadata:
      labels:
        app: promtail
    spec:
      containers:
      - name: promtail
        image: grafana/promtail:2.9.0
        args:
        - "-config.file=/etc/promtail/config.yaml"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: promtail-config
          mountPath: /etc/promtail
  volumes:
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
  - name: promtail-config
    configMap:
      name: promtail-config
3. 配置Grafana可视化

添加Loki数据源(地址:loki.default.svc.cluster.local:3100),创建Dashboard展示日志(如按命名空间、Pod筛选)。

四、日志轮转与清理

使用logrotate避免日志文件无限增长,配置示例(/etc/logrotate.d/kubernetes):

/var/log/containers/*.log {
  daily
  rotate 7
  compress
  delaycompress
  missingok
  notifempty
  copytruncate
  sharedscripts
  postrotate
    /usr/bin/killall -HUP fluentd 2>/dev/null || true
  endscript
}

五、日志查看与分析

六、日志管理最佳实践

0
看了该问题的人还看了