Kubernetes не может развернуть простой образ из Docker-хаба через Github - PullRequest
0 голосов
/ 07 апреля 2019

Я действительно новичок в такого рода вещах, новичок в Kubernetes и Docker, но уже имею некоторый опыт работы с Java.

Я попытался использовать Docker Hub, подключив его к GitHub.

На моем Git-хабе есть только 2 кода:

  1. Dockerfile
  2. Простой привет код Java.

Каждый раз, когда я запускаю его в Kubernetes и проверяю его с помощью kubectl get pods, я всегда получаю CrashLoopBackOff.

Я не понимаю, в чем проблема, я уже проверяю код и пытаюсь запустить его на Docker, и он работает, он выводит привет мир. Но не в Куберне.

Это код в Dockerfile

FROM openjdk:8
COPY helloworld.java .
RUN javac helloworld.java
ENTRYPOINT ["java", "helloworld"]

Это код на простом helloworld Java

public class helloworld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Что я ожидал, так это то, что когда я запускаю это на Kubernetes, я надеюсь, что оно говорит, что оно готово, и я могу развернуть его на IP и показать простой привет мир.

Ответы [ 3 ]

2 голосов
/ 07 апреля 2019

Предполагая некоторые вещи тоже.Если предположить, что образ работает нормально, и единственная проблема заключается в том, что докер-контейнер закрывается, когда нет запущенных процессов, вам нужно лишь принудительно запустить процесс в течение определенного времени.

Итак, вы можете сделать:

kubectl run hello-world --image YOUR-IMAGE sleep 100

Это создаст deployment hello-world.Модуль hello-world-xxxxxx-xxxx будет работать в течение 100 секунд, затем он умрет, а новый контейнер будет создан еще на 100 секунд и т. Д.

Когда вы получите подтверждение, вы выполните:

kubectl get po

Скопируйте имя модуля и получите логи:

kubectl logs YOUR-POD-NAME

И вы должны увидеть привет мир.

2 голосов
/ 07 апреля 2019

Поскольку вы не указали, как вы его выполняли, я предполагаю, что вы используете kubectl run (по умолчанию создает развертывание) или манифест, определяющий развертывание. Если это так, то ожидается CrashLoopBackOff, поскольку развертывания предназначены для длительных процессов. Ваш Java-код не является долгосрочным. Он печатает что-то, а затем завершает работу, то есть не имеет бесконечного цикла там.

Так что либо выполните System.out.println в цикле (с промежуточным сном?), Либо используйте команду запуска или тип рабочей нагрузки (например, jobs ), который предназначен для однократного выполнения.

Кстати, даже при развертывании вы все равно сможете использовать kubectl logs , чтобы увидеть результаты первого выполнения.

0 голосов
/ 07 апреля 2019

Необходимо указать местоположение для команд копирования, запуска и входа.Перед именем файла укажите путь, скажем

COPY helloworld.java /helloworld.java RUN javac /helloworld.java ENTRYPOINT ["java", "/ helloworld]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...