我运行了一个python pod。这个python pod使用不同的共享库。为了更容易调试共享库,我希望在主机上也有库目录。python依赖项位于/usr/local/lib/python3.8/site-packages/
中,我想访问主机上的这个目录来修改一些文件。
这可能吗?如果可能,怎么做?我尝试过使用emptyDir
和PV
,但它们总是覆盖目录中已经存在的内容。
谢谢!
这是经过设计的。Kubelet负责为您的容器准备装载。在安装时,它们是空的,库贝莱没有理由在其中放置任何内容。
也就是说,有一些方法可以通过使用init容器来达到您所期望的效果。在您的pod中,您使用docker映像定义init容器,在其中的某个路径(即/target(安装卷,但不是运行容器的常规内容,而是运行类似的东西
cp -r /my/dir/* /target/
它将用预期的内容启动您的目录并退出,以便进一步启动pod请看一下:正在覆盖目录。
另一种选择是使用subPath。子路径引用由用户而非系统控制的文件或目录。举一个关于如何将单个文件装载到现有目录的例子:
---
volumeMounts:
- name: "config"
mountPath: "/<existing folder>/<file1>"
subPath: "<file1>"
- name: "config"
mountPath: "/<existing folder>/<file2>"
subPath: "<file2>"
restartPolicy: Always
volumes:
- name: "config"
configMap:
name: "config"
---
查看此处的完整示例。请参阅:mountpath,文件夹中的文件覆盖。
如果可以的话,你也可以像@DavidMaze所说的那样,在非容器Python虚拟环境中调试你的设置,或者作为在没有Kubernetes的情况下在Docker中调试映像的第二选择。
您还可以考虑以下第三方工具,这些工具是专门为Kubernetes应用程序开发人员创建的,并牢记此功能(保持源文件和远程文件同步(。
- Skafold的持续部署工作流程-它负责保持源文件和远程文件(Pod安装的目录(的同步
- Telepresence的音量访问功能