我在一个吊舱中有2个容器。 1. Webapp 2. Nginx 我想与nginx容器共享Webapp容器/ var / www / webapp /中的数据。 / var / www / html
/var/www/webapp ( folder structure )
│ index.php
│
│
└───folder1
│ │ service1.php
│ │
│ └───subfolder1
│ │ app.php
│
└───folder2
│ service2.php
该文件夹已正确安装,但所有文件均丢失。
apiVersion: apps/v1
kind: Deployment
spec:
volumes:
- name: webapp-data
persistentVolumeClaim:
claimName: webapp-data
containers:
- name: webapp
image: webapp
imagePullPolicy: Always
volumeMounts:
- name: webapp-data
mountPath: /var/www/webapp/
- name: nginx
imagePullPolicy: Always
image: nginx
volumeMounts:
- name: webapp-data
mountPath: /var/www/html/
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: webapp-data
spec:
storageClassName: local
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
在docker下安装卷时,容器内的所有文件夹和文件均可用,但在k8s中不可用。
答案 0 :(得分:2)
Kubernetes不会自动使用图像内容填充空白卷。 (这与docker run
不同。)您的应用程序需要弄清楚如何设置共享数据目录本身(如果为空)。
对于标准数据库容器,这并不重要,因为它们通常以某种initdb
类型调用开始,这将创建所需的文件结构。同样,如果您将持久卷用作缓存或上载空间,也没关系。
对于用例,您要描述一个容器只需要从另一个容器获得文件副本的位置,实际上并不需要持久卷。我将使用可以在两个容器之间共享的emptyDir volume,然后使用init container将数据复制到卷中。不要在应用程序内容上挂载任何东西。
这大概看起来像(实际上使用一个Deployment):
apiVersion: v1
kind: Pod
metadata:
name: ...
spec:
volumes:
- name: webapp-data
emptyDir: {}
initContainers:
- name: populate
image: webapp
volumeMounts:
- name: webapp-data
mountPath: /data
command: [cp, -a, /var/www/webapp, /data]
containers:
- name: webapp
image: webapp
# no volumeMounts; default command
- name: nginx
image: nginx
volumeMounts:
- name: webapp-data
mountPath: /var/www/html
使用此设置,也没有严格要求两个容器在同一个容器中运行;您可能有一个部署运行后端服务,而第二个部署运行nginx(通过从后端映像复制数据来启动)。
(Kubernetes文档中Configure Pod Initialization中的示例非常相似,但是从外部站点获取nginx内容。)
答案 1 :(得分:1)
可能只是一个错误,但是您在其中一个容器中引用了名称为blinger-main
的卷。使用这个:
apiVersion: apps/v1
kind: Deployment
spec:
volumes:
- name: webapp-data
persistentVolumeClaim:
claimName: webapp-data
containers:
- name: webapp
image: webapp
imagePullPolicy: Always
volumeMounts:
- name: webapp-data
mountPath: /var/www/webapp/
- name: nginx
imagePullPolicy: Always
image: nginx
volumeMounts:
- name: webapp-data
mountPath: /var/www/html/