全部產品
Search
文件中心

Elastic Container Instance:採集Job任務的日誌

更新時間:Jul 06, 2024

由於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任務日誌。

說明

如果您使用了阿里雲Log ServiceSLS,通過配置環境變數的方式為Job掛載Volume,可以直接同步處理阿里雲Log Service。更多資訊,請參見通過環境變數方式採集日誌

操作步驟

下文以名為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