k8s-EFK

K8s日志收集核心原理
K8s集群中,Pod的日志默认存储在所在节点的/var/log/containers/目录下(每个Pod对应一个日志文件),但这些日志分散在各个节点,无法直接集中查询。日志收集的核心流程分为3步

1. 日志收集:通过日志收集组件(Fluentd或Logstash),采集集群中所有Pod的日志(包括容器日志、应用日志);
2. 日志存储:将收集到的日志,统一存储到Elasticsearch(分布式搜索引擎,支持高效检索);
3. 日志可视化:通过Kibana(可视化工具),对存储在Elasticsearch中的日志进行查询、筛选、分析、可视化,方便运维人员快速定位故障

EFK与ELK的核心区别

EFK和ELK都是K8s日志收集的主流方案,三层架构基本一致,核心区别仅在于"日志收集组件"不同

|---------|--------------|-----------------------------------|----------------------------------|
| 方案 | 日志收集组件 | 核心优势 | 适用场景 |
| ELK | Logstash | 功能强大,支持复杂的日志过滤、转换;生态完善,集成多种插件 | 日志量大、需要复杂日志处理(如格式转换、过滤)的场景 |
| EFK | Fluentd | 轻量、资源占用低;配置简单,易于部署;对K8s兼容性更好 | 中小型集群、资源有限、追求简单部署的场景(生产环境首选) |

EFK由Elasticsearch(存储)、Fluentd(收集)、Kibana(可视化)三个组件组成,部署顺序为:Elasticsearch → Fluentd → Kibana

创建nfs存储访问

启动master节点的nfs服务

创建/data/v1

kubectl create -f serviceaccount.yaml

kubectl create -f rbac.yaml

修改deployment.yaml

kubectl create -f deployment.yaml

kubectl create -f class.yaml

构建es集群

kubectl apply -f kube-logging.yaml

kubectl create -f elasticsearch-statefulset.yaml

kubectl create -f elasticsearch_svc.yaml
安装socat
yum install -y socat
端口转发,回环地址
kubectl port-forward es-cluster-0 9200:9200 --namespace=kube-logging
特定地址
kubectl port-forward --address 192.168.166.128 es-cluster-0 9200:9200 --namespace=kube-logging

部署kibana

bash 复制代码
apiVersion: v1
kind: Service
metadata:
  name: kibana
  namespace: kube-logging
  labels:
    app: kibana
spec:
  type: NodePort
  ports:
  - port: 5601
  selector:
    app: kibana
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  namespace: kube-logging
  labels:
    app: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.2.0
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 1000m
          requests:
            cpu: 100m
        env:
          - name: ELASTICSEARCH_URL
            value: http://elasticsearch.kube-logging.svc.cluster.local:9200
        ports:
        - containerPort: 5601
        volumeMounts:
        - name: kibana-config
          mountPath: /usr/share/kibana/config/
      volumes:
      - name: kibana-config
        configMap:
          name: kibana-configmap

    
####汉化kibana
 kubectl -n kube-logging create configmap kibana-configmap --from-file=kibana.yml=./kibana.yml
 
 ###kibana.yml
 #
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"



kubectl apply -f kibana.yaml

kubectl get pods -n kube-logging

kubectl get svc -n kube-logging

志过滤规则,过滤无用日志(如kube-system命名空间的组件日志),减少存储压力。

Kibana:

配置登录认证(如使用LDAP、用户名密码),避免未授权访问;

创建不同角色的用户(如管理员、运维人员),分配不同的权限(如查询权限、编辑权限);

定期备份Kibana配置(如仪表盘、索引模式),避免配置丢失

日志收集最佳实践

日志格式统一:所有应用采用统一的日志格式(如JSON格式),便于Kibana解析和筛选;

按应用/命名空间分类:将不同应用、不同命名空间的日志存储到不同的索引中,便于分类查询和管理;

日志级别规范:应用日志需包含级别(info、warn、error、fatal),便于快速筛选故障日志;

避免收集敏感日志:过滤掉密码、token等敏感信息,确保日志安全

组件部署最佳实践

Elasticsearch:

生产环境建议部署3节点集群(高可用),避免单节点故障导致日志丢失;

开启持久化存储(PV/PVC),选择高性能存储(如SSD),确保日志存储稳定;

配置资源限制(至少2核4Gi内存),避免资源不足导致Elasticsearch崩溃;

定期清理日志(配置索引生命周期管理ILM),避免日志过多占用存储空间。

日志收集组件(Fluentd/Logstash):

优先选择Fluentd(轻量、资源占用低,对K8s兼容性更好);

以DaemonSet方式部署,确保每个节点都能采集日志,避免遗漏;

配置日志过滤规则,过滤无用日志(如kube-system命名空间的组件日志),减少存储压力。

Kibana:

配置登录认证(如使用LDAP、用户名密码),避免未授权访问;

创建不同角色的用户(如管理员、运维人员),分配不同的权限(如查询权限、编辑权限);

定期备份Kibana配置(如仪表盘、索引模式),避免配置丢失

相关推荐
鹤落晴春34 分钟前
【K8s】Pod调度、configMaps
云原生·容器·kubernetes
张忠琳1 小时前
【runc 1.4.2】(Part 2)runc 1.4.2 超深度分析 — CLI层:main.go、命令文件、runner、信号处理、TTY
云原生·kubernetes·runc
极客先躯2 小时前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
阿里云云原生3 小时前
AI 提效是“假象”还是“红利”?用 LoongSuite + SLS 构建组织级 AI 编码度量看板
云原生
极客先躯3 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java识堂4 小时前
如何对微服务进行拆分?
微服务·云原生·架构
某林2125 小时前
Isaac Sim 5.1.0 无头服务器部署与 RTX 显存段错误排障全记录
运维·服务器·docker·容器·isaac
m0_738120725 小时前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
Plastic garden7 小时前
K8s知识(3) Pod亲和性,调度
云原生·容器·kubernetes