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 等配置字段均成功上报
相关推荐
bloglin999994 小时前
启动容器报错ls: cannot access ‘/docker-entrypoint-initdb.d/‘: Operation not permitted
docker·容器·eureka
songjxin5 小时前
离线部署kubernetes v1.34.3
云原生·容器·kubernetes
yBmZlQzJ6 小时前
免费内网穿透-端口转发配置介绍
运维·经验分享·docker·容器·1024程序员节
JH30736 小时前
docker 新手入门:10分钟搞定基础使用
运维·docker·容器
wuxia21187 小时前
minikube的安装
kubernetes·云计算
天河归来7 小时前
在本地windows电脑使用Docker搭建xinference环境
docker·语言模型·容器
算力魔方AIPC8 小时前
使用 Docker 一键部署 PaddleOCR-VL: 新手保姆级教程
运维·docker·容器
熊出没9 小时前
Kubernetes 实操命令大全
云原生·容器·kubernetes
Ghost Face...9 小时前
Docker实战:从安装到多容器编排指南
运维·docker·容器
闲人编程10 小时前
健康检查与就绪探针
kubernetes·web·状态机·健康检查·codecapsule·存活探针·启动探针