kubectl cp kopiuje pliki i katalogi między podem w klastrze Kubernetes a Twoją maszyną lokalną — w obie strony. Przydaje się, gdy chcesz wyciągnąć log albo dump z działającego kontenera bez budowania nowego obrazu, albo wrzucić do poda jednorazowy plik konfiguracyjny do testów. Pod spodem to w zasadzie nakładka na tar przepuszczony przez kubectl exec, co ma kilka praktycznych konsekwencji, o których za chwilę.
Składnia i najważniejsze opcje
Podstawowa składnia: kubectl cp , gdzie ścieżka w podzie ma format namespace/pod:/sciezka (namespace możesz pominąć, jeśli używasz domyślnego).
-c, --container— wskazuje konkretny kontener w podzie; bez tego kubectl bierze pierwszy kontener (lub ten z adnotacjidefault-container).-n, --namespace— ustawia namespace dla polecenia, alternatywnie do prefiksu w ścieżce.--retries— liczba ponowień przy zerwanym kopiowaniu; domyślnie0(brak), wartość ujemna oznacza nieskończone próby.--no-preserve— nie zachowuje właściciela ani uprawnień plików po stronie docelowej.
Przykłady użycia
kubectl cp moj-pod:/var/log/app.log ./app.log— pobiera log z poda na dysk lokalny.kubectl cp ./config.yaml moj-pod:/etc/app/config.yaml— wrzuca lokalny plik do poda.kubectl cp prod/moj-pod:/data/dump.sql ./dump.sql -c baza— kopiuje z konkretnego kontenerabazaw namespaceprod.kubectl cp ./katalog moj-pod:/tmp/katalog— kopiuje cały katalog rekurencyjnie.kubectl cp moj-pod:/data ./backup --retries=-1— pobiera duży katalog z nieskończonym ponawianiem przy zerwaniu połączenia.
Częste błędy i pułapki
Najczęstsza wpadka: kontener musi mieć w sobie binarkę tar. Obrazy typu scratch, distroless czy minimalne Alpine bez doinstalowanego tar sprawią, że kubectl cp po prostu padnie — wtedy ratuje się np. kubectl exec ... -- cat plik > lokalny.
Druga sprawa: ścieżek w podzie nie podaje się ze schematem hosta — separatorem między podem a ścieżką jest dwukropek, więc moj-pod:/tmp, a nie moj-pod /tmp. Pamiętaj też, że ścieżki absolutne zaczynające się od / liczą się od korzenia kontenera, a względne — od katalogu roboczego procesu, co bywa mylące. Przy bardzo dużych transferach licz się z zerwaniami i ustaw --retries.
Powiązane komendy: kubectl exec, kubectl logs, kubectl get pods, scp, docker cp.