繁体   English   中英

Kubernetes 不会将数据复制到已安装的卷中

[英]Kubernetes not copying data into mounted Volume

根据此处的文档: https : //docs.docker.com/storage/volumes/

如果你启动一个容器来创建一个新的卷,如上所述,并且容器在要挂载的目录中有文件或目录(如上面的/app/),目录的内容被复制到卷中。 然后容器安装并使用该卷,使用该卷的其他容器也可以访问预先填充的内容。

换句话说,期望是,如果我在 /var/lib/mysql 中有这样的文件

root@d8fa9a8b305a:/var/lib/mysql# ls
auto.cnf         xtz           ib_logfile0  ibdata1  mysql               sys
debian-5.7.flag  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema

然后,当我将卷安装到/var/lib/mysql ,容器中的所有文件都应该复制到我的卷中。

但我发现这不会发生:

/var/lib/mysql/mysql # ls
auto.cnf        ib_buffer_pool  ib_logfile0     ib_logfile1     ibdata1

这是我安装到 /var/lib/mysql 中的卷的内容,正如您所看到的,数据与 docker 映像本身的 /var/lib/mysql 中存在的数据不同。 因此,结果是启动失败。

注意:有问题的 Volume 实际上是由 kubernetes 挂载的。 所以,我在这里做了一个主要假设

volumeMounts:
        - name: xtz-persistent-storage
          mountPath: "/var/lib/mysql/"

相当于这样做: docker run -p 443:443 --rm -v mysql:/var/lib/mysql <image>

Kubernetes Volumes与 Docker Volumes

来自 Kubernetes文档

Docker 也有卷的概念,尽管它有点松散且管理较少。 在 Docker 中,卷只是磁盘或另一个容器中的目录。 生命周期不受管理,直到最近才只有本地磁盘支持的卷。 Docker 现在提供卷驱动程序,但目前功能非常有限(例如,从 Docker 1.7 开始,每个容器只允许一个卷驱动程序,并且无法将参数传递给卷)。

另一方面,Kubernetes 卷具有明确的生命周期——与包含它的 pod 相同。 因此,卷比在 Pod 内运行的任何容器的寿命都长,并且数据在容器重新启动时得以保留。 当然,当 Pod 不复存在时,volume 也将不复存在。 也许比这更重要的是,Kubernetes 支持多种类型的卷,并且一个 Pod 可以同时使用任意数量的卷。

从本质上讲,卷只是一个目录,其中可能包含一些数据,可被 Pod 中的容器访问。 该目录如何形成、支持它的介质以及它的内容由所使用的特定卷类型决定。

所以,虽然这个概念的名字是一样的,但那是一个不同的volume

在挂载上,Kubernetes 覆盖了一个目标目录。

不幸的是,目前还没有办法合并已挂载卷和容器中的内容。 这是关于它的讨论之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM