GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menyalin File Antara Pod Kubernetes dan Mesin Anda

Container yang berjalan di Kubernetes Pod dimaksudkan sebagai unit komputasi mandiri yang tidak perlu Anda gunakan untuk berinteraksi secara manual. Terkadang Anda mungkin harus menyalin file ke atau dari sistem file Pod, mungkin karena Anda sedang men-debug masalah dan ingin mengarsipkan log, file konfigurasi, atau cache yang disimpan dalam sebuah wadah.

Berikut cara memindahkan file antara mesin Anda dan container dalam sebuah Pod, menggunakan fitur transfer bawaan Kubectl atau alternatif manual.

Menyalin Ke atau Dari Mesin Anda

kubectl cp perintah adalah cara paling sederhana untuk menyalin ke atau dari sistem file kontainer. Ini bekerja mirip dengan docker cp Anda mungkin sudah familiar dengan pengembangan container lokal.

kubectl cp membutuhkan argumen sumber dan tujuan. Salah satu sumber atau tujuan harus menjadi referensi Pod. Ini diformat sebagai nama Pod, diikuti oleh titik dua dan jalur sistem file dalam wadah.

kubectl cp example-pod:/tmp/example-dir ./example-dir

Contoh ini menyalin konten /tmp/example-dir dari example-pod ke example-dir pada sistem file lokal Anda. Membalikkan argumen akan menyalin example-dir mesin Anda kembali ke Pod.

Argumen Perintah

Karena satu Pod dapat menampung banyak container, penting untuk mengingat hal ini saat menggunakan cp . Kubernetes akan secara default menyalin ke atau dari instance container pertama di dalam Pod. Anda dapat menargetkan wadah tertentu sebagai gantinya dengan menambahkan -c bendera:

kubectl cp example-pod:/tmp/example-dir ./example-dir -c second-container

Seperti semua kubectl lainnya perintah, cp berjalan melawan koneksi cluster yang ditentukan oleh KUBECONFIG . Anda variabel lingkungan. Ini default ke ~/.kube/conf .

Ada dua opsi saat Anda mereferensikan Pod dengan namespace. Anda dapat menambahkan --namespace example-namespace standar tandai atau gunakan path Pod lengkap di referensi sistem file Anda:

kubectl cp example-namespace/example-pod:/tmp/example-dir ./example-dir

Atribut file dipertahankan secara default. Tambahkan --no-preserve tandai ke cp . Anda perintah untuk menghapus data kepemilikan dan izin dari file yang disalin yang ditinggalkan di tempat tujuan. Tidak seperti cp Unix biasa , implementasi Kubectl selalu rekursif sehingga referensi direktori akan menyertakan isinya juga.

Kapan Kubectl Cp Tidak Berfungsi

kubectl cp hadir dengan satu peringatan besar:secara internal, ini adalah pembungkus sederhana di sekitar tar . Perintah akan memampatkan jalur sumber, menyalin arsip ke tujuan, lalu mengekstrak kontennya. Gambar container Anda harus menyertakan tar biner di jalurnya agar ini berfungsi.

Ini berarti kubectl cp mungkin tidak selalu menjadi pilihan saat Anda mengikuti praktik terbaik Docker untuk menjaga agar gambar tetap kecil. Meskipun basis minimal populer seperti alpine sertakan tar , itu mungkin tidak ditampilkan di setiap gambar dan tidak akan ada jika Anda merakitnya dari awal.

Penggunaan tar juga membatasi apa kubectl cp dapat menyalin. Anda tidak dapat menyelesaikan symlink atau menggunakan wildcard seperti /tmp/*.log . Anda harus menggunakan pendekatan yang berbeda saat fungsi ini diperlukan.

Salah satu opsi adalah menggabungkan kubectl exec , cat perintah, dan pengalihan shell untuk mengalirkan konten file keluar dari cluster dan ke file lokal:

kubectl exec 
    --namespace example-namespace 
    example-pod -c second-container 
    -- cat /tmp/example-file > local-file

kubectl exec perintah memulai sesi shell di Pod. Semuanya setelah -- dijalankan di dalam wadah. Output dari memanggil cat pada file tersebut akan dipancarkan ke terminal Anda di mana file tersebut dapat dialihkan ke file lokal.

Teknik ini cocok saat Anda menyalin beberapa file yang relatif kecil. Ini akan cepat menjadi membosankan jika Anda perlu untuk mengambil direktori besar. Sayangnya, tidak ada alternatif yang lebih baik tanpa menambahkan perangkat lunak tambahan ke wadah Anda.

Jika Anda merasa berani, Anda dapat menginstal SSH di wadah Anda dan menggunakan scp untuk mengakses sistem filenya dari host Anda. Ini akan memberi Anda pengalaman penyalinan yang lengkap dengan mengorbankan menjalankan daemon tambahan dan menciptakan potensi masalah keamanan. Ini hanya boleh dipertimbangkan pada cluster yang dilindungi dengan benar.

Menambahkan tar ke gambar kontainer Anda adalah pilihan yang jauh lebih aman. Ini memungkinkan Anda menggunakan kubectl cp dan membuka penyalinan manual yang lebih canggih melalui kubectl exec ketika Anda membutuhkan fungsionalitas tambahan. Jika Anda mengalami keterbatasan dengan cp sintaks, aktifkan tar langsung melalui kubectl exec untuk menambahkan tanda tambahan ke perintah:

kubectl exec 
    --namespace example-namespace 
    example-pod -c second-container 
    -- tar -cf /tmp/example-dir | tar xf - -C ./extracted-dir

Ini menjalankan tar -cF di dalam wadah Anda dan menyalurkan hasilnya ke tar xf perintah ekstraksi pada mesin lokal Anda. - menginstruksikan tar untuk mengekstrak data yang diumpankan melalui aliran input standar. -C digunakan untuk menentukan direktori tujuan.

Ringkasan

kubectl cp perintah memungkinkan Anda menyalin file antara Kubernetes Pods dan mesin Anda. Ini bekerja di kedua arah tetapi tidak dapat digunakan untuk memindahkan file dari Pod ke Pod. Jika Anda perlu melakukannya, sebaiknya gunakan prosedur dua tahap, menyalin pertama dari Pod A ke mesin Anda, kemudian ke Pod B.

Sebagai cp bergantung pada tar di bawah tenda, Anda perlu memastikan gambar wadah Anda menyertakannya. Anda akan melihat No such file or directory tar kesalahan jika Anda mencoba menjalankan cp terhadap Pod tanpa tar . Dalam situasi ini, tambahkan tar ke wadah atau gunakan kombinasi kubectl exec dan cat jika Anda hanya perlu mengambil beberapa file.


Docker
  1. Cara Mentransfer File Antara Mesin Lokal dan Jarak Jauh Menggunakan Protokol SFTP

  2. Cara menyalin file dengan aman antara host Linux menggunakan SCP dan SFTP

  3. Bagaimana cara menyalin dan mengedit file di shell Android?

  1. Salin file antara Linux dan FreeDOS

  2. Temukan dan salin file

  3. Cara berbagi file antara Ubuntu dan Mac OS X

  1. Cara Menyalin File dan Direktori di Linux

  2. Cara Memulai Ulang Pod Kubernetes

  3. Cara Menyalin File dan Direktori di Linux