Job类型任务如何采集日志

本文将为您介绍如何针对Job类型任务场景采集日志到日志系统。

前提条件

说明

如果您使用了阿里云日志服务,Job任务挂载volume收集日志通过配置环境变量,可以直接同步阿里云日志服务。详情请参见ECI中日志采集的自定义配置

操作步骤

重要

在ECS模式下,Job任务可以通过DaemonSet方式采集标准输出,但是在ECI模式下不支持DaemonSet。当Job任务结束后,Pod会立即退出,此时日志可能还未被完全收集,针对这种情况,我们可以采用如下方式解决:

Job类任务挂载NAS盘,把输出的日志存储在NAS盘,再通过另一个同样挂载NAS盘的Pod来采集Job任务标准输出到日志系统中。

  1. 通过kubectl客户端创建job.yaml

    一个计算π值Job任务:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        spec:
          containers:
          - name: pi
            image: resouer/ubuntu-bc 
            command: ["sh", "-c", "echo 'scale=1000; 4*a(1)' | bc -l > /eci/a.log 2>&1"] #运行输出结果重定向到指定文件
            volumeMounts:
            - name: log-volume
              mountPath: /eci
              readOnly: false
          restartPolicy: Never
          volumes:
          - name: log-volume
            nfs:
                path: /eci
                server: 04edd48c7c-****.cn-hangzhou.nas.aliyuncs.com
                readOnly: false
      backoffLimit: 4
  2. 部署一个Job任务到虚拟节点。

    说明

    关于如何部署虚拟节点请参见通过虚拟节点将Pod调度到ECI上运行

    kubectl apply -f job.yaml -n fvt-eci
  3. 查看Pod状态。

    kubectl get pod -n fvt-eci
  4. 通过kubectl客户端创建log-collection.yaml文件,并拷贝以下内容到该文件。然后执行指令创建一个Pod,挂载NAS盘用来采集Job任务输出日志。

    apiVersion: v1
    kind: Pod
    metadata:
      name: log-collection
    spec:
      containers:
      - image: nginx:latest
        name: log-collection
        command: ['/bin/sh', '-c', 'echo &(cat /eci/a.log)'] #查看Job日志文件
        volumeMounts:
        - mountPath: /eci
          name: log-volume
      restartPolicy: Never
      volumes:
      - name: log-volume
        nfs:
          server: 04edd48c7c-****.cn-hangzhou.nas.aliyuncs.com
          path: /eci
          readOnly: false