Kubernetes CRD 方式配置容器日志采集最佳实践

一、概述

DataKit 通过 Kubernetes Custom Resource Definition (CRD) 提供了一种声明式的容器日志采集配置方式。用户可以通过创建 ClusterLoggingConfig 资源来自动配置 DataKit 的日志采集,无需手动修改 DataKit 配置文件或重启 DataKit,同样也无需重启业务。

二、前置条件

  • Kubernetes 集群版本 1.16+
  • DataKit Version-1.84.0 或更新版本
  • 集群管理员权限(用于注册 CRD)

三、采集流程

1. 注册 Kubernetes CRD

  • 使用以下 YAML 注册 ClusterLoggingConfig CRD:

    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
    name: clusterloggingconfigs.logging.datakits.io
    labels:
    app: datakit-logging-config
    version: v1alpha1
    spec:
    group: logging.datakits.io
    versions:
    - name: v1alpha1
    served: true
    storage: true
    schema:
    openAPIV3Schema:
    type: object
    properties:
    apiVersion:
    type: string
    kind:
    type: string
    metadata:
    type: object
    spec:
    type: object
    required:
    - selector
    properties:
    selector:
    type: object
    properties:
    namespaceRegex:
    type: string
    podRegex:
    type: string
    podLabelSelector:
    type: string
    containerRegex:
    type: string
    podTargetLabels:
    type: array
    items:
    type: string
    configs:
    type: array
    items:
    type: object
    required:
    - source
    - type
    properties:
    source:
    type: string
    type:
    type: string
    disable:
    type: boolean
    path:
    type: string
    multiline_match:
    type: string
    pipeline:
    type: string
    storage_index:
    type: string
    tags:
    type: object
    additionalProperties:
    type: string
    scope: Cluster
    names:
    plural: clusterloggingconfigs
    singular: clusterloggingconfig
    kind: ClusterLoggingConfig
    shortNames:
    - logging

  • 创建 CRD 资源,自动应用采集配置

    kubectl apply -f clusterloggingconfig-crd.yaml

  • 验证 CRD 注册

    kubectl get crd clusterloggingconfigs.logging.datakits.io

2. 创建 CRD 配置资源

  • 如下为业务应用 yaml :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: deploy-demo
    namespace: default
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: demo
    template:
    metadata:
    labels:
    app: demo
    version: v1.0
    enviroment: test
    spec:
    containers:
    - name: container-demo
    image: swr.cn-north-4.myhuaweicloud.com/liurui_bj/springboot-server:openj8
    resources:
    limits:
    cpu: 250m
    memory: 512Mi
    requests:
    cpu: 250m
    memory: 512Mi

  • k8s 部署运行业务后如下:

  • 对应采集配置如下,该采集配置用于采集 default 工作空间 demo 业务的容器内日志以及容器的标准输出,容器内日志来源 source 自定义命名为 demo-file,容器标准输出的 source 自定义命名为 demo-std,更多配置参考链接

    apiVersion: logging.datakits.io/v1alpha1
    kind: ClusterLoggingConfig
    metadata:
    name: demo-logs
    spec:
    selector:
    namespaceRegex: "^(default)" podRegex: "^(deploy.*)"
    podLabelSelector: "app=demo"

    复制代码
    podTargetLabels:
      - app
      - version
      - enviroment
    
    configs:
      - source: "demo-file"
        type: "file"
        path: "/data/logs/server/server.log"
        tags:
          log_type: "server"
          component: "springboot-server"
    
      - source: "demo-std"
        type: "stdout"
        disable: false
        tags:
          log_type: "server"
          component: "springboot-server"
  • 应用配置

    kubectl apply -f logging-config.yaml

3. 添加相关 RBAC 配置

  • 在 DataKit 的 ClusterRole 中添加以下权限:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    name: datakit
    rules:
    # 原有的其他权限
    - apiGroups: ["logging.datakits.io"]
    resources: ["clusterloggingconfigs"]
    verbs: ["get", "list", "watch"]

  • 调整 DataKit 的其他采集配置,如日志白名单,采集器,数据 dataway 上报地址等,重新 apply DataKit 应用

    kubectl apply -f datakit.yaml

4. 额外配置与说明

  • 需要全局屏蔽日志标准输出采集,需要额外应用自定义 CRD 配置,如下:

    kind: ClusterLoggingConfig
    metadata:
    name: test
    spec:
    selector:
    namespaceRegex: "^(.*)$"

    复制代码
    configs:
      - source: "test"
        type: "stdout"
        disable: true
  • DataKit 需要打开 container 采集器,不然 CRD 配置不生效

四、日志采集展示

  • 容器内日志如下图,数据成功上报到观测云,相关 source,log_type,component 等配置字段均成功上报
  • 容器标准输出如下图,据成功上报到观测云,相关 source,log_type。component 等配置字段均成功上报
相关推荐
运维-大白同学7 小时前
2025最全面开源devops运维平台功能介绍
linux·运维·kubernetes·开源·运维开发·devops
tianyuanwo11 小时前
多平台容器化RPM构建流水线全指南:Fedora、CentOS与Anolis OS
linux·运维·容器·centos·rpm
敲上瘾13 小时前
【探索实战】:Kurator分布式统一应用分发平台的全面解析与实践指南
分布式·容器·kubernetes·serverless
cui_win14 小时前
Docker Compose 部署一个完整的Prometheus监控告警系统
docker·容器·prometheus
roman_日积跬步-终至千里1 天前
【Docker】Docker Stop 后到底发生了什么?——从信号机制到优雅停机
运维·docker·容器
z***6261 天前
Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像
docker·容器·tomcat
Connie14511 天前
记一次K8s故障告警排查(Grafna告警排查)
云原生·容器·kubernetes·grafana
❀͜͡傀儡师1 天前
Docker部署视频下载器
docker·容器·音视频
热爱学习的小怪兽1 天前
docker的一些常用指令
运维·docker·容器