采集Job任务的日志

由于ECI不支持DaemonSet,在ECI上运行的Job任务运行结束后,Pod会立即退出,因此可能会出现日志尚未完全采集的情况。建议您为Job挂载NAS文件系统来保存日志文件。本文介绍在ACK集群中使用ECI来运行Job任务时,如何采集Job任务的日志。

前提条件

背景信息

在ACK集群中,对于在标准节点的ECS上运行的Job任务,可以通过DaemonSet的方式来采集日志。但是对于在虚拟节点的ECI上运行的Job任务,由于ECI不支持DaemonSet,当Job任务运行结束后,Pod会立即退出,此时日志可能还未被采集完成。

针对上述场景,您可以采用以下方式来采集ECI上运行的Job任务的日志:

  1. 为Job挂载NAS文件系统,将输出的日志保存到NAS文件系统上。

  2. 将收集了Job任务日志的NAS文件系统挂载到另一个Pod上,获取NAS文件系统中存储的Job任务日志。

说明

如果您使用了阿里云日志服务SLS,通过配置环境变量的方式为Job挂载Volume,可以直接同步阿里云日志服务。更多信息,请参见通过环境变量方式采集日志

操作步骤

下文以名为vk的Namespace为例说明操作步骤,该Namespace已添加alibabacloud.com/eci=true的Label,部署在该Namespace下的Pod将被调度到ECI上运行。实际配置时请替换为您要使用的Namespace。

  1. 准备Job任务的YAML配置文件。

    vim 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:    # 挂载NAS文件系统用于存储日志
          - name: log-volume  
            nfs:
                server: 04edd48c7c-****.cn-hangzhou.nas.aliyuncs.com
                path: /
                readOnly: false
      backoffLimit: 4
  2. 部署Job。

    kubectl apply -f job.yaml -n vk
  3. 查看Pod状态,确认Job是否已正常运行。

    kubectl get pod -n vk

    预期返回示例如下:

    采集job日志.png

  4. 准备用于采集Job任务日志的Pod的配置文件。

    vim log-collection.yaml

    YAML文件内容示例如下:

    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:      # 挂载存储了Job任务日志的NAS文件系统
      - name: log-volume
        nfs:
          server: 04edd48c7c-****.cn-hangzhou.nas.aliyuncs.com
          path: /
          readOnly: false
  5. 部署Pod。

    kubectl apply -f log-collection.yaml -n vk
  6. 确认Pod运行结束,然后查看Job任务的日志文件。

    kubectl get pod -n vk
    kubectl logs log-collection -n vk

    预期返回示例如下:

    采集job日志-3.png