我们可以看到kubectl cp的传输进度吗?

时间:2019-01-21 15:46:02

标签: kubernetes google-kubernetes-engine

是否可以通过kubectl cp了解 Google Cloud 的文件传输进度?

4 个答案:

答案 0 :(得分:4)

一种选择是使用pv,它将显示经过的时间,传输的数据和吞吐量(例如MB / s):

$ kubectl exec podname -c containername -- tar cf - /whatever/path | pv | tar xf -

14.1MB 0:00:10 [1.55MB/s] [       <=>                                   ]

如果您提前知道预期的传输大小,也可以将其传递给pv,然后它将计算进度百分比和ETA,例如100m传输:

$ kubectl exec podname -c containername -- tar cf - /whatever/path | pv -s 100m | tar xf -

13.4MB 0:00:09 [1.91MB/s] [==>                          ] 13% ETA 0:00:58

您显然需要在本地安装pv才能使以上任何功能正常工作。

答案 1 :(得分:2)

不,这似乎不可能。

kubectl cp appears to be implemented通过做

kubectl exec podname -c containername \
  tar cf - /whatever/path \
| tar xf -

这意味着两件事:

  1. tar (1)不会打印任何有用的进度信息。 (原则上,您可以添加一个v标志来打印出每个文件的名称,直到stderr,但这并不能告诉您总共有多少个文件或它们有多大。)所以{{ 1}}的实施方式无法解决这个问题。

  2. 没有更丰富的本地Kubernetes API可以复制文件。

如果将文件移入和移出容器是您的主要用例,则通过添加简单的HTTP服务,构建,测试和运行它可能会更容易。然后,您可以依靠HTTP kubectl cp标头之类的东西进行进度计量。

答案 2 :(得分:2)

我想出了一种方法。如果您对要复制的容器具有bash访问权限,则可以在遥控器上执行类似wc -c <file>的操作,然后将其与本地大小进行比较。 du -h <file>是另一种选择,它提供了易于理解的输出,因此可能会更好

答案 3 :(得分:1)

这是不可能的,但是您可以在这里找到如何使用kubernetes实现rsync,rsync向您显示了传输文件的进度。 rsync files to a kubernetes pod