我正在尝试将Java容器作为Kubernetes中的一次性工作来运行。我正在使用的基本图像是gcr.io/distroless/java
。问题是有时程序完成后容器会永远运行。
这是Kubernetes作业配置:
apiVersion: batch/v1
kind: Job
metadata:
namespace: default
annotations:
cluster-autoscaler.kubernetes.io/safe-to-evict: false
spec:
template:
spec:
containers:
- name: myapp
image: gcr.io/my_company/image:test
imagePullPolicy: Always
resources:
limits:
memory: 3Gi
requests:
memory: 1Gi
restartPolicy: Never
terminationGracePeriodSeconds: 0
backoffLimit: 0
这是我的Java代码的示例:
package com.mypackage.prod;
import *some packages*;
public class Main {
/*Static resources*/
public static void main(String[] args) {
LOG.info("Starting");
/*
Doing some work and calling couple of functions!
*/
LOG.info("Done with my work. Hitting System exit");
System.exit(0);
}
}
我还尝试使用gcr.io/distroless/java:debug
,并通过docker attach
检查了日志。程序完成后,我看到了最后一个日志语句,但Pod&Job仍然存在。作业处于运行状态时,Pod保持活动状态。
在具有以下主版本的Google Kubernetes Engine上运行:1.12.7-gke.10
然后我必须使用kubectl delete jobs $job-name --grace-period=0 --force