如何在 Kubernetes 集群中的 Pod 之间或节点之间复制文件?

Posted

技术标签:

【中文标题】如何在 Kubernetes 集群中的 Pod 之间或节点之间复制文件?【英文标题】:How can I copy files between pods or between nodes in the kubernetes cluster? 【发布时间】:2018-12-27 21:24:37 【问题描述】:

在 kubernetes 集群内部可以这样做吗?

我发现的所有示例都是从本地磁盘复制到 pod,反之亦然,或者是从节点复制到节点的唯一选择,例如通过 SSH、SCP 或其他实用程序?

【问题讨论】:

这感觉像是 XY 问题,你为什么要这么做? 【参考方案1】:

不可能进行集群到集群的复制。您需要使用kubectl cp 将其复制到本地,然后将文件复制回来:

kubectl cp <pod>:/tmp/test /tmp/test
kubctl cp /tmp/test <pod>:/tmp/test

如果您尝试在 pod 之间共享文件,并且只有一个 pod 需要写入权限,您可能希望在多个 pod 上挂载一个 ro 卷,或者使用像 S3 这样的对象存储。将文件复制到 pod 和从 pod 复制文件真的不应该是你经常做的事情,这是一种反模式

【讨论】:

是的,我明白这一切。但现在我想制作一个中间版本,以便它工作。最初,根据需要调整所有内容,实际上是没有时间和资源来正确配置所有内容。整个想法是我想在一个节点上设置詹金斯,在另一个节点上设置应用程序。我当然明白如何正确地做每一件事。正确的方式还是有点费时间和资源的。 但是等等,这就是解决方案!我有 jenkins 和 kubectl 可以访问集群。我可以直接从 jenkins 复制到 pod 共享文件夹。然后,如果 pod 突然重新创建它。然后在一般文件夹中会有一个我从詹金斯复制的文件。【参考方案2】:

查看this 文章。

简而言之,就是这个命令:

kubectl exec pod-01 -- tar cf - /dir1 /dir2 | kubectl exec -i pod-02 -- tar xvf - -C /

【讨论】:

【参考方案3】:

这是一种从容器内部复制到本地计算机的方法:

kubectl cp <file-spec-src> <file-spec-dest>

例子

kubectl cp your-pod:/path/to/file /local/path
kubectl cp /local/path your-pod:/path/to/file

【讨论】:

以上是关于如何在 Kubernetes 集群中的 Pod 之间或节点之间复制文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kubernetes 集群中的 Pod 之间或节点之间复制文件?

Kubernetes之DaemonSet

kubernetes之PDB

Kubernetes学习总结(15)—— Kubernetes 实战之部署 Mysql 集群

如何在一个 Kubernetes 集群中的命名空间之间隔离 Keycloak Infinispan,以防止 KC pod 相互发现和同步

Kubernetes对象之Pod详解(附安装部署方法)