kubectl exec în Kubernetes (kubectl)

Depanare și acces kubectl 1.0+

Execută o comandă sau deschide un shell interactiv într-un container care rulează.

Sintaxă comandă
kubectl exec [-it] (POD | TIP/NUME) [-c CONTAINER] -- COMANDĂ [ARGUMENTE...]

Ce face kubectl exec

Comanda kubectl exec rulează un proces nou în interiorul unui container deja pornit. Cu opțiunile -i (stdin deschis) și -t (alocă un pseudo-TTY), adică -it, poți deschide un shell interactiv (sh sau bash) ca să inspectezi fișierele, variabilele de mediu sau conectivitatea de rețea din perspectiva pod-ului.

Separatorul -- este important: tot ce urmează după el este trimis ca argumente comenzii din container, nu interpretat ca opțiune a lui kubectl.

Dacă imaginea este distroless sau bazată pe scratch și nu conține /bin/sh, ori dacă pod-ul nici nu pornește, folosește kubectl debug (containere efemere) în loc de exec.

Opțiuni și argumente

Opțiune / Parametru Descriere
-i, --stdin Trimite intrarea standard (stdin) către container.
-t, --tty Alocă un terminal interactiv (se combină uzual ca -it).
-c, --container=NUME Alege containerul țintă când pod-ul are mai multe.
-- Delimitator între opțiunile kubectl și comanda executată în container.

Exemple

Exemplul 1: Deschiderea unui shell interactiv în pod

Pe imaginile Alpine sau slim în care nu există bash, folosește sh.

kubectl exec -it api-6f9b8d7c4-lm2vd -- sh

Ieșire în terminal

/app $ ls -la
total 28412
drwxr-xr-x    1 app      app           4096 Apr 18 14:20 .
-rwxr-xr-x    1 app      app       29081600 Apr 18 14:20 server
/app $ exit

Exemplul 2: Rularea unei singure comenzi fără shell interactiv

Verificăm variabilele de mediu sau răspunsul unui serviciu intern.

kubectl exec deploy/api -- printenv DATABASE_HOST
kubectl exec deploy/api -- wget -qO- http://localhost:8080/healthz

Ieșire în terminal

postgres.shop.svc.cluster.local
{"status":"ok","db":"connected"}

Greșeli frecvente

  • Omiterea lui -- înainte de o comandă cu flag-uri (de ex. kubectl exec pod ls -la): kubectl încearcă să interpreteze -la ca opțiune proprie.
  • Modificarea manuală a fișierelor din container cu exec: la prima repornire a pod-ului tot ce ai schimbat pe filesystemul efemer dispare.

Comenzi înrudite

  • kubectl debug: Atașează un container efemer de depanare unui pod existent, îi face o copie sau deschide o sesiune pe un nod.
  • kubectl logs: Afișează sau urmărește în timp real ieșirea standard (stdout/stderr) a containerelor.
  • kubectl cp: Copiază fișiere și directoare între mașina locală și un container dintr-un pod.
  • kubectl port-forward: Redirecționează un port local de pe mașina ta către un Pod, Deployment sau Service din cluster.