Я использую две виртуальные машины, установленные с 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: он показывает: