有時候需要想把本地計算機上的文件復制到遠程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