博客 / 詳情

返回

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 等配置字段均成功上報

圖片

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.