GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak kopírovat soubory mezi Kubernetes Pods a vaším počítačem

Kontejnery běžící v Kubernetes Pods mají být samostatné výpočetní jednotky, se kterými nemusíte ručně pracovat. Někdy však možná budete muset kopírovat soubory do nebo ze souborového systému podu, možná proto, že řešíte problém a chcete archivovat protokoly, konfigurační soubory nebo mezipaměti uložené v kontejneru.

Zde je návod, jak přesouvat soubory mezi vaším strojem a kontejnery v podu pomocí vestavěné funkce přenosu Kubectl nebo manuální alternativy.

Kopírování do nebo z vašeho počítače

kubectl cp příkaz je nejjednodušší způsob kopírování do nebo z kontejnerového souborového systému. Funguje podobně jako docker cp možná již znáte z vývoje místních kontejnerů.

kubectl cp vyžaduje zdrojové a cílové argumenty. Jedním ze zdrojů nebo cílů musí být reference pod. Toto je formátováno jako název podu, za nímž následuje dvojtečka a cesta k souborovému systému v kontejneru.

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

Tento příklad zkopíruje obsah /tmp/example-dir z example-pod do example-dir na vašem místním souborovém systému. Obrácení argumentů by zkopírovalo example-dir vašeho počítače zpět do modulu.

Argumenty příkazu

Vzhledem k tomu, že jeden pod pojme více nádob, je důležité na to pamatovat při používání cp . Kubernetes bude ve výchozím nastavení kopírovat do nebo z první instance kontejneru v Podu. Místo toho můžete cílit na konkrétní kontejner přidáním -c příznak:

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

Stejně jako všechny ostatní kubectl příkazy, cp běží proti připojení clusteru definovanému vaším KUBECONFIG proměnná prostředí. Toto výchozí nastavení je ~/.kube/conf .

Když odkazujete na moduly s jmenným prostorem, existují dvě možnosti. Můžete přidat standardní --namespace example-namespace příznak nebo použijte úplnou cestu pod v odkazu na váš souborový systém:

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

Atributy souboru jsou ve výchozím nastavení zachovány. Přidejte --no-preserve příznak k vašemu cp příkaz k odstranění dat vlastnictví a oprávnění z kopírovaných souborů ponechaných v cíli. Na rozdíl od běžného Unixu cp , Kubectlova implementace je vždy rekurzivní, takže odkazování na adresář bude zahrnovat i jeho obsah.

Když Kubectl Cp nebude fungovat

kubectl cp přichází s jedním velkým upozorněním:interně je to jednoduchý obal kolem tar . Příkaz zkomprimuje zdrojovou cestu, zkopíruje archiv do cíle a poté extrahuje jeho obsah. Obrázek kontejneru musí obsahovat tar binární na své cestě, aby to fungovalo.

To znamená kubectl cp nemusí být vždy možností, když dodržujete doporučené postupy Dockeru, aby byly obrázky malé. Ačkoli populární minimální základny takový jako alpine zahrňte tar , nemusí se objevit na každém obrázku a nebude přítomen, pokud je sestavujete od začátku.

Použití tar také omezuje to, co kubectl cp umí kopírovat. Nemůžete překládat symbolické odkazy ani používat zástupné znaky jako /tmp/*.log . Budete-li tuto funkci potřebovat, budete muset použít jiný přístup.

Jednou z možností je zkombinovat kubectl exec , cat příkaz a přesměrování shellu pro streamování obsahu souboru z clusteru do místního souboru:

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

kubectl exec příkaz spustí relaci shellu v modulu. Vše za -- běží uvnitř kontejneru. Výstup volání cat na souboru bude odeslán do vašeho terminálu, kde může být přesměrován do místního souboru.

Tato technika je vhodná, když kopírujete několik relativně malých souborů. Bylo by rychle únavné, pokud byste potřebovali získat velký adresář. Bohužel neexistuje lepší alternativa bez přidání dalšího softwaru do vašeho kontejneru.

Pokud si troufáte, můžete si do kontejneru nainstalovat SSH a použít scp pro přístup k jeho souborovému systému z vašeho hostitele. To by vám poskytlo kompletní zážitek z kopírování na úkor spuštění dalšího démona a vytvoření potenciálního bezpečnostního problému. Mělo by být zvažováno pouze u řádně chráněných clusterů.

Přidání tar do obrázků kontejneru je mnohem bezpečnější možnost. To vám umožní používat kubectl cp a odemkne pokročilejší ruční kopírování pomocí kubectl exec když potřebujete další funkce. Pokud narazíte na omezení s cp syntaxe, vyvolejte tar přímo přes kubectl exec pro přidání dalších příznaků k příkazu:

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

Tím se spustí tar -cF uvnitř vašeho kontejneru a přenese výsledek do tar xf příkaz extrakce na vašem místním počítači. - dává pokyn tar extrahovat data, která jsou do něj přiváděna prostřednictvím standardního vstupního toku. -C se používá k určení cílového adresáře.

Přehled

kubectl cp umožňuje kopírovat soubory mezi Kubernetes Pods a vaším počítačem. Funguje v obou směrech, ale nelze jej použít k přesunutí souborů z modulu do modulu. Pokud to potřebujete udělat, je nejlepší použít dvoufázový postup, zkopírujte nejprve z bloku A do vašeho zařízení a poté dále do bloku B.

Jako cp spoléhá na tar pod kapotou, musíte se ujistit, že je obsahuje obrázek kontejneru. Uvidíte No such file or directory tar chyba při pokusu o spuštění cp proti podu bez tar . V této situaci buď přidejte tar do kontejneru nebo použijte kombinaci kubectl exec a cat pokud potřebujete načíst pouze několik souborů.


Docker
  1. Jak kopírovat a upravovat soubory v prostředí Android?

  2. Najděte a zkopírujte soubory

  3. Jak sdílet soubory mezi Ubuntu a Mac OS X

  1. Kopírování souborů mezi Linuxem a FreeDOSem

  2. Jak přenášet soubory mezi místními a vzdálenými počítači pomocí protokolu SFTP

  3. Jak bezpečně kopírovat soubory mezi hostiteli Linuxu pomocí SCP a SFTP

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Jak restartovat Kubernetes Pods

  3. Jak kopírovat soubory a adresáře v Linuxu