如何创建创建的Pod运行一个应用程序(命令和args),同时具有引用它的部署和服务?

问题描述 投票:-1回答:1

Context技术:Java,Docker工具箱,Minikube。我有一个要运行的Java Web应用程序(已经打包为web-tool.jar),同时具有kubernetes的所有优点。为了指示kubernetes在本地拍摄图像,我使用了图像标签:

docker build -t despot/web-tool:1.0 .

然后通过以下方式将其用于minikube:

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。如何创建pod,运行Java应用程序,并同时具有引用它的部署和服务?

1.1。我可以创建一个部署,以便在创建Pod时传播命令和参数吗? (最适合我,因为我确保在创建Pod之前先创建部署和服务)1.2。如果1.1。不可行,我是否可以将kubectl带有命令和参数的某些pod配置应用于已创建的Deployment / pod / service? (更糟糕的解决方案是其他手动步骤)1.3。如果是1.2。不可行,是否可以创建部署/服务并将其附加到已经运行的pod(以“ kubectl run ... java -jar app.jar reg”开头)?

我尝试过的是:a)创建一个部署(自动启动Pod)并公开(创建服务):

kubectl create deployment reggo --image=despot/web-tool:1.0

这样,将创建一个具有CrashLoopBackoff状态的pod,因为它尚未运行前台进程。

b)尝试以下操作,希望部署接受将传播到Pod创建(1.1。)的命令和参数:

kubectl create deployment reggo --image=despot/web-tool:1.0 -- java -jar app.jar reg

pod的结果相同,因为部署不接受命令和参数。

c)尝试在部署创建Pod之后应用带有命令和参数的Pod配置,因此我从a)运行了命令,找到了(kubectl get pods)和pod的ID(reggo-858ccdcddd-mswzs),并然后我执行:

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“ reggo-858ccdcddd-mswzs”无效:* spec.containers [0] .image:必填值* spec.containers:禁止:pod更新不能添加或删除容器

这让我认为我无法通过应用命令/参数配置来执行命令。

java docker kubernetes minikube docker-toolbox
1个回答
0
投票

您可以在Docker文件本身中将java -jar命令设为ENTRYPOINT,它告诉Docker运行Java应用程序。

FROM openjdk:11-jre
ADD target/web-tool-1.0-SNAPSHOT.jar app.jar
EXPOSE 1111
EXPOSE 2222
ENTRYPOINT ["java", "-jar", "app.jar", "reg"]
© www.soinside.com 2019 - 2024. All rights reserved.