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配置(如仪表盘、索引模式),避免配置丢失

相关推荐
探索云原生2 小时前
Kubernetes 官方出品:一个 Controller 搞定 Job 排队和资源配额
ai·云原生·kubernetes·scheduler
BullSmall4 小时前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
spider_xcxc5 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
hay_lee6 小时前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发6 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2136 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall7 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
人间凡尔赛8 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
成为你的宁宁8 小时前
【K8s HPA 水平扩缩容】
kubernetes·hpa
欢醉8 小时前
k8s调度容器失败The node had condition: [DiskPressure]
kubernetes·springcloud