在 k8s 集群上复制文件 to/from Windows 容器

Copying files to/from Windows container on a k8s cluster

我正在尝试将文件 to/from 复制到 ACS k8s 集群上 pod 运行 中的 Windows 容器。

我在我的 Windows 10 笔记本电脑上使用这个 kubectl 命令:

kubectl cp dev-acs-conn-testdn-1981314364-rjc0l:\app\nettrace.etl c:\

我收到此错误响应:

error: archive/tar: invalid tar header

我已经从 k8s 的 v1.7.7 和 v1.7.9 以及 Server 2016 ltsc 和 Server v1709 集群 运行 中尝试过。我的 kubectl.exe 是 v1.8.5。我有一些有价值的调试文件滞留在我的容器中,知道如何让它工作吗?

所以事实证明“kubectl cp”命令要求tar在容器中,而不是像我预期的那样在本地系统中。由于 Windows 没有随 tar.exe 一起提供,所以问题就出在这里。

我部署了一个新 pod,其中包含 Windows 版本的 tar.exe 及其依赖项。这让我在 Server 2016 ltsc 容器中更进一步。我只需要稍微调整一下我的语法就可以了:

kubectl cp dev-acs-conn-testdn-1981314364-rjc0l:/app/nettrace.etl nettrace.etl

但是,这个相同的过程不适用于 Server v1709 容器。当我尝试完全相同的过程时,出现此错误:

tar: Cannot open -: Permission denied

tar: Error is not recoverable: exiting now

显然是权限错误,但我不知道问题出在哪里以及如何更改权限。有什么想法吗?

回过头来讨论这个问题。现在 Windows v1803 容器在 kubernetes 中可以正常运行,我已经测试了同样的问题并且一切正常。 Windows 的 v1803 开始​​作为操作系统的一部分与 tar.exe 一起发布。为微软欢呼!

一个奇怪的地方是,从 pod 复制到本地系统时,目标始终是一个文件夹。它会将源中的所有文件解压缩到该文件夹​​,但如果您指定单个文件,它仍会创建一个具有该名称的文件夹。没什么大不了的,只是奇怪。

所以对我来说,这个问题的答案是:使用 v1803 容器映像。是的,这可能不是您想听到的,但现实是 Windows 容器支持还处于初级阶段,而 kubernetes 支持从 v1803 开始​​就非常初级。 v1809 可能是它最终变得坚固可靠的地方。