采集Job任務(wù)的日志
由于ECI不支持DaemonSet,在ECI上運行的Job任務(wù)運行結(jié)束后,Pod會立即退出,因此可能會出現(xiàn)日志尚未完全采集的情況。建議您為Job掛載NAS文件系統(tǒng)來保存日志文件。本文介紹在ACK集群中使用ECI來運行Job任務(wù)時,如何采集Job任務(wù)的日志。
前提條件
已創(chuàng)建一個ACK集群并在該集群上部署了虛擬節(jié)點。具體操作,請參見創(chuàng)建Kubernetes托管版集群和通過虛擬節(jié)點將Pod調(diào)度到ECI上運行。
已為Namespace添加
alibabacloud.com/eci=true
的Label。通過配置Namespace Label的方式可以將Pod調(diào)度到ECI上運行。更多信息,請參見調(diào)度Pod到x86架構(gòu)的虛擬節(jié)點。
已創(chuàng)建NAS文件系統(tǒng),并已添加掛載點。具體操作,請參見管理文件系統(tǒng)和管理掛載點。
背景信息
在ACK集群中,對于在標準節(jié)點的ECS上運行的Job任務(wù),可以通過DaemonSet的方式來采集日志。但是對于在虛擬節(jié)點的ECI上運行的Job任務(wù),由于ECI不支持DaemonSet,當Job任務(wù)運行結(jié)束后,Pod會立即退出,此時日志可能還未被采集完成。
針對上述場景,您可以采用以下方式來采集ECI上運行的Job任務(wù)的日志:
為Job掛載NAS文件系統(tǒng),將輸出的日志保存到NAS文件系統(tǒng)上。
將收集了Job任務(wù)日志的NAS文件系統(tǒng)掛載到另一個Pod上,獲取NAS文件系統(tǒng)中存儲的Job任務(wù)日志。
如果您使用了阿里云日志服務(wù)SLS,通過配置環(huán)境變量的方式為Job掛載Volume,可以直接同步阿里云日志服務(wù)。更多信息,請參見通過環(huán)境變量方式采集日志。
操作步驟
下文以名為vk的Namespace為例說明操作步驟,該Namespace已添加alibabacloud.com/eci=true
的Label,部署在該Namespace下的Pod將被調(diào)度到ECI上運行。實際配置時請?zhí)鎿Q為您要使用的Namespace。
準備Job任務(wù)的YAML配置文件。
vim job.yaml
以下為一個計算π值的Job任務(wù)配置示例:
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"] # 輸出結(jié)果重定向到指定文件 volumeMounts: - name: log-volume mountPath: /eci readOnly: false restartPolicy: Never volumes: # 掛載NAS文件系統(tǒng)用于存儲日志 - name: log-volume nfs: server: 04edd48c7c-****.cn-hangzhou.nas.aliyuncs.com path: / readOnly: false backoffLimit: 4
部署Job。
kubectl apply -f job.yaml -n vk
查看Pod狀態(tài),確認Job是否已正常運行。
kubectl get pod -n vk
預(yù)期返回示例如下:
準備用于采集Job任務(wù)日志的Pod的配置文件。
vim log-collection.yaml
YAML文件內(nèi)容示例如下:
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任務(wù)的日志文件 volumeMounts: - mountPath: /eci name: log-volume restartPolicy: Never volumes: # 掛載存儲了Job任務(wù)日志的NAS文件系統(tǒng) - name: log-volume nfs: server: 04edd48c7c-****.cn-hangzhou.nas.aliyuncs.com path: / readOnly: false
部署Pod。
kubectl apply -f log-collection.yaml -n vk
確認Pod運行結(jié)束,然后查看Job任務(wù)的日志文件。
kubectl get pod -n vk kubectl logs log-collection -n vk
預(yù)期返回示例如下: