Kubernetes Pod-将Pod目录与本地目录同步

问题描述

我正在运行python pod。 这个python pod使用了不同的共享库。为了简化调试共享库,我也希望在主机上也有libs目录。 python依赖项位于/usr/local/lib/python3.8/site-packages/中,我想在主机上访问此目录以修改某些文件。

有可能吗?我已经尝试过使用emptyDirPV,但是它们始终会覆盖目录中已经存在的内容。

谢谢!

解决方法

这是设计使然。 Kubelet负责为您的容器准备支架。在安装时,它们是空的,并且kubelet没有理由在其中放入任何内容。

也就是说,有一些方法可以通过使用init容器来实现您期望的目标。在您的Pod中,您可以使用docker映像定义init容器,在某个路径(例如 / target )中将卷装入其中,但不要运行容器的常规内容,而应运行类似

cp -r /my/dir/* /target/ 

这将使用预期的内容启动您的目录,然后退出以允许进一步启动Pod 请看一下:overriding-directory

另一种选择是使用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"
---

查看完整示例here。参见:mountpathfiles-in-folder-overriding

您也可以按照@DavidMaze所说的那样,在非容器Python虚拟环境中调试您的设置,或者作为第二选择,在没有Kubernetes的Docker中调试映像。

,

您还可以考虑以下第三方工具,这些工具是专门为Kubernetes应用程序开发人员创建的,请牢记此功能(保持同步源文件和远程文件)。

  1. Skaffold的持续部署workflow-它负责使源文件和远程文件(安装Pod的目录)保持同步。
  2. 网真的卷访问权限feature

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...