如何在 k8s 部署中将文件挂载到同一子路径?
How can I mount files in the same sub path in k8s deployment?
我现在在我的部署中定义了这些卷安装,
volumeMounts:
- name: website-storage
mountPath: /app/upload
readOnly: false
subPath: foo/upload
- name: website-storage
mountPath: /app/html
readOnly: true
subPath: foo/html/html
现在我想从我的 PVC 安装另一条路径到 /app/html/website-content
,这就是我尝试的,
volumeMounts:
- name: website-storage
mountPath: /app/upload
readOnly: false
subPath: foo/upload
- name: website-storage
mountPath: /app/html
readOnly: true
subPath: foo/html/html
- name: website-storage
mountPath: /app/html/website-content
readOnly: true
subPath: foo/website-content
这不起作用,并且在安装过程中出错。是否有可能做到这一点?我必须在安装之前明确创建 website-content
文件夹吗?提前致谢!
在我看来 app/html 已经挂载并且是只读的,最好使用不同的路径,
第 2 您需要与更多 pods 共享音量吗?
您不能将一个卷装载到另一个卷中。相反,您可以将它安装到不同的位置并在容器启动期间创建指向该位置的符号链接。
问题的原因是在 pod 初始化期间尝试在 /app/html
位置创建目录 website-content
这将导致错误,因为 /app/html
是只读安装的.
您不能在只读系统中创建文件夹,这意味着您无法挂载卷,因为文件夹不存在,但如果已经创建了文件夹,则可以挂载卷。
因此,您只需在将卷附加到容器之前在卷的 foo/html/html
位置创建一个目录 website-content
。然后,因为它将被安装到 /app/html
位置,所以会有目录 /app/html/website-content
.
例如,您可以为此使用 init container。将此代码添加到您的部署文件中:
initContainers:
- name: init-container
image: busybox
volumeMounts:
- name: website-storage
mountPath: /my-storage
readOnly: false
command: ['sh', '-c', 'mkdir -p /my-storage/foo/html/html/website-content']
当 pod 为 运行 时,您使用 kubectl describe pod {pod-name}
:
检查 pod 上的挂载点
Mounts:
/app/html from website-storage (ro,path="foo/html/html")
/app/html/website-content from website-storage (ro,path="foo/website-content")
/app/upload from website-storage (rw,path="foo/upload")
我现在在我的部署中定义了这些卷安装,
volumeMounts:
- name: website-storage
mountPath: /app/upload
readOnly: false
subPath: foo/upload
- name: website-storage
mountPath: /app/html
readOnly: true
subPath: foo/html/html
现在我想从我的 PVC 安装另一条路径到 /app/html/website-content
,这就是我尝试的,
volumeMounts:
- name: website-storage
mountPath: /app/upload
readOnly: false
subPath: foo/upload
- name: website-storage
mountPath: /app/html
readOnly: true
subPath: foo/html/html
- name: website-storage
mountPath: /app/html/website-content
readOnly: true
subPath: foo/website-content
这不起作用,并且在安装过程中出错。是否有可能做到这一点?我必须在安装之前明确创建 website-content
文件夹吗?提前致谢!
在我看来 app/html 已经挂载并且是只读的,最好使用不同的路径,
第 2 您需要与更多 pods 共享音量吗?
您不能将一个卷装载到另一个卷中。相反,您可以将它安装到不同的位置并在容器启动期间创建指向该位置的符号链接。
问题的原因是在 pod 初始化期间尝试在 /app/html
位置创建目录 website-content
这将导致错误,因为 /app/html
是只读安装的.
您不能在只读系统中创建文件夹,这意味着您无法挂载卷,因为文件夹不存在,但如果已经创建了文件夹,则可以挂载卷。
因此,您只需在将卷附加到容器之前在卷的 foo/html/html
位置创建一个目录 website-content
。然后,因为它将被安装到 /app/html
位置,所以会有目录 /app/html/website-content
.
例如,您可以为此使用 init container。将此代码添加到您的部署文件中:
initContainers:
- name: init-container
image: busybox
volumeMounts:
- name: website-storage
mountPath: /my-storage
readOnly: false
command: ['sh', '-c', 'mkdir -p /my-storage/foo/html/html/website-content']
当 pod 为 运行 时,您使用 kubectl describe pod {pod-name}
:
Mounts: /app/html from website-storage (ro,path="foo/html/html") /app/html/website-content from website-storage (ro,path="foo/website-content") /app/upload from website-storage (rw,path="foo/upload")