温馨提示×

K8S在Debian上的日志管理如何实现

小樊
62
2025-08-26 07:55:58
栏目: 智能运维

在Debian上实现K8S日志管理,可参考以下方案:

一、基础日志查看

  • 使用kubectl logs命令:直接查看Pod日志,如kubectl logs <pod-name> -n <namespace>
  • 查看组件日志文件:K8S组件日志默认存放在/var/log目录,如kubelet.logdocker.log

二、集中式日志管理(EFK方案)

1. 部署Fluentd收集日志

  • 通过DaemonSet在每个节点部署Fluentd,收集容器和系统日志,配置示例:
    # fluentd-ds.yaml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: fluentd
      namespace: kube-system
    spec:
      template:
        spec:
          containers:
          - name: fluentd
            image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
            env:
            - name: FLUENT_ELASTICSEARCH_HOST
              value: "elasticsearch.logging.svc.cluster.local"
            - name: FLUENT_ELASTICSEARCH_PORT
              value: "9200"
    
    应用配置:kubectl apply -f fluentd-ds.yaml

2. 部署Elasticsearch存储日志

  • 使用Deployment部署Elasticsearch,配置存储和集群参数:
    # elasticsearch-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: elasticsearch
      namespace: logging
    spec:
      replicas: 1
      template:
        spec:
          containers:
          - name: elasticsearch
            image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
            ports:
            - containerPort: 9200
    
    应用配置:kubectl apply -f elasticsearch-deployment.yaml

3. 部署Kibana可视化日志

  • 通过Deployment和Service部署Kibana,配置Elasticsearch连接:
    # kibana-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: kibana
      namespace: logging
    spec:
      template:
        spec:
          containers:
          - name: kibana
            image: docker.elastic.co/kibana/kibana:7.12.1
            env:
            - name: ELASTICSEARCH_HOSTS
              value: "http://elasticsearch.logging.svc.cluster.local:9200"
    
    应用配置:kubectl apply -f kibana-deployment.yaml,通过NodePort或Ingress访问Kibana。

三、日志轮转与清理

  • 使用logrotate工具:在节点上安装logrotate,配置日志分割和保留策略,例如:
    # /etc/logrotate.d/kubernetes
    /var/lib/docker/containers/*/*.log {
      daily
      rotate 7
      compress
      missingok
      notifempty
      sharedscripts
      postrotate
        systemctl restart docker
      endscript
    }
    
    通过DaemonSet在节点上自动部署logrotate

四、可选方案:Loki轻量级日志聚合

  • 部署Grafana Loki替代ELK,适合资源有限场景,通过DaemonSet采集日志并存储,配置示例:
    # loki-ds.yaml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: loki
    spec:
      template:
        spec:
          containers:
          - name: loki
            image: grafana/loki:2.9.1
            args: ["-config.file=/etc/loki/config.yaml"]
    
    参考官方文档配置Promtail采集日志并发送至Loki。

五、日志级别与驱动配置

  • 调整组件日志级别:修改K8S组件启动参数,如kube-apiserver添加--v=4参数(数值越大日志越详细)。
  • 使用JSON文件驱动:在Pod中配置json-file日志驱动,限制单个日志文件大小:
    # pod-log-driver.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: example-pod
    spec:
      containers:
      - name: example-container
        image: nginx
        volumeMounts:
        - name: varlog
          mountPath: /var/log
    volumes:
    - name: varlog
      emptyDir: {}
    

以上方案可根据实际需求选择,EFK适合大规模集群,Loki适合轻量级场景,均可在Debian系统上通过Kubernetes资源定义实现。

0