目前很不幸地,使用kubectl cp
命令无法实现您所需的状态。
如果有一些未记录的功能,请随时编辑此答案并提供解决方案,但目前文档中没有任何地方能够建议相反的操作。
无论是在这里还是在运行kubectl cp --help
命令后获得的上下文帮助中,都没有提到可以修改kubectl cp
命令默认操作的选项,该命令基本上是将已经存在的目录内容与复制的目录内容合并。
$ kubectl cp --help
Copy files and directories to and from containers.
Examples:
tar cf - /tmp/foo | kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - -C /tmp/bar
kubectl exec -n <some-namespace> <some-pod> -- tar cf - /tmp/foo | tar xf - -C /tmp/bar
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
Options:
-c, --container='':
Container name. If omitted, use the kubectl.kubernetes.io/default-container annotation for selecting the
container to be attached or the first container in the pod will be chosen
--no-preserve=false:
The copied file/directory's ownership and permissions will not be preserved in the container
--retries=0:
Set number of retries to complete a copy operation from a container. Specify 0 to disable or any negative
value for infinite retrying. The default is 0 (no retry).
Usage:
kubectl cp <file-spec-src> <file-spec-dest> [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
kubectl cp
命令的默认行为基本上是合并源目录和目标目录的内容。假设我们有一个包含如下内容的本地目录:/tmp/test
/tmp/test$ ls
different_file.txt
带有单行文本 "some content"
。如果我们将本地的 /tmp/test 目录
复制到我们的 Pod
上的 /tmp
目录中,该目录已经包含一个不同文件的 test
文件夹,假设是 testfile.txt
,则两个目录的内容将合并,因此我们目标目录 /tmp/test
最终将包含:
/tmp/test
different_file.txt testfile.txt
如果我们更改本地文件
different_file.txt
的内容为
"另一个内容"
,并再次运行命令:
kubectl cp /tmp/test pod-name:/tmp
它只会覆盖目标different_file.txt
,而该文件已经存在于目标/tmp/test
目录中。
目前还没有办法覆盖这个默认行为。
kubectl cp
这样的命令的情况下实现您的最终目标,无论是更新镜像还是将持久存储挂载到Pod中。 - David Maze