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ă
--overwritecând cheia există deja: comanda eșuează cualready has a value. - Stocarea datelor mari sau cu caractere speciale (URL-uri, JSON) în
labelsîn loc deannotations: 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.