В настоящее время, к сожалению, нет способа достичь желаемого состояния с помощью команды kubectl cp
.
Если есть некоторые недокументированные функции, пожалуйста, не стесняйтесь редактировать этот ответ и предоставить решение , но в настоящее время нет ни одного места в документации, которое могло бы предложить обратное.
Ни здесь , ни в контекстной справке команды kubectl
, доступной при запуске kubectl cp --help
, есть ни одна из упомянутых опций не изменяет операцию по умолчанию для команды kubectl cp
, которая по сути представляет собой слияние содержимого уже существующего каталога и скопированного.
$ kubectl cp --help
Copy files and directories to and from containers.
Examples:
# !!!Important Note!!!
# Requires that the 'tar' binary is present in your container
# image. If 'tar' is not present, 'kubectl cp' will fail.
# Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
# Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>
# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace <some-namespace>
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar
# Copy /tmp/foo from a remote pod to /tmp/bar locally
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
Options:
-c, --container='': Container name. If omitted, the first container in the pod will be chosen
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 directory
в /tmp
в нашем Pod
, который уже содержит папку test
с другим файлом, скажем testfile.txt
, содержимое обоих каталогов будет объединено, поэтому наш пункт назначения /tmp/test
в конечном итоге будет содержать:
/tmp/test# ls
different_file.txt testfile.txt
Если мы изменим содержимое нашего локального different_file.txt
на "yet another content"
и снова запустим команду:
kubectl cp /tmp/test pod-name:/tmp
, он будет только переопределять приемник different_file.txt
, который уже присутствует в каталоге назначения /tmp/test
.
В настоящее время нет способа изменить это поведение по умолчанию.