我需要将文件树同步到 kubernetes 集群中的特定 pod。如果只有一个人可以让 rsync 相信 kubectl 的行为有点像 rsh,这似乎是可能的。就像是:
rsync --rsh='kubectl exec -i podname -- ' -r foo x:/tmp
...除了这会遇到 x 问题,因为 rsync 假定需要主机名:
exec: "x": executable file not found in $PATH
我似乎找不到帮助 rsync 构造 rsh 命令的方法。有没有办法做到这一点?或者其他一些可以通过管道实现相对有效的文件传输的方法?
(我知道gcloud compute copy-files
,但它只能在节点上使用?)
要 rsync 到 pod,我使用以下帮助程序:
我把它放在一个名为“rsync-helper.sh”的文件中,然后像这样运行 rsync:
如果你想要一个简单的脚本来包装这一切,请将其保存为 krsync:
然后你可以在你通常使用 rsync 的地方使用 krsync:
或者您可以设置命名空间:
注意:您必须在 pod 映像中具有 rsync 可执行文件才能使其正常工作。
最后,我编写了一个 Python 脚本来充当tar 文件的接收者。 你可以这样做:
请注意,这仅在您的集群节点是 Kubernetes 1.1 或更高版本时才有效。
如果
tar
容器上有二进制文件,您可以使用新cp
命令传输文件。虽然可能不如 rsync 高效。
单线,只需编辑您的名称和路径:
@karl-bunch 的回答非常完美。对于那些喜欢使用
tar
它的人来说,我是这样使用它的:我今天遇到了同样的问题。我必须将文件从 pod 同步到我的本地机器。
我的解决方案是这个 rsync 命令
它不受支持,但添加支持存在问题,您可以 +1 甚至贡献: https ://github.com/kubernetes/kubernetes/issues/18007#issuecomment-164797262