有时候需要想把本地计算机上的文件复制到远程k8s中正在运行的容器里或实现逆向文件复制,可以通过kubectl的cp命令完成这个需求。
此命令需要双方的系统环境里已安装tar工具。
比如说:
I) 把本地计算机当前目录下的lalalaA文件复制到指定k8s命名空间中某个pod里的当前目录下temp子目录,并将复制后的文件命名为lalalaB。
kubectl cp ./lalalaA <some-namespace>/<some-pod>:./temp/lalalaB
或者:
kubectl cp ./lalalaA <some-namespace>/<some-pod>:/<root_dir>/<parent_dir>/temp/lalalaB
II) 把远程k8s容器中某个文件复制到本地计算机,并将复制后的文件命名为lalalaC。
注意此时k8s中的文件路径必须是绝对路径而且<some_pod>后面的冒号不能紧跟着'/'符号,否则kubectl报"tar: removing leading '/' from member names" warning,虽然目前这个warning并不意味着文件复制失败......
另外如果此时k8s中的文件路径是相对路径,那么kubectl报"tar contents corrupted" error,文件复制失败。
kubectl cp <some-namespace>/<some-pod>:<root_dir>/<parent_dir>/temp/lalalaB ./lalalaC
参考及其它兼容的kubectl cp语法(参考最高赞答案):https://stackoverflow.com/questions/52407277/how-to-copy-files-from-kubernetes-pods-to-local-system
kubectl从远程pod复制文件时语法细节的讨论(见@isaiah1112的回答,同时也是最高赞答案): https://github.com/kubernetes/kubernetes/issues/58692