Контейнер Docker не завершает работу после завершения программы
Я пытаюсь запустить контейнер 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
и проверил логи через докер attach
, После завершения программы я вижу последний оператор журнала, но Pod & Job все еще существует. Pod остается в активном состоянии, а Job в рабочем состоянии.
Запуск на Google Kubernetes Engine с мастер-версией: 1.12.7-gke.10
Я должен вручную очистить такие работы и стручки, используя kubectl delete jobs $job-name --grace-period=0 --force