我有一个用例,其中我的Pod以非root用户身份运行,并且运行python应用程序。
现在,我想将文件从主节点复制到正在运行的Pod。但是当我尝试运行时
kubectl cp app.py 103000-pras-dev/simplehttp-777fd86759-w79pn:/tmp
此命令挂起,但是当我以root用户身份运行pod并运行相同的命令时
它执行成功。我正在查看kubectl cp的代码,其中它在内部使用tar命令。
Tar命令有多个标志,例如--overwrite --no-same-owner,--no-preserve和其他几个标志。现在,从kubectl cp中,我们无法将所有这些标志传递给tar。有什么方法可以使用kubectl exec命令或其他任何方式复制文件。
kubectl exec simplehttp-777fd86759-w79pn -- cp app.py /tmp/ **flags**
最佳答案
如果源文件是一个简单的文本文件,这是我的窍门:
#!/usr/bin/env bash
function copy_text_to_pod() {
namespace=$1
pod_name=$2
src_filename=$3
dest_filename=$4
base64_text=`cat $src_filename | base64`
kubectl exec -n $namespace $pod_name -- bash -c "echo \"$base64_text\" | base64 -d > $dest_filename"
}
copy_text_to_pod my-namespace my-pod-name /path/of/source/file /path/of/target/file
也许没有必要使用base64。我将其放在此处,以防源文件中有一些特殊字符。关于kubernetes - 在不使用kubectl cp的情况下将文件复制到kubernetes pod,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55898574/