我想构建一个 Docker 容器,然后在从 GCE 持久磁盘 (PD) 挂载一些目录后在 GKE 中运行它。例如,我希望应用程序的 (读写) 配置文件的/etc/<application>/
存活时间比其 pod(可能随时重新启动)更长。
常规构建会放入默认配置文件/etc/<application>/
,并且必须以某种方式将这些文件从映像的临时磁盘“复制”到 PD 中,以便应用程序可以在其预期环境中启动。
有没有实现此目的的最佳实践?例如,我是否也必须在我的 中安装 PD Dockerfile
,或者我是否可以以某种方式请求在部署期间 VM 实例首次安装 PD 时将其与另一个目录/卷/磁盘中的文件“同步”?
答案1
显而易见的答案是在创建每个持久磁盘后立即填充它。
如果应用程序配置在不同构建中发生变化,并且它们必须与正在运行的构建相匹配,那么就会出现一个尚未解决的问题,即如果多个应用程序版本共享同一个 PD 并且对于应该存储在那里的内容发生冲突,该怎么办。
如果您不需要担心跨版本 PD 共享,那么您可以使用在应用程序的 pod 中运行的作业来初始化 PD 的内容。Kubernetes 有一项功能称为初始化容器旨在使这变得更容易;但在撰写本文时它仍处于 alpha 阶段。
答案2
我没有听说过最佳做法,因此这是我目前采用的:
docker build
在完成其他构建步骤后,该图像Dockerfile
也会被压缩/etc/<application>/
成<application>.tar
- 简要说明正在运行的
docker run
图像和tar 文件scp
- 简要创建一个临时 VM 实例并将 PD 添加/附加到它;将
scp
文件 tar 到 VM 实例;gcloud compute ssh
进入 tit,挂载 PD,并在挂载点下解压所需文件