我创建了一个容器,它基本上是一个包含配置文件的目录。这些配置文件将由包含应用程序可执行文件的另一个容器使用。两个容器部署在同一个pod中。
我已经创建了pv和pvc的第一个容器像-
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-pv
labels:
type: local
spec:
storageClassName: standard
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-pvc
labels:
type: local
spec:
storageClassName: standard
volumeName: app-pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
接下来,我将创建两个容器的部署,如-
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
labels:
app: app
spec:
selector:
matchLabels:
app: app
strategy:
type: Recreate
template:
metadata:
labels:
app: app
spec:
containers:
- name: lshome
image: <local_registry>/container1:latest
imagePullPolicy: Always
volumeMounts:
- name: container1-persistant-storage
mountPath: /home/app/config
- name: wildfly
image: <local_registry>/container2:latest
imagePullPolicy: Always
volumeMounts:
- name: container1-config
mountPath: /home/app/config
volumes:
- name: container1-persistant-storage
persistentVolumeClaim:
claimName: app-pvc
- name: container1-config
persistentVolumeClaim:
claimName: app-pvc
我想要的是容器1中/home/app/config目录下的数据可以在相同目录结构的容器2中使用。我也在container 2中创建了相同的目录结构。
当我尝试创建部署时,它会显示消息-无法连接或装载卷,然后无法创建部署。
2条答案
按热度按时间2nc8po8w1#
不要定义两个卷,删除container 1-config即可。就像下面。
xyhw6mcr2#
只是为了给你的问题增加更多的见解。挂载卷失败的原因是两个不同的容器lshome和wildfly试图挂载同一个可写存储。
当创建lshome容器时,它已经使用app-pvcclaimName请求声明并绑定了storage/PV,因此不允许其他容器wildfly请求另一个存储或挂载已经挂载的storage/pv,因为它已经与第一个容器绑定。
所以,你的问题的解决方案是:
1.只声明一次存储/PV,如下所示:
2.在所有容器的volumeMount中调用此PV(shared-storage),如下图所示:
我还建议您查看K8s中的**“Mounting configMaps as Volumes”**,作为您的方法的替代最佳实践。通过这种方式,您可以将所有应用配置文件作为configMaps对象存储在K8s中,然后将这些configMaps作为卷直接挂载到多容器Pod中,以便使这些应用配置文件可用于同一Pod中的其他容器。
参考网址:
https://www.golinuxcloud.com/mount-configmap-as-file-in-existing-directory/https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/