Kubernetes 如何将jar文件装载到tomcat容器
我的项目中有一个文件夹,其中包含1个属性文件和1个jar文件(db驱动程序)文件 我需要将这两个文件复制到pod上的/usr/local/tomcat/lib目录。我不知道如何在kubernetes yaml文件中实现这一点。下面是我的yaml文件,我试图使用configMap实现这一点,但pod创建失败,错误为“configMap引用不存在的配置键:app.properties” TargetKubernetes 如何将jar文件装载到tomcat容器,kubernetes,Kubernetes,我的项目中有一个文件夹,其中包含1个属性文件和1个jar文件(db驱动程序)文件 我需要将这两个文件复制到pod上的/usr/local/tomcat/lib目录。我不知道如何在kubernetes yaml文件中实现这一点。下面是我的yaml文件,我试图使用configMap实现这一点,但pod创建失败,错误为“configMap引用不存在的配置键:app.properties” Target/usr/local/tomcat/lib已经有了其他jar文件,所以我尝试使用configMap不覆
/usr/local/tomcat/lib
已经有了其他jar文件,所以我尝试使用configMap不覆盖整个目录,只添加2个特定于我的应用程序的文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcatdeployment
labels:
app: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: appvolume
mountPath: /usr/local/data
- name: config
mountPath: /usr/local/tomcat/lib
subPath: ./configuration
ports:
- name: http
containerPort: 8080
protocol: TCP
volumes:
- name: appvolume
- name: config
configMap:
name: config-map
items:
- key: app.properties
path: app.properties
---
apiVersion: v1
kind: ConfigMap
metadata:
name: config-map
data:
key: app.properties
当前目录结构
.
├── configuration
│ ├── app.properties
│ └── mysql-connector-java-5.1.21.jar
├── deployment.yaml
└── service.yaml
请分享您对如何实现这一目标的宝贵反馈
关于。出现此错误是正常的,因为在此卷声明中,您提到了key:app.properties,否则在configmap key:app.properties中,这里的key是key,值是app.properties,因此您必须在卷声明中更改:
volumes:
- name: appvolume
- name: config
configMap:
name: config-map
items:
- key: app.properties
path: app.properties
致:
有关更多信息,请参见此处:请尝试以下操作:
kubectl创建configmap-config-map-from file=app.properties-from file=mysql-connector-java-5.1.21.jar
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcatdeployment
labels:
app: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: config
mountPath: /usr/local/tomcat/lib/conf
ports:
- name: http
containerPort: 8080
protocol: TCP
volumes:
- name: config
configMap:
name: config-map
或
谢谢@Semah,在这次更改之后,我没有看到以前的错误。但看起来它们替换了/usr/local/tomcat/lib中的所有内容,并且只保留app.properties文件。我想保持现有文件的图像,因为它是,只是添加这个新的文件到该文件夹。我的配置中是否缺少某些内容?是的,我认为此行会导致覆盖子路径:./configuration,您应该将其替换为子路径:./configuration更改子路径:configuration后,它也不起作用。我已经添加了我的目录结构,所以您可以看到我想要将所有文件从配置文件夹复制到容器中的/usr/local/tomcat/lib文件夹。此外,该位置上已经存在默认的tomcat JAR,因此它不应该删除这些JAR。感谢所有帮助:)更改子路径:配置时会产生什么结果?它会从该目录中删除所有文件并添加app.properties文件(但文本为app.properties)。我已添加我的项目文件夹结构以供参考。因此,我从根目录执行kubectl create-f deployment.yaml。我正在尝试将这两个文件从配置复制到docker路径/usr/local/tomcat/lib,而不会过度写入docker中该路径上的任何现有文件。在配置映射中,我们首先从定义卷部分的位置定义配置映射的数据。对于您的示例,您将从哪里获得这个jar文件,它将如何在配置映射部分中出现?
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcatdeployment
labels:
app: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: config
mountPath: /usr/local/tomcat/lib/conf
ports:
- name: http
containerPort: 8080
protocol: TCP
volumes:
- name: config
configMap:
name: config-map
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcatdeployment
labels:
app: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat3
image: tomcat:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: config
mountPath: /usr/local/tomcat/lib/app.properties
subPath: app.properties
- name: config
mountPath: /usr/local/tomcat/lib/mysql-connector-java-5.1.21.jar
subPath: mysql-connector-java-5.1.21.jar
ports:
- name: http
containerPort: 8080
protocol: TCP
volumes:
- name: config
configMap:
name: config-map
items:
- key: app.properties
path: app.properties
- key: mysql-connector-java-5.1.21.jar
path: mysql-connector-java-5.1.21.jar