Контейнер Docker не завершает работу после завершения программы - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь запустить контейнер 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 остается в активном состоянии, а Job в рабочем состоянии.

Запуск в Google Kubernetes Engine с мастер-версией: 1.12.7-gke.10

Затем я должен вручную очистить такие задания и модули, используя kubectl delete jobs $job-name --grace-period=0 --force

...