由于ECI不支持DaemonSet,在ECI上运行的Job任务运行结束后,Pod会立即退出,因此可能会出现日志尚未完全采集的情况。建议您为Job挂载NAS文件系统来保存日志文件。本文介绍在ACK集群中使用ECI来运行Job任务时,如何采集Job任务的日志。
前提条件
-
已创建一个ACK集群并在该集群上部署了虚拟节点。具体操作,请参见创建ACK托管集群和将Pod调度到ECI上运行。
-
已为Namespace添加
alibabacloud.com/eci=true的Label。通过配置Namespace Label的方式可以将Pod调度到ECI上运行。更多信息,请参见调度Pod到x86架构的虚拟节点。
背景信息
在ACK集群中,对于在标准节点的ECS上运行的Job任务,可以通过DaemonSet的方式来采集日志。但是对于在虚拟节点的ECI上运行的Job任务,由于ECI不支持DaemonSet,当Job任务运行结束后,Pod会立即退出,此时日志可能还未被采集完成。
针对上述场景,您可以采用以下方式来采集ECI上运行的Job任务的日志:
-
为Job挂载NAS文件系统,将输出的日志保存到NAS文件系统上。
-
将收集了Job任务日志的NAS文件系统挂载到另一个Pod上,获取NAS文件系统中存储的Job任务日志。
如果您使用了阿里云日志服务SLS,通过配置环境变量的方式为Job挂载Volume,可以直接同步阿里云日志服务。更多信息,请参见通过环境变量方式采集日志。
操作步骤
下文以名为vk的Namespace为例说明操作步骤,该Namespace已添加alibabacloud.com/eci=true的Label,部署在该Namespace下的Pod将被调度到ECI上运行。实际配置时请替换为您要使用的Namespace。
-
准备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 -
部署Job。
kubectl apply -f job.yaml -n vk -
查看Pod状态,确认Job是否已正常运行。
kubectl get pod -n vk预期返回示例如下:
kubectl get pod -n vk NAME READY STATUS RESTARTS AGE pi-tfn2d 0/1 Completed 0 3m22s -
准备用于采集Job任务日志的Pod的配置文件。
vim log-collection.yamlYAML文件内容示例如下:
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 -
部署Pod。
kubectl apply -f log-collection.yaml -n vk -
确认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