采集Job任务的日志

更新时间:
复制 MD 格式

由于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,可以直接同步阿里云日志服务。更多信息,请参见通过环境变量方式采集日志

操作步骤

下文以名为vkNamespace为例说明操作步骤,该Namespace已添加alibabacloud.com/eci=trueLabel,部署在该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

    预期返回示例如下:

    kubectl get pod -n vk
    NAME        READY   STATUS      RESTARTS   AGE
    pi-tfn2d    0/1     Completed   0          3m22s
  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

    预期返回示例如下:

    $ kubectl get pod -n vk
    NAME              READY   STATUS      RESTARTS   AGE
    log-collection    0/1     Completed   0          89s
    pi-tfn2d          0/1     Completed   0          47m
    $ kubectl logs log-collection -n vk
    3.14159265358979323846264338327950288419716939937510582097494459230\
    81640628620899862803482534211706798214808651328230664709384460955058\
    22317253594081284811174502841027019385211055596446229489549303819644\
    28810975665933446128475648233786783165271201909145648566923460348610\
    45432664821339360726024914127372458700660631558817488152092096282925\
    40917153643678925903600113305305488204665213841469519415116094330572\
    70365759591953092186117381932611793105118548074462379962749567351885\
    75272489122793818301194912983367336244065664308602139494639522473719\
    07021798609437027705392171762931767523846748184676694051320005681271\
    45263560827785771342757789609173637178721468440901224953430146549585\
    37105079227968925892354201995611212902196086403441815981362977477130\
    99605187072113499999983729780499510597317328160963185950244594553469\
    08302642522308253344685035261931188171010003137838752886587533208381\
    42061717766914730359825349042875546873115956286388235378759375195778\
    18577805321712268066130019278766111959092164201988