TL;DR;
k8s のpod 内にあるファイルは kubectl cp
コマンドでローカルにコピーできるよ
何がしたかったか
サーバーにあるファイルをアップロードやダウンロードする場合、よくscp で行うかと思います。 本業の開発では、kubernetes (以下、k8s) を用いて運用しており、 pod に入ってコマンドを叩き、その結果をpod 内のファイルに標準出力した。 このファイルをローカルに引っ張ってくるときに、どうすればいいんだ?と思い、調べました。
kubectl cp
k8s のクラスタを操作するにあたり、 kubectl
があります。
kubectl
はk8s クラスタやデプロイされたpod を操作するための印象が強いかと思います。
実際にkubectl のリファレンスを見ても、pod へのアクセスがメインで記述されていることがわかります。
しかし、実は kubectl
には cp
コマンドがあり、コピーするコマンドが用意されています。
cp
Copy files and directories to and from containers.
と書かれています。 containers と書いてありますが、pod からファイルをコピーするのに役立ちそうです。
# namespace に展開されているpod 一覧から対象を絞ります $ kubectl get pods -n <namespace> | grep <pod name> # cp コマンドでファイルをローカルにコピーします。 $ kubectl cp -n <namespace> <pod name>:/path/to/file /path/to/local/file
でコピーすることができました。