После обновления приложения Springboot изображение не может быть извлечено - PullRequest
0 голосов
/ 16 мая 2018

Я использую две виртуальные машины, установленные с Centos 7. Host - профессиональная версия win10.

Я перешел по ссылке , чтобы сделать контейнер приложений с пружинной загрузкой управляемым kubernetes. Ссылка использует миникуб, но я использую два узла в качестве минимальной установки kubernetes. Один узел является главным (172.16.100.81), один узел - рабочим (172.16.100.96). Привет приложение, я следую за шагом, это работает. Краткое описание моей команды следующее:

docker build -t $USER/hello:0.0.1 .
kubectl run hello --image $USER/hello:0.0.1 --port 8080
kubectl expose deployment hello --type=NodePort

пока все хорошо. Я мог бы даже сделать его масштабом до реплики = 3.

Но теперь я изменяю приложение весенней загрузки, просто добавляю пару символов следующим образом:

package com.springdeveloper.k8s.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@SpringBootApplication
public class HelloApplication {

        public static void main(String[] args) {
                SpringApplication.run(HelloApplication.class, args);
        }

        @RestController
        class HelloController {
                @GetMapping("/hello")
                String hello() {
                        return "Hello Kubernauts!, are there image transfer?";
                }
        }


}

С этим изменением я также изменил Dockerfile, чтобы он не конфликтовал с предыдущей версией. Модифицированный Dockerfile выглядит следующим образом:

FROM registry.docker-cn.com/library/openjdk:8-alpine
VOLUME /tmp
ADD ./target/hello-0.0.1-SNAPSHOT.jar /hello2.jar
RUN sh -c 'touch /hello2.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","q/hello2.jar"]

оригинальный Dockerfile выглядит следующим образом:

FROM registry.docker-cn.com/library/openjdk:8-alpine
VOLUME /tmp
ADD ./target/hello-0.0.1-SNAPSHOT.jar /hello.jar
RUN sh -c 'touch /hello.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/hello.jar"]

Затем я делаю те же шаги, что и раньше:

docker build -t $USER/hello2:0.0.2 .
kubectl run hello2 --image $USER/hello2:0.0.2 --port 8081
kubectl expose deployment hello2 --type=NodePort

Но hello2 не может быть в состоянии готовности, в то время как hello находится в состоянии готовности. Я не мог видеть разницу между привет и привет2. Почему hello2 не может быть в состоянии готовности?

[root@master2 hello]# kubectl get pods
NAME                     READY     STATUS             RESTARTS   AGE
hello-7db856d974-sg9kh   1/1       Running            0          1h
hello2-5c9c6776d-zgvhs   0/1       ImagePullBackOff   0          51m

Затем я использую логи kubectl: он показывает:

1 Ответ

0 голосов
/ 16 мая 2018
  1. Вы добавляете банку к /hello2.jar, но ENTRYPOINT указывает на q/hello2.jar.

  2. Ваш порт теперь 8081, но по умолчанию Springs 8080, который вы правильно использовали в первой попытке.

Вы пытались запустить контейнер локально и заглянуть в журналы?

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