在 GKE 上构建和/或运行 Docker 映像时预填充 GCE 持久磁盘

在 GKE 上构建和/或运行 Docker 映像时预填充 GCE 持久磁盘

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

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

有没有实现此目的的最佳实践?例如,我是否也必须在我的 中安装 PD Dockerfile,或者我是否可以以某种方式请求在部署期间 VM 实例首次安装 PD 时将其与另一个目录/卷/磁盘中的文件“同步”?

答案1

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

如果应用程序配置在不同构建中发生变化,并且它们必须与正在运行的构建相匹配,那么就会出现一个尚未解决的问题,即如果多个应用程序版本共享同一个 PD 并且对于应该存储在那里的内容发生冲突,该怎么办。

如果您不需要担心跨版本 PD 共享,那么您可以使用在应用程序的 pod 中运行的作业来初始化 PD 的内容。Kubernetes 有一项功能称为初始化容器旨在使这变得更容易;但在撰写本文时它仍处于 alpha 阶段。

答案2

我没有听说过最佳做法,因此这是我目前采用的:

  1. docker build在完成其他构建步骤后,该图像Dockerfile也会被压缩/etc/<application>/<application>.tar
  2. 简要说明正在运行的docker run图像和tar 文件scp
  3. 简要创建一个临时 VM 实例并将 PD 添加/附加到它;将scp文件 tar 到 VM 实例;gcloud compute ssh进入 tit,挂载 PD,并在挂载点下解压所需文件

相关内容