kubectl describe în Kubernetes (kubectl)

Interogare resurse kubectl 1.0+

Afișează detaliile complete ale unei resurse, inclusiv evenimentele recente asociate.

Sintaxă comandă
kubectl describe TIP NUME [-n NS] | kubectl describe TIP -l selector

Ce face kubectl describe

Comanda kubectl describe prezintă o resursă într-un format lizibil pentru oameni: etichete, adnotări, configurația containerelor, volume, condiții de stare și, foarte important, secțiunea Events de la final, care arată ce s-a întâmplat recent cu obiectul.

Este primul pas de depanare când un pod rămâne în Pending, ImagePullBackOff sau CrashLoopBackOff: evenimentele îți spun dacă nu există resurse suficiente pe noduri, dacă imaginea nu poate fi descărcată sau dacă verificarea de sănătate (probe) eșuează.

Spre deosebire de kubectl get -o yaml, care arată obiectul brut, describe agregă informații din mai multe surse (de exemplu, pentru un Service afișează și endpoint-urile curente) și nu poate fi folosit ca intrare pentru apply.

Opțiuni și argumente

Opțiune / Parametru Descriere
TIP NUME Resursa descrisă, de exemplu pod web-7c5ddbdf54-4xkqp sau node worker-1.
TIP/NUME Formă echivalentă, de exemplu deploy/web.
-n, --namespace=NS Namespace-ul resursei.
-l, --selector=... Descrie toate resursele care au etichetele indicate.
--show-events=false Nu afișează secțiunea Events (implicit este afișată).
-A, --all-namespaces Caută resursele în toate namespace-urile.

Exemple

Exemplul 1: De ce stă un pod în Pending?

Evenimentul FailedScheduling arată că niciun nod nu are suficient CPU pentru cererile (requests) pod-ului.

kubectl describe pod api-6f9b8d7c4-xq7hd

Ieșire în terminal

Name:             api-6f9b8d7c4-xq7hd
Namespace:        shop
Priority:         0
Service Account:  default
Node:             <none>
Labels:           app=api
                  pod-template-hash=6f9b8d7c4
Status:           Pending
IP:
Controlled By:    ReplicaSet/api-6f9b8d7c4
Containers:
  api:
    Image:      registry.example.ro/shop/api:2.4.1
    Port:       8080/TCP
    Requests:
      cpu:        4
      memory:     2Gi
...
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  42s   default-scheduler  0/3 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 2 Insufficient cpu. preemption: 0/3 nodes are available: 1 Preemption is not helpful for scheduling, 2 No preemption victims found for incoming pod.

Exemplul 2: Imagine care nu poate fi descărcată

Am afișat doar secțiunea de evenimente cu grep -A.

kubectl describe pod web-5d8f7b9c6-kq2lp | grep -A 10 Events

Ieșire în terminal

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  95s                default-scheduler  Successfully assigned shop/web-5d8f7b9c6-kq2lp to worker-2
  Normal   Pulling    50s (x3 over 94s)  kubelet            Pulling image "nginx:1.277"
  Warning  Failed     49s (x3 over 93s)  kubelet            Failed to pull image "nginx:1.277": rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/library/nginx:1.277": not found
  Warning  Failed     49s (x3 over 93s)  kubelet            Error: ErrImagePull
  Normal   BackOff    12s (x4 over 92s)  kubelet            Back-off pulling image "nginx:1.277"
  Warning  Failed     12s (x4 over 92s)  kubelet            Error: ImagePullBackOff

Exemplul 3: Capacitatea și alocările unui nod

Secțiunea Allocated resources arată cât din CPU și memorie este deja rezervat prin requests.

kubectl describe node worker-1 | grep -A 8 "Allocated resources"

Ieșire în terminal

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests      Limits
  --------           --------      ------
  cpu                1850m (92%)   3 (150%)
  memory             2780Mi (72%)  4Gi (106%)
  ephemeral-storage  0 (0%)        0 (0%)
  hugepages-2Mi      0 (0%)        0 (0%)

Greșeli frecvente

  • Ignorarea secțiunii Events, unde se află aproape întotdeauna cauza problemei.
  • Așteptarea ca evenimentele să existe mult timp: implicit sunt păstrate aproximativ o oră, deci problemele vechi nu mai apar în describe.

Comenzi înrudite

  • kubectl get: Listează una sau mai multe resurse, într-un tabel sau în format YAML/JSON.
  • kubectl events: Listează și urmărește evenimentele din cluster ordonate cronologic, cu filtrare după obiect sau severitate.
  • kubectl logs: Afișează sau urmărește în timp real ieșirea standard (stdout/stderr) a containerelor.
  • kubectl debug: Atașează un container efemer de depanare unui pod existent, îi face o copie sau deschide o sesiune pe un nod.