在构build和/或在GKE上运行Docker映像之前预先填充GCE持久性磁盘

我想构build一个Docker容器,然后从GCE永久磁盘(PD)挂载一些目录后,在GKE中运行它。 例如,我希望/etc/<application>/的应用程序的(读写)configuration文件的存活时间长于它的pod(可能随时会重新启动)。

常规的构build将默认configuration文件放入/etc/<application>/ ,并且必须以某种方式将这些文件从镜像的临时磁盘“复制”到PD中,以便应用程序可以在预期的环境中启动。

有没有最好的做法,使这种情况发生? 例如,我是否也必须在我的Dockerfile安装PD,或者我可以以某种方式请求在部署期间首次由虚拟机实例挂载时,与另一个目录/卷/磁盘中的文件“同步”PD?

显而易见的答案是创build后立即填充每个持久磁盘。

如果应用程序configuration从构build到构build的变化,并且它们必须匹配正在运行的构build,那么如果多个应用程序版本共享相同的PD并针对应该存储在那里的应用程序发生冲突,则存在未解决的问题。

如果您不需要担心交叉版本的PD共享,那么您可以使用在应用程序的窗格中运行的作业来初始化PD的内容。 Kubernetes有一个称为init容器的function,旨在简化这个过程。 但在撰写本文时仍然是阿尔法。

我没有听说最佳做法,所以这是我现在采用的:

  1. DockerfileDockerfile docker build镜像,在完成其他构build步骤之后, Dockerfile也会将/etc/<application>/放入<application>.tar
  2. 简单的docker run图像和scp tar文件closures正在运行的图像
  3. 简单地创build一个临时的虚拟机实例并添加/附加PD到它; scp tar文件到VM实例; gcloud compute ssh转换为tit,挂载PD并在挂载点下解压缩所需的文件