Rsync
rsync 文件到 kubernetes pod
我需要將文件樹同步到 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
,但它只能在節點上使用?)
最後,我編寫了一個 Python 腳本來充當tar 文件的接收者。你可以這樣做:
tar cf - . | kubectl exec shinken -i catcher -v /etc/shinken/custom_configs
請注意,這僅在您的集群節點是 Kubernetes 1.1 或更高版本時才有效。
要 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 執行檔才能使其正常工作。