AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 741670
Accepted
Bittrance
Bittrance
Asked: 2015-12-09 11:17:23 +0800 CST2015-12-09 11:17:23 +0800 CST 2015-12-09 11:17:23 +0800 CST

rsync 文件到 kubernetes pod

  • 772

我需要将文件树同步到 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
  • 7 7 个回答
  • 22020 Views

7 个回答

  • Voted
  1. Karl Bunch
    2017-12-11T03:17:43+08:002017-12-11T03:17:43+08:00

    要 rsync 到 pod,我使用以下帮助程序:

    pod=$1;shift;kubectl exec -i $pod -- "$@"
    

    我把它放在一个名为“rsync-helper.sh”的文件中,然后像这样运行 rsync:

    rsync -av --progress --stats -e './rsync-helper.sh' source-dir/ thePodName:/tmp/dest-dir
    

    如果你想要一个简单的脚本来包装这一切,请将其保存为 krsync:

    #!/bin/bash
    
    if [ -z "$KRSYNC_STARTED" ]; then
        export KRSYNC_STARTED=true
        exec rsync --blocking-io --rsh "$0" $@
    fi
    
    # Running as --rsh
    namespace=''
    pod=$1
    shift
    
    # If use uses pod@namespace rsync passes as: {us} -l pod namespace ...
    if [ "X$pod" = "X-l" ]; then
        pod=$1
        shift
        namespace="-n $1"
        shift
    fi
    
    exec kubectl $namespace exec -i $pod -- "$@"
    

    然后你可以在你通常使用 rsync 的地方使用 krsync:

    krsync -av --progress --stats src-dir/ pod:/dest-dir
    

    或者您可以设置命名空间:

    krsync -av --progress --stats src-dir/ pod@namespace:/dest-dir
    

    注意:您必须在 pod 映像中具有 rsync 可执行文件才能使其正常工作。

    • 47
  2. Best Answer
    Bittrance
    2016-01-03T00:48:54+08:002016-01-03T00:48:54+08:00

    最后,我编写了一个 Python 脚本来充当tar 文件的接收者。 你可以这样做:

    tar cf - . | kubectl exec shinken -i catcher -v /etc/shinken/custom_configs
    

    请注意,这仅在您的集群节点是 Kubernetes 1.1 或更高版本时才有效。

    • 3
  3. Chris Stryczynski
    2017-08-30T02:12:07+08:002017-08-30T02:12:07+08:00

    如果tar容器上有二进制文件,您可以使用新cp命令传输文件。

    虽然可能不如 rsync 高效。

    • 2
  4. Nico
    2018-11-13T05:43:47+08:002018-11-13T05:43:47+08:00

    单线,只需编辑您的名称和路径:

    p_user=$USER;p_name=$POD_NAME; rsync -avurP --blocking-io --rsync-path= --rsh="$(which kubectl) exec $p_name -i -- " /home/$USER/target_dir rsync:/home/$p_user/
    
    • 2
  5. leumasino
    2020-12-07T04:52:13+08:002020-12-07T04:52:13+08:00

    @karl-bunch 的回答非常完美。对于那些喜欢使用tar它的人来说,我是这样使用它的:

    tar -cvz -C /orig-dir . | kubectl exec -ti podname -- sh -c 'cd /var/www && tar -xzv'
    
    • 2
  6. Adam H.
    2021-12-31T00:18:06+08:002021-12-31T00:18:06+08:00

    我今天遇到了同样的问题。我必须将文件从 pod 同步到我的本地机器。

    我的解决方案是这个 rsync 命令

    rsync -aOv --blocking-io --rsync-path="/some/path/on/pod" --rsh="kubectl exec somePod -c someContainer -i -- " rsync:"/some/path/on/pod /some/local/path
    
    • 1
  7. Eric Tune
    2015-12-19T14:52:44+08:002015-12-19T14:52:44+08:00

    它不受支持,但添加支持存在问题,您可以 +1 甚至贡献: https ://github.com/kubernetes/kubernetes/issues/18007#issuecomment-164797262

    • 0

相关问题

  • 强制 rsync 进入非交互模式

  • 比较(diff)完整目录结构的最佳方法?

  • 如何使用 rsync 保持完整路径?

  • Rsyncing到USB驱动器时不时地失败

  • 使用 rsync 维护名称更改的目录的副本

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve