![](/img/trans.png)
[英]How to create a mysql kubernetes service with a locally mounted data volume?
[英]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.