kubectl label / kubectl annotate în Kubernetes (kubectl)

Creare și actualizare kubectl 1.0+

Adaugă, modifică sau șterge etichete (labels) și adnotări (annotations) pe orice resursă.

Sintaxă comandă
kubectl label|annotate RESURSĂ NUME CHEIE=VALOARE [CHEIE_VECHE-] [--overwrite]

Ce face kubectl label / kubectl annotate

În Kubernetes, etichetele (labels) și adnotările (annotations) sunt ambele perechi cheie: valoare din metadata, dar au roluri diferite:

Labels sunt folosite pentru identificare și selecție: după ele filtrezi cu kubectl get -l, după ele își găsesc Service-urile și Deployment-urile pod-urile, și după ele poți fixa pod-uri pe anumite noduri (nodeSelector). Valorile lor sunt scurte (max. 63 de caractere, doar litere, cifre, -, _, .).

Annotations stochează metadate nestructurate care nu sunt folosite în selectori: cine a făcut deploy-ul, linkul către commit-ul Git, configurații pentru controllere externe (Ingress NGINX, cert-manager, Prometheus). Pot conține orice text, inclusiv JSON.

Opțiuni și argumente

Opțiune / Parametru Descriere
CHEIE=VALOARE Adaugă o etichetă sau o adnotare nouă.
CHEIE- Cu minus la final: șterge eticheta sau adnotarea cu acea cheie.
--overwrite Permite suprascrierea unei chei care există deja.
-l, --selector=... Aplică modificarea pe toate resursele care corespund selectorului.
--all Aplică pe toate resursele de tipul specificat din namespace.

Exemple

Exemplul 1: Etichetarea unui nod și a unui pod

Adăugăm eticheta disktype=nvme pe un nod (pentru nodeSelector), apoi o ștergem cu sufixul -.

kubectl label node worker-1 disktype=nvme
kubectl get nodes -L disktype
kubectl label node worker-1 disktype-

Ieșire în terminal

node/worker-1 labeled
NAME            STATUS   ROLES           AGE   VERSION   DISKTYPE
control-plane   Ready    control-plane   42d   v1.31.1
worker-1        Ready    <none>          42d   v1.31.1   nvme
worker-2        Ready    <none>          42d   v1.31.1
node/worker-1 unlabeled

Exemplul 2: Scoaterea temporară a unui pod din Service pentru depanare

Dacă suprascriem eticheta după care filtrează Service-ul (app=api), pod-ul rămâne pornit pentru investigații, dar nu mai primește trafic, iar Deployment-ul pornește o replică nouă în loc.

kubectl label pod api-6f9b8d7c4-x7k2p app=api-debug --overwrite

Ieșire în terminal

pod/api-6f9b8d7c4-x7k2p labeled

Exemplul 3: Adăugarea unei adnotări pe un Service sau Deployment

kubectl annotate deployment api kubernetes.io/change-cause="Upgrade la v1.4.2 (fix #412)" --overwrite

Ieșire în terminal

deployment.apps/api annotated

Greșeli frecvente

  • Modificarea unei etichete fără --overwrite când cheia există deja: comanda eșuează cu already has a value.
  • Stocarea datelor mari sau cu caractere speciale (URL-uri, JSON) în labels în loc de annotations: API server-ul le va respinge la validare.

Comenzi înrudite

  • kubectl get: Listează una sau mai multe resurse, într-un tabel sau în format YAML/JSON.
  • Obiectul Service: Oferă o adresă IP stabilă, un nume DNS intern și load-balancing către un grup de Pod-uri.
  • Obiectul Deployment: Gestionează aplicații stateless replicabile: menține numărul de pod-uri, le înlocuiește când cad și face rolling updates.
  • Obiectul Ingress: Expune servicii HTTP și HTTPS în afara clusterului, cu rutare după domeniu/cale și terminare TLS.