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.