← Về danh sách bài học
Bài 10/25
🏷️ Bài 10: Labels & Selectors
🎯 Sau bài học này, bạn sẽ:
- Hiểu Labels và Annotations khác gì
- Gắn labels cho resources
- Sử dụng selectors để query/filter
- Áp dụng trong Deployment, Service
1. Labels Là Gì?
Labels là key-value pairs gắn vào resources để tổ chức và chọn lọc.
metadata:
name: my-pod
labels:
app: nginx
environment: production
tier: frontend
version: v1.2.0
💡 Labels dùng để:
• Service tìm Pods để route traffic
• Deployment quản lý Pods
• Query/filter resources với kubectl
• Tổ chức theo team, environment, version
• Service tìm Pods để route traffic
• Deployment quản lý Pods
• Query/filter resources với kubectl
• Tổ chức theo team, environment, version
2. Labels vs Annotations
| Labels | Annotations |
|---|---|
| Dùng để identify, select | Metadata bổ sung, không select được |
| Service, Deployment query | Tools đọc (monitoring, logging) |
app: nginx |
prometheus.io/scrape: "true" |
3. Quản Lý Labels
# Xem labels
kubectl get pods --show-labels
# Thêm label
kubectl label pod my-pod team=backend
# Thay đổi label (cần --overwrite)
kubectl label pod my-pod version=v2 --overwrite
# Xóa label
kubectl label pod my-pod team-
# Label nhiều pods
kubectl label pods -l app=nginx tier=frontend
4. Selectors - Query Resources
Equality-based Selectors
# Pods có label app=nginx
kubectl get pods -l app=nginx
# Pods không có label app=nginx
kubectl get pods -l app!=nginx
# AND: nhiều điều kiện
kubectl get pods -l app=nginx,environment=production
Set-based Selectors
# app IN (nginx, apache)
kubectl get pods -l 'app in (nginx, apache)'
# app NOT IN
kubectl get pods -l 'app notin (test, dev)'
# Có label 'environment' (bất kỳ value)
kubectl get pods -l environment
# Không có label 'environment'
kubectl get pods -l '!environment'
5. Selectors Trong YAML
Deployment selector
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
selector:
matchLabels: # Equality-based
app: web
tier: frontend
matchExpressions: # Set-based
- key: environment
operator: In
values: [production, staging]
template:
metadata:
labels: # Pods phải có labels này
app: web
tier: frontend
environment: production
Service selector
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
tier: frontend
ports:
- port: 80
6. Best Practices
💡 Labels phổ biến:
•
•
•
•
•
•
•
app - Tên ứng dụng•
environment - dev, staging, production•
tier - frontend, backend, database•
version - v1, v2•
team - Đội sở hữu•
release - Tên release (Helm)
# K8s recommended labels
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: wordpress-mysql
app.kubernetes.io/version: "8.0"
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/managed-by: helm
📝 Tóm Tắt Bài Học
- Labels: key-value pairs để tổ chức, select
- Selectors: Query resources theo labels
-l app=nginx: Equality selector'app in (a,b)': Set-based selector- Service, Deployment dùng selector để tìm Pods