我目前正在GCE应用程序中使用动态预配置的持久性磁盘进行调查:在我的应用程序中,我有1-n个容器,其中每个容器包含一个需要rw访问持久卷的单个容器。该卷需要预先填充一些从存储桶复制的数据。
我很困惑的是;如果永久磁盘是动态分配的,那么如何确保在将数据挂载到吊舱之前将数据复制到该磁盘上?数据的复制很少,但是很常规,我唯一可能需要按顺序执行此操作的步骤是:如果Pod跌落了,而我需要一个新的永久性磁盘和Pod来代替它。
在将永久性磁盘安装到pod之前,如何确保已预先填充了永久性磁盘?
我当前的想法是将存储桶安装到Pod,并作为Pod启动的一部分,从存储桶复制到永久磁盘。这就产生了另一个问题,因为无法对存储桶进行写操作并将其安装到多个Pod。
注意:我正在使用单独的永久磁盘,因为我需要它作为速度的ssd。
答案 0 :(得分:1)
看起来该副本很适合作为"init container"使用。
这样,在每个Pod启动时,“初始容器”将连接到GCS存储桶并检查数据状态,如果需要,可将数据复制到动态分配的PersistentDisk。
完成后,将启动容器的主容器,并准备使用数据。通过使用“初始容器”,您可以保证:
在主容器容器启动之前,副本已完成。
主容器不需要访问GCS,只需访问动态创建的PV。
如果“初始化容器”未能成功完成,则您的pod可能无法启动,并且处于错误状态。
此方法与N个容器中的StatefulSet
结合使用,在能够使用新磁盘初始化新副本以及在主容器映像(代码)更新中保持持久数据方面,该方法效果很好。 / p>