发布于2021-09-19 22:55 阅读(1005) 评论(0) 点赞(20) 收藏(3)
上下文:
技术: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)
该泊坞窗文件是:
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 配置应用到已经创建的部署/pod/服务吗?(更糟糕的解决方案是额外的手动步骤)
1.3。如果 1.2. 不可行,是否可以创建部署/服务并将其附加到已经运行的 pod(以“kubectl run ... java -jar app.jar reg”开头)?
我尝试的是:
a)创建一个部署(自动启动一个 pod)并公开(创建服务):
kubectl create deployment reggo --image=despot/web-tool:1.0
有了这个,一个 pod 被创建为一个 CrashLoopBackoff 状态,因为它没有一个前台进程正在运行。
b) 尝试以下操作,希望部署接受将传播到 pod 创建 (1.1.) 的命令和参数:
kubectl create deployment reggo --image=despot/web-tool:1.0 -- java -jar app.jar reg
pod 的相同结果,因为部署不接受命令和参数。
c) 尝试在部署创建 pod 后使用命令和 args 应用 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:
required value * spec.containers : Forbidden: pod 更新不能添加或删除容器
这让我认为我无法通过应用命令/参数配置来执行命令。
解决方案(使用Arghya 答案):
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
您可以使用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"]
或者,可以通过kubernetes yaml 中的command
和args
部分实现相同的功能
containers:
- name: myapp
image: myregistry.azurecr.io/myapp:0.1.7
command: ["java"]
args: ["-jar", "app.jar", "reg"]
现在来到Forbidden: pod updates may not add or remove containers
错误点, 其发生的原因是因为您正在尝试修改containers
不允许的现有 pod 对象部分。您可以获取整个部署 yaml 并在编辑器中打开并编辑它以添加命令部分,然后删除现有部署,最后将修改后的部署 yaml 应用到集群,而不是这样做。
kubectl get deploy reggo -o yaml --export > deployment.yaml
kubectl delete deploy reggo
kubectl apply -f deployment.yaml
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/290007/99131f3934e98b8a09ff/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!