web-dev-qa-db-ja.com

kubernetesポッドからローカルシステムにファイルをコピーする方法

Kubernetes Podsからローカルシステムにファイルをコピーしようとしています。次のコマンドの実行中に次のエラーが表示されます。

kubectl cp aks-ssh2-6cd4948f6f-fp9tl:/home/azureuser/test.cap ./test.cap

出力:

tar:home/azureuser/test:statできません:そのようなファイルまたはディレクトリはありませんtar:以前のエラーによる失敗ステータスで終了しますerror:home/azureuser/test no such file or directory

上記のパスの下にファイルが表示されました。私は本当に混乱しています。

手伝ってくれませんか?

12
Girish

kubectlヘルプに記載されているとおり:

kubectl cp --help
Copy files and directories to and from containers.
Examples:
# !!!Important Note!!!
# Requires that the 'tar' binary is present in your container
# image.  If 'tar' is not present, 'kubectl cp' will fail.

# Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir

# Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>

# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace <some-namespace>
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar

# Copy /tmp/foo from a remote pod to /tmp/bar locally
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

Options:
-c, --container='': Container name. If omitted, the first container in the pod will be chosen

Usage:
kubectl cp <file-spec-src> <file-spec-dest> [options]

Use "kubectl options" for a list of global command-line options (applies to all commands).

Containterにログインして、ファイルがあるかどうかを確認することもできます。

kubectl exec -it aks-ssh2-6cd4948f6f-fp9tl /bin/bash
ls -la /home/azureuser/test.cap

それでも解決しない場合は、次を試してください:

ファイルをworkdirにコピーしてから、名前だけを使用してファイルのコピーを再試行することができます。奇妙ですが、今のところは機能します。

kchugalinskiy here #58692 のアドバイスを検討してください。

11
Crou

ローカルディレクトリをポッドにマウントできます。

Aks-ssh yamlファイルを更新します。

spec:
  ...
  containers:
    ...
    volumeMounts:
    - name: test-dir
      mountPath: /home/azureuser
    ...
  volumes:
  - name: test-dir
    hostPath:
      path: /path/to/your/local/dir

これで、ローカルディレクトリのファイルにアクセスできます。

3
rw026

Binフォルダーからローカルシステムにファイルをコピーしているとします。コマンドは

kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME

PODに接続して、正しいファイル名を指定しているかどうかを確認できます

kubectl exec -ti POD_NAME bash
3
Atul Verma

コンテナのPATHにtarコマンドがない場合、kubectl cpは機能しません。エラーから、tarコマンドがコンテナで使用できないように見えます。 https://github.com/kubernetes/kubernetes/issues/58512 他のオプションを調べてください

0
Hazel

この問題を解決するには、ソースフォルダーを相対パスに設定します。ファイルの場所が/home/azureuser/test.capで、作業ディレクトリが/ home/azureuser /の場合、cmdは

kubectl cp aks-ssh2-6cd4948f6f-fp9tl:test.cap ./test.cap

0
Yujie Gu