You need to enable JavaScript to run this app.
导航

安装 LogCollector(DaemonSet 方式)

最近更新时间2023.12.12 10:52:11

首次发布时间2022.05.07 14:30:55

采集容器文本日志或容器标准输出之前,需要先在 Kubernetes 集群中安装 LogCollector,并配置相关环境。本文介绍通过 DaemonSet 方式安装 LogCollector 的操作步骤。

背景信息

本文以 DaemonSet 方式为例,介绍如何在 Kubernetes 集群上安装 LogCollector。在安装的过程中,主要完成以下步骤:

  1. 创建 LogCollector 的 ConfigMap。
  2. 配置 ServiceAccount、ClusterRole、ClusterRoleBinding,完成 LogCollector 的认证和授权。
  3. 创建 LogCollector DaemonSet。

1 创建 ConfigMap

此步骤会创建一个 ConfigMap,并在其中添加日志服务的配置信息。

  1. 登录需要安装 LogCollector 的 Kubernetes 集群。

  2. 创建 LogCollector 所需的命名空间(namespace)。
    如果命名空间已存在,则跳过此步骤。

    kubectl create namespace ${namespace}
    
  3. 创建一个 YAML 文件,名为 logcollector_config.yaml

    vim logcollector_config.yaml
    
  4. 编辑 YAML 文件,并在 YAML 文件中输入以下内容。
    根据实际情况,在 output.tls 部分配置相关鉴权参数。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: logcollector-config
      namespace: ${namespace}
    data:
      filebeat.yml: |
        filebeat:
          deploy_in_container: true
          autodiscover:
            providers:
              - type: kubernetes
    
        output.tls:
          endpoint: ${volc_endpoint}
          region: ${volc_region}
          secret_id: ${your_ak}
          secret_key: ${your_sk}
          label: ${your_labels}
    
        logging.level: info
        logging.to_files: true
        logging.files:
          name: filebeat
          keepfiles: 7
          permissions: 0644
    

    参数说明如下:

    参数

    示例

    说明

    namespace

    kube-system

    命名空间。只能指定一个命名空间。

    endpoint

    https://tls-cn-beijing.ivolces.com

    日志服务连接域名,即服务地址。登录日志服务控制台后,在日志项目的详情页中查看连接域名。日志服务支持的地域及对应服务地址请参考服务入口

    region

    cn-beijing

    日志项目所在的地域(Region)。 日志服务地域及对应ID请参考服务入口

    secret_id

    AK********

    火山引擎主账号或子账号的 Access Key ID。在火山引擎控制台密钥管理页面,根据页面提示查看并复制 Access Key ID。

    secret_key

    TUdZ********

    火山引擎主账号或子账号的 Secret Access Key。 在火山引擎控制台密钥管理页面,根据页面提示查看并复制Secret Access Key。

    label

    http_module

    机器的自定义标识。用于将此机器添加到对应的机器组中。多个标识之间通过逗号(,)分隔。

  5. 执行如下命令使 ConfigMap 配置生效。

    kubectl apply -f logcollector_config.yaml
    

2 创建 ServiceAccount

为 LogCollector 创建一个 ServiceAccount,并配置基本的身份信息。

  1. 创建一个 YAML 文件,名为 logcollector_sa.yaml

    vim logcollector_sa.yaml
    
  2. 在 YAML 文件中输入如下内容。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: logcollector
      namespace: ${namespace}
    

    参数

    示例

    说明

    namespace

    kube-system

    命名空间。只能指定一个命名空间,且必须和步骤 1 中设置的命名空间相同。

  3. 执行如下命令使 ServiceAccount 配置生效。

    kubectl apply -f logcollector_sa.yaml
    

3 创建 ClusterRole

为 LogCollector 创建 ClusterRole。

  1. 创建一个 YAML 文件,名为 logcollector_cr.yaml

    vim logcollector_cr.yaml
    
  2. 在 YAML 文件中输入如下内容。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: logcollector
      namespace: ${namespace}
    rules:
      - apiGroups:
          - ""
        resources:
          - pods
          - nodes
          - namespaces
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - apps
        resources:
          - replicasets
          - deployments
          - daemonsets
          - statefulsets
        verbs:
          - watch
          - list
          - get
      - apiGroups:
          - batch
        resources:
          - jobs
          - cronjobs
        verbs:
          - watch
          - list
          - get
    

    参数

    示例

    说明

    namespace

    kube-system

    命名空间。只能指定一个命名空间,且必须和步骤 1 中设置的命名空间相同。

  3. 执行如下命令使 ClusterRole 配置生效。

    kubectl apply -f logcollector_cr.yaml
    

4 创建 ClusterRoleBinding

为 LogCollector 创建 ClusterRoleBinding。

  1. 创建一个 YAML 文件,名为 logcollector_crb.yaml

    vim logcollector_crb.yaml
    
  2. 在 YAML 文件中输入如下内容。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: logcollector
      namespace: ${namespace}
    subjects:
      - kind: ServiceAccount
        name: logcollector
        namespace: ${namespace}
    roleRef:
      kind: ClusterRole
      name: logcollector
      apiGroup: rbac.authorization.k8s.io
    

    参数说明如下:

    参数

    示例

    说明

    namespace

    kube-system

    命名空间。只能指定一个,且必须和步骤 1 中设置的命名空间相同。

  3. 执行如下命令使 ClusterRoleBinding 配置生效。

    kubectl apply -f logcollector_crb.yaml
    

5 创建Daemonset

为 LogCollector 创建 Daemonset,用于采集当前节点中的日志。

  1. 创建一个 YAML 文件,名为 logcollector_ds.yaml

    vim logcollector_ds.yaml
    
  2. 在 YAML 文件中输入如下内容,并根据实际情况替换其中的参数。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
     name: logcollector
     namespace: ${namespace}
     labels:
       k8s-app: logcollector
    spec:
     selector:
       matchLabels:
         k8s-app: logcollector
     template:
       metadata:
         labels:
           k8s-app: logcollector
       spec:
         serviceAccountName: logcollector
         terminationGracePeriodSeconds: 30
         containers:
           - name: logcollector
             image: ${logcollector-image}
             imagePullPolicy: Always
             args:
               - /usr/local/container/filebeat-7.12.0/filebeat
               - -c
               - /usr/local/container/filebeat-7.12.0/etc/filebeat.yml
             securityContext:
               runAsUser: 0
               # If using Red Hat OpenShift, uncomment this:
               # privileged: true
             livenessProbe:
               initialDelaySeconds: 10
               periodSeconds: 10
               exec:
                 command:
                   - sh
                   - -c
                   - |
                     filebeat_num=`ps -ef 2>/dev/null | grep "filebeat" | grep -v "grep" | wc -l`
                     if [ $filebeat_num -eq 0 ]; then
                       return 1
                     fi
             resources:
               limits:
                 cpu: '2'
                 memory: 2Gi
               requests:
                 cpu: '1'
                 memory: 1Gi
             volumeMounts:
               - name: logcollector-config
                 mountPath: /usr/local/container/filebeat-7.12.0/etc/
                 readOnly: true
               - name: logcollector-host
                 mountPath: /logcollector_host
                 mountPropagation: HostToContainer
                 readOnly: true
               - name: logcollector-data
                 mountPath: /usr/local/container/filebeat-7.12.0/data
             env:
               - name: MAX_MEM
                 valueFrom:
                   resourceFieldRef:
                     containerName: logcollector
                     resource: limits.memory
         volumes:
           - name: logcollector-config
             configMap:
               defaultMode: 420
               name: logcollector-config
           - name: logcollector-host
             hostPath:
               path: /
           - name: logcollector-data
             hostPath:
               path: ${logcollector-data-dir}
               type: DirectoryOrCreate
    

    参数说明如下:

    参数

    示例

    说明

    namespace

    kube-system

    命名空间。只能指定一个,且必须和步骤 1 中设置的命名空间相同。

    image

    logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest

    LogCollector 的镜像地址。最新版本镜像地址请参考 LogCollector 镜像地址

    path

    /var/lib/logcollector-data

    LogCollector的CheckPoint状态的存储目录,保证 LogCollector 的 Pod 重启之后不会重复采集。

  3. 执行如下命令使 Daemonset 配置生效。

    kubectl apply -f logcollector_ds.yaml
    

LogCollector 镜像地址

日志服务在各个区域提供的最新版本 LogCollector 镜像地址如下:

地域

镜像地址

华北2(北京)

logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest

华东2(上海)

logcollector-cn-shanghai.cr.volces.com/logcollector/logcollector:latest

华南1(广州)

logcollector-cn-guangzhou.cr.volces.com/logcollector/logcollector:latest