You need to enable JavaScript to run this app.
导航
安装 LogCollector(DaemonSet 方式)
最近更新时间:2024.05.13 17:00:08首次发布时间: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 下载 LogCollector 依赖组件安装包

  1. 登录待安装 LogCollector 的 Kubernetes 集群。
  2. 根据地域与网络类型,执行对应的下载命令,将 LogCollector 下载到指定目录下。
    • 私网下载地址

      wget https://logcollector-cn-guangzhou.tos-cn-guangzhou.ivolces.com/logcollector-k8s.tgz; tar xvf logcollector-k8s.tgz; chmod 744 ./logcollector-k8s/logcollector-k8s-custom-install.sh
    • 公网下载地址

      wget https://logcollector-cn-guangzhou.tos-cn-guangzhou.volces.com/logcollector-k8s.tgz; tar xvf logcollector-k8s.tgz; chmod 744 ./logcollector-k8s/logcollector-k8s-custom-install.sh

2 修改配置文件

  1. 打开配置文件logcollector-k8s/values.yaml

  2. 根据实际情况替换其中的参数。

    # =================TLS Common Config=================
    # TLS's endpoint: https://www.volcengine.com/docs/6470/73641, eg https://tls-cn-beijing.volces.com
    endpoint: https://tls-cn-beijing.volces.com
    # TLS's region-ID: cn-beijing, cn-shanghai, cn-guangzhou
    region: cn-beijing
    
    # =================TLS Authority Config=================
    # https://www.volcengine.com/docs/6291/65568
    # Access Key ID
    secret_id: XXXXXXXXXXBcFk4C8sbmXQ8i65XXXXXXXXXX
    #Secret Access Key
    secret_key: XXXXXXXXXX4tX5SHyXv6tZXXXXXXXXXX
    
    # =================LogCollector Config=================
    # host group's identifiers, see https://www.volcengine.com/docs/6470/107375
    # if you want to use ip-type host group, you can comment or delete this.
    # Multiple identifiers are separated by commas(,)
    label: your label
    
    # =================LogCollector Container Config=================
    # the namespace that you want to install, please make sure this namespace exist
    namespace: ns
    # logcollector's image address, see https://www.volcengine.com/docs/6470/1158004
    # if you don't make sure, you can comment or delete this. This shell will find it by region.
    logcollector-image: img
    # The storage path of LogCollector's CheckPoint file which ensures that there will be no
    # repeated collection after the LogCollector's Pod restarts.
    logcollector-data-dir: dir
    

    参数说明如下:

    参数

    示例

    说明

    endpoint

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

    日志服务连接域名,即服务地址。
    登录日志服务控制台后,您可以在日志项目的详情页中查看连接域名。详细说明请参考服务入口

    region

    cn-beijing

    日志项目所在的地域 ID。详细说明请参考服务地址

    secret_id

    AK********

    火山引擎账号或 IAM 用户的 Access Key ID。
    您可以在火山引擎控制台密钥管理页面,获取 Access Key ID。

    secret_key

    TUdZ********

    火山引擎账号或 IAM 用户的 Secret Access Key。
    您可以在火山引擎控制台密钥管理页面,获取 Secret Access Key。

    label

    http_module

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

    namespace

    kube-system

    命名空间。
    只支持指定一个,且确保该命名空间已存在。

    logcollector-image

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

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

    logcollector-data-dir

    /var/lib/logcollector-data

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

3 安装 LogCollector DaemonSet

执行如下命令,安装 LogCollector DaemonSet。

cd logcollector-k8s
bash ./logcollector-k8s-custom-install.sh;

手动安装

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 文件中输入以下内容。
    根据实际情况,完成如下参数配置。

    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

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

    secret_id

    AK********

    火山引擎账号或 IAM 用户的 Access Key ID。
    您可以在火山引擎控制台密钥管理页面,获取 Access Key ID。

    secret_key

    TUdZ********

    火山引擎主账号或 IAM 用户的 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 创建 ConfigMap中设置的命名空间。

  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 创建 ConfigMap中设置的命名空间。

  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 创建 ConfigMap中设置的命名空间。

  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 创建 ConfigMap中设置的命名空间。

    image

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

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

    path

    /var/lib/logcollector-data

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

  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