无法使用 kubectl cp 命令将数据从 POD 复制到本地

Use*_*984 36 kubernetes kubectl

我需要将转储数据从 pod 复制到本地。在我正在尝试但收到错误的命令下面:unexpected EOF

kubectl cp device-database-79fc964c8-q7ncc:tmp /Users/raja
error: unexpected EOF

or

kubectl cp device-database-79fc964c8-q7ncc:tmp/plsql_data/prod.dump /Users/raja/prod.dump
error: unexpected EOF


Run Code Online (Sandbox Code Playgroud)

kubectl版本

kubectl version --client
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"darwin/amd64"}

Run Code Online (Sandbox Code Playgroud)

谁能帮助如何解决这个问题?

谢谢

Sil*_*mer 71

对于较新版本的 kubectl,添加 retries=-1 标志可能会解决该问题:

kubectl cp --retries=-1 pod-www-xxx-yyy-zzz:/path/to/remote/dir ~/local/dir 
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的解决方案,至少从 kubectl 1.23 开始是这样。但是,上面的语法不正确。应该是一个标志“--retries=n”,负数表示永远重试/恢复,正数表示重试次数。所以 `kubectl cp --retries=10 pod-www-xxx-yyy-zzz:/path/to/remote/dir_or_file ~/local/dir_or_file` (7认同)

war*_*ens 15

使用“cat”命令,而不是“cp”,对我来说有效——但只有在 3 次尝试之后。

“cp”命令一遍又一遍地失败,无法获取整个文件。

这个“猫”风格的命令每次都做得更好。

所以试试这个,看看你的胜算是否会提高!

kubectl exec -i [pod name] -c [container name] -- cat [path to file] > [output file]
Run Code Online (Sandbox Code Playgroud)

  • 开发人员似乎正在积极调查此问题,称为 kubernetes Issue #60140。 (3认同)
  • @Gaurav 不是真的 - 我只是用上面的方法下载二进制文件,没有问题 (2认同)

mar*_*rio 7

您可以将数据库转储移动到单独的目录,然后尝试复制整个目录吗?

\n

这可能看起来像这样:

\n
kubectl cp device-database-79fc964c8-q7ncc:tmp/plsql_data/directory_containing_prod_dump /Users/raja/new_local_dir_containing_db_dump\n
Run Code Online (Sandbox Code Playgroud)\n

根据 此评论, 它可能会有所帮助。

\n

Bageshwar Pratap Narain\xc4\xb0brahim ULUDA\xc4\x9e的评论也证实该解决方案对他们有效。

\n