全部产品

Job类型任务如何采集日志

更新时间:2020-10-23 18:10:15

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

前提条件

说明

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

Pod采集日志

注意

在ECS模式下Job任务可以通过DeamonSet方式采集标准输出,但是在ECI模式下不支持DeamonSet。当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任务到虚拟节点

kubectl apply -f job.yaml -n fvt-eci
说明

部署虚拟节点详情请参见部署虚拟节点Chart。

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
kubectl apply -f log-collection.yaml -n fvt-eci