如何在 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学习总结(15)—— Kubernetes 实战之部署 Mysql 集群
如何在一个 Kubernetes 集群中的命名空间之间隔离 Keycloak Infinispan,以防止 KC pod 相互发现和同步