不使用 kubectl cp 将文件复制到 kubernetes pod 中

2023-11-25

我有一个用例,我的 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不是必需的。我把它放在这里是为了防止源文件中有一些特殊字符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不使用 kubectl cp 将文件复制到 kubernetes pod 中 的相关文章

随机推荐