我有一个用例,其中我的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/

10-16 10:55