Контекст :
Tech : Java, Docker Панель инструментов, Minikube.
У меня есть java веб-приложение (уже упакованное как веб- tool.jar), который я хочу запустить, имея при этом все преимущества kubernetes.
Для того, чтобы kubernetes поручил локально получать изображение Я использую тег image:
docker build -t despot/web-tool:1.0 .
и затем сделать его доступным для мини-куба:
docker save despot/web-tool:1.0 | (eval $(minikube docker-env) && docker load)
Файл docker :
FROM openjdk:11-jre
ADD target/web-tool-1.0-SNAPSHOT.jar app.jar
EXPOSE 1111
EXPOSE 2222
1. Как я могу создать модуль, запустить приложение java и в то же время иметь ссылку на развертывание и службу?
1.1. Могу ли я создать развертывание, которое будет распространять команду и аргументы при создании модуля? (лучше для меня, поскольку я гарантирую создание развертывания и службы до создания модуля)
1.2. Если 1.1. не выполнимо, можно ли kubectl применить некоторую конфигурацию pod с помощью команды и аргументов к уже созданному развертыванию / pod / service? (худшее решение как дополнительные ручные шаги)
1.3. Если 1.2. невозможно, возможно ли создать развертывание / службу и подключить ее к уже запущенному модулю (который был запущен с помощью "kubectl run ... java -jar app.jar reg")?
Я попробовал :
a) Создать развертывание (которое автоматически запускает модуль) и открыть (служба создана):
kubectl create deployment reggo --image=despot/web-tool:1.0
С Таким образом, модуль создается с состоянием CrashLoopBackoff, поскольку у него еще не запущен процесс переднего плана.
b) Попробовал следующее в надежде на то, что развертывание примет команду и аргументы, которые будут распространяться на создание модуля (1.1.):
kubectl create deployment reggo --image=despot/web-tool:1.0 -- java -jar app.jar reg
Тот же результат работы модуля, поскольку развертывание не принимает команду и аргументы.
c) Попытка применения конфигурации модуля с командой и аргументами после развертывания создала модуль, поэтому я запустил команду из a), нашел идентификатор (reg go -858ccd cddd -mswzs) модуля с (kubectl get pods) и затем я выполнил:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: reggo-858ccdcddd-mswzs
spec:
containers:
- name: reggo-858ccdcddd-mswzs
command: ["java"]
args: ["-jar", "app.jar", "reg"]
EOF
, но я получил:
Предупреждение: приложение kubectl apply должно использоваться на ресурсе созданный kubectl create --save-config или kubectl apply Модуль Pod
"reg go -858ccd cddd -mswzs" недействителен:
* spe c .containers [0] .image: Обязательное значение
* spe c .containers: Запрещено: обновления модуля не могут добавлять или удалять контейнеры
, что позволяет мне думать, что я не могу выполнить команду, применив команду конфигурация команды / args.
Решение (с использованием Arghya answer ) :
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: reggo
spec:
selector:
matchLabels:
app: reggo-label
template:
metadata:
labels:
app: reggo-label
spec:
containers:
- name: reggo
image: "despot/web-tool:1.0"
command: ["java"]
args: ["-jar", "app.jar", "reg"]
ports:
- containerPort: 1111
EOF
и выполнение:
kubectl expose deployment reggo --type=NodePort --port=1111