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 等配置字段均成功上报
相关推荐
weixin_4624462322 分钟前
K8s 集群部署基础:Linux 三节点 SSH 互信(免密登录)配置指南
linux·kubernetes·ssh
Fortune_yangyang1 小时前
Kubernetes 操作管理
云原生·容器·kubernetes
AllFiles2 小时前
Kubernetes PVC 扩容全流程实战:从原理到操作详解
后端·kubernetes
放寒假脚后跟v3 小时前
Pod 的 YAML 文件中 exitCode 字段的具体含义、不同取值代表的场景
运维·云原生·容器·kubernetes·k8s
东方佑3 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
原神启动14 小时前
K8S(五)—— YAML文件解析
java·容器·kubernetes
lin张4 小时前
k8s(二)项目生命周期管理、发布策略与声明式资源管理
云原生·容器·kubernetes
赵文宇(温玉)4 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器
Zsr10234 小时前
K8S安装指南与核心操作命令汇总
云原生·容器·kubernetes
孤岛悬城5 小时前
53 k8s基础与安装
云原生·容器·kubernetes