【问题标题】:Kubernetes not copying data into mounted VolumeKubernetes 没有将数据复制到挂载的卷中
【发布时间】:2018-04-24 01:04:28
【问题描述】:

根据此处的文档: 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 中的数据不同。因此,启动失败。

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

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

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

【问题讨论】:

  • 根据kubernetes.io/docs/user-guide/walkthrough,mountpath 不应该用引号引起来。你可以试试不带引号的路径吗?
  • 您是否使用 docker 容器而不只是 k8s pod 测试了该命令,因为您引用的是 docker 文档?此外,“新卷”是该报价中的一个非常重要的区别,其行为与现有卷有很大不同。
  • 你是对的。当我只使用 Docker 时,我确实得到了预期的行为。 /var/lib/mysql 中的文件被复制到命名卷中。我通过将相同的命名卷安装到另一个容器中来检查这一点,我可以看到复制的文件。
  • 我没有答案,但这听起来确实像是一个主要假设。对于过去的类似用例,我最终使用 init 容器将数据复制到卷中。不确定它是否理想,但完成了它的工作。
  • 不确定这是否适用于我的情况,因为我试图复制到卷的数据在容器中。如果 init 容器看不到这些数据,那么它就无法复制到挂载的卷中,对吧?

标签: mysql docker kubernetes


【解决方案1】:

Kubernetes Volumes 与 Docker Volumes 不同。

来自 Kubernetes documentation

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

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

在其核心,卷只是一个目录,其中可能包含一些数据,这些数据可供 pod 中的容器访问。该目录是如何形成的、支持它的介质以及它的内容取决于所使用的特定卷类型。

因此,虽然概念名称相同,但volume 是不同的。

在挂载时,Kubernetes 会覆盖一个目标目录。

不幸的是,目前还没有办法合并已安装卷和容器中的内容。这是discussions 之一。

猜你喜欢
  • 2021-03-11
  • 2016-06-08
  • 2021-10-26
  • 2020-03-02
  • 1970-01-01
  • 2021-11-22
  • 2020-08-07
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多