Labels và Selectors trong Kubernetes: Cách Phân Loại và Quản Lý Đối Tượng Hiệu Quả¶
Giới thiệu về Labels và Selectors¶
Labels và selectors là phương pháp tiêu chuẩn để nhóm và lọc các đối tượng trong Kubernetes. Tương tự như cách chúng ta gắn thẻ (tag) cho các video YouTube hoặc bài blog để giúp người dùng lọc và tìm nội dung phù hợp, labels trong Kubernetes giúp chúng ta phân loại và quản lý các đối tượng trong cụm (cluster).
Khái niệm cơ bản¶
Hãy hình dung một ví dụ đơn giản: Bạn có nhiều loài động vật khác nhau và muốn phân loại chúng theo các tiêu chí như:
- Lớp (class): động vật có vú, chim, bò sát...
- Loại (kind): hoang dã hay được thuần hóa
- Màu sắc (color): xanh, đỏ, vàng...
Với labels, bạn có thể gắn các thuộc tính này cho mỗi loài. Và với selectors, bạn có thể lọc ra:
- Tất cả động vật có vú (
class=mammal
) - Tất cả động vật màu xanh (
color=green
) - Hoặc kết hợp: tất cả chim màu xanh (
class=bird,color=green
)
Labels và Selectors trong Kubernetes¶
Trong Kubernetes, chúng ta tạo ra nhiều loại đối tượng khác nhau: Pods, Services, ReplicaSets, Deployments, v.v. Khi hệ thống phát triển, bạn có thể có hàng trăm hoặc hàng nghìn đối tượng trong cluster. Lúc này, việc quản lý và lọc các đối tượng trở nên quan trọng.
Cách sử dụng Labels trong Kubernetes¶
Trong file định nghĩa của pod, bạn thêm labels dưới phần metadata
:
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: app1
function: front-end
environment: production
spec:
containers:
- name: nginx
image: nginx
Bạn có thể thêm bao nhiêu labels tùy ý, tùy thuộc vào nhu cầu phân loại.
Sử dụng Selectors để lọc đối tượng¶
Để lọc pods dựa trên labels, sử dụng lệnh:
Hoặc lọc với nhiều tiêu chí:
Vai trò của Labels và Selectors trong Kubernetes¶
1. Trong ReplicaSets¶
ReplicaSets sử dụng selectors để xác định và quản lý các pods. Trong file định nghĩa ReplicaSet, labels xuất hiện ở hai vị trí:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
labels:
app: my-app # Labels của ReplicaSet
spec:
replicas: 3
selector:
matchLabels:
app: front-end # Đây là selector để tìm pods
template:
metadata:
labels:
app: front-end # Labels của pods được tạo
spec:
containers:
- name: nginx
image: nginx
Lưu ý quan trọng:
- Labels ở phần
metadata
là của ReplicaSet - Labels ở phần
template.metadata
là của pods được tạo bởi ReplicaSet - Selector phải khớp với labels của pods để ReplicaSet có thể tìm và quản lý pods
Đây là nơi người mới thường mắc lỗi: nhầm lẫn giữa labels của ReplicaSet và labels của pods template.
2. Trong Services¶
Services cũng sử dụng selectors để xác định pods mà chúng sẽ điều hướng traffic đến:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: front-end # Tìm pods với label này
ports:
- port: 80
targetPort: 80
Annotations - Khác biệt với Labels¶
Trong khi labels được sử dụng để nhóm và chọn đối tượng, annotations được sử dụng để ghi lại thông tin bổ sung cho mục đích tham khảo:
- Thông tin công cụ: tên, phiên bản, thông tin build
- Thông tin liên hệ: số điện thoại, email IDs
- Thông tin khác phục vụ cho mục đích tích hợp
Annotations không được sử dụng để lựa chọn đối tượng.
metadata:
annotations:
buildVersion: "1.3.4"
maintainer: "team-devops@example.com"
gitRepo: "https://github.com/example/my-app"
Tổng kết¶
Labels và selectors là công cụ mạnh mẽ trong Kubernetes để:
- Tổ chức và phân loại các đối tượng
- Lọc và tìm kiếm đối tượng theo tiêu chí
- Kết nối các đối tượng Kubernetes khác nhau (ReplicaSets, Services với Pods)
Hiểu và sử dụng đúng labels và selectors sẽ giúp bạn quản lý cluster Kubernetes hiệu quả hơn, đặc biệt khi hệ thống phát triển lớn.