在 Docker 中,当将空卷安装到容器路径时,它会将原始内容从映像复制到已安装的卷。(如果您将一个空卷挂载到容器中存在文件或目录的目录中,这些文件或目录将被传播(复制)到该卷中。同样,如果您启动一个容器并指定一个尚不存在的卷,为您创建一个空卷。这是预填充另一个容器需要的数据的好方法。) 来自官方页面的 Docker Volume 概述
但是,我尝试在 Kubernetes 中执行类似的操作,安装的卷将覆盖安装路径。这是我的部署 yaml 文件的路径。
apiVersion: apps/v1
kind: Deployment
metadata:
......
spec:
containers:
- name: nginx
image: nginx:1.13
ports:
- containerPort: 80
volumeMounts:
- name: datavol
mountPath: /var
volumes:
- name: datavol
persistentVolumeClaim:
claimName: oscarv1
Run Code Online (Sandbox Code Playgroud)
就我而言,路径 /var 变空了。如何将原始数据保留在容器映像中的 /var 下?何时将卷安装到 Pod?
小智 7
添加一个 init 容器,该容器使用与您要在应用程序上安装卷之前复制文件相同的映像。将要在主应用程序上挂载的卷挂载到容器中的不同本地目录中,并对挂载的目录执行“cp -r”。现在,当同一图像安装此卷时,它将预先填充原始内容和新内容。
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
...
spec:
initContainers:
- name: init-ngix
image: nginx:1.13
command: ["/bin/sh", "-c", "cp -R /var/* /tmp/"]
volumeMounts:
- name: datavol
mountPath: /tmp
containers:
- name: nginx
image: nginx:1.13
ports:
- containerPort: 80
volumeMounts:
- name: datavol
mountPath: /var
volumes:
- name: datavol
persistentVolumeClaim:
claimName: oscarv1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |