我无法理解将文件存储在GKE容器中的什么位置?我看过以下有关文件系统布局的文档:
https://cloud.google.com/kubernetes-engine/docs/concepts/node- images#file_system_layout
但是网上也有Dockerfile示例,它们将可执行文件复制到布局中未列出的其他路径,例如/usr
或/go
。这些示例之一在这里:
https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/master/hello-app/Dockerfile
另一个问题是:如果在容器启动后,如果我有运行时代码需要下载某些配置信息,我可以将配置文件写入可执行文件所在的目录吗?还是我必须选择/etc
或/tmp
。
最后,布局文档指出/home
和/var
在引导磁盘的生存期内存储数据吗?这意味着什么?与pod或节点的生存期相比如何?
答案 0 :(得分:0)
当您要将某些东西存储在容器中时,可以存储临时的或永久的
要存储临时方式,只需选择路径/tmp
,/var
,/opt
等(这也取决于容器的设置),则在容器重新启动后,创建容器时,您拥有的信息是相同的,例如您的二进制文件和初始配置文件。
要存储永久性文件,必须安装一个卷,这是对您的容器的支持,在该容器中,一个卷(容器路径)与外部存储器链接。这样,如果您的容器重新启动,则一旦容器再次准备就绪,卷将被挂载,您将不会丢失任何东西。
在kubernetes中,这称为Persistent Volumes
,即使您在另一个云提供商中,也可以利用它
使用步骤
/myfiles/private
示例
将体积与容器链接
volumeMounts:
- mountPath: /myfiles/private
name: any-name-you-want
将持久卷与您的部署相关
volumes:
- name: any-name-you-want
persistentVolumeClaim:
claimName: my-claim-name
答案 1 :(得分:0)
这完全取决于您。默认情况下,大多数基本映像将按照正常方式保留/tmp
可写。但是,如果/由于某种原因重新启动容器时,写入容器内部的所有内容都将消失。对于诸如配置数据之类的东西,这可能很好,而对于数据库,则可能不那么好。为了获得更稳定的存储,您需要使用卷。使用的确切类型取决于您的环境以及数据应保留多长时间。 emptyDir
卷的寿命仅与容器相同,但可以在同一容器中的容器之间共享。除此之外,您可能会使用PersistentVolumeClaim动态设置新的Google Cloud磁盘,除非删除声明(或者永久取决于您的Reclaim设置),否则该磁盘将持续使用。