Labels giúp gán thông tin tùy chỉnh cho các đối tượng như Pods và Nodes, trong khi Selectors cho phép bạn lọc và lựa chọn các đối tượng đó một cách linh hoạt và hiệu quả. Trong bài viết này, hãy cùng mình tìm hiểu cách sử dụng Labels and Selectors trong Kubernetes.
Xem thêm:
1. Khái niệm Labels và Selectors
Labels giống như mấy cái nhãn dán bạn gắn vào từng đối tượng trong Kubernetes (như Pod, Node, Deployment…). Nó có dạng key=value để phân loại, ví dụ như:
env=productionapp=webteam=backend
Selectors thì giống như bộ lọc, dùng để tìm ra những đối tượng nào có label phù hợp với điều kiện bạn đưa ra.
Nói cách khác: Labels để gắn, Selectors để lọc.
Ví dụ minh họa:
Giả sử bạn có một vườn thú ảo với nhiều loài động vật.
Bạn có thể gắn Labels cho mỗi con vật dựa trên:
- class=Thú (hổ, gấu…)
- class=Chim (vẹt, cú mèo…)
- color=Xanh, color=Đỏ, color=Vàng
- habitat=NuôiNhốt, habitat=HoangDã
Giờ nếu bạn muốn tìm:
- Tất cả các con thuộc lớp Thú →
class=Thú - Tất cả các con màu xanh →
color=Xanh - Tất cả các con chim màu xanh →
class=Chim, color=Xanh
Thì bạn dùng Selectors để “lọc” ra mấy con phù hợp!
2. Ứng dụng trong Kubernetes
Kubernetes dùng Labels và Selectors để quản lý hệ thống một cách linh hoạt, ví dụ:
- ReplicaSet dùng Selector để nhận diện những Pod mà nó quản lý.
- Service dùng Selector để biết Pod nào sẽ nhận traffic.
Tức là, khi bạn tạo một Service, bạn chỉ cần nói “này Service, mày tìm mấy cái Pod có app=web nha”, và Kubernetes sẽ tự kết nối mọi thứ cho bạn luôn.
3. Cách sử dụng Labels và Selectors
Ví dụ chúng ta đã triển khai các pod và gán nhãn tier, env, bu.
controlplane ~ ➜ kubectl get pods NAME READY STATUS RESTARTS AGE db-1-4tmgs 1/1 Running 0 4m14s db-2-h9sx5 1/1 Running 0 4m14s app-1-vddc2 1/1 Running 0 4m15s db-1-bbgf5 1/1 Running 0 4m14s auth 1/1 Running 0 4m14s app-1-rt8v4 1/1 Running 0 4m15s app-2-m9l77 1/1 Running 0 4m14s app-1-zzxdf 1/1 Running 0 4m14s app-1-jnlkb 1/1 Running 0 4m15s db-1-hxj48 1/1 Running 0 4m14s db-1-cl5zr 1/1 Running 0 4m14s
– Lọc các pod có env=dev
controlplane ~ ➜ kubectl get pods --selector env=dev NAME READY STATUS RESTARTS AGE db-1-4tmgs 1/1 Running 0 4m3s app-1-vddc2 1/1 Running 0 4m4s db-1-bbgf5 1/1 Running 0 4m3s app-1-rt8v4 1/1 Running 0 4m4s app-1-jnlkb 1/1 Running 0 4m4s db-1-hxj48 1/1 Running 0 4m3s db-1-cl5zr 1/1 Running 0 4m3s
– Lọc các pod có bu=finance
controlplane ~ ✖ kubectl get pods --selector bu=finance NAME READY STATUS RESTARTS AGE db-2-h9sx5 1/1 Running 0 5m25s app-1-vddc2 1/1 Running 0 5m26s auth 1/1 Running 0 5m25s app-1-rt8v4 1/1 Running 0 5m26s app-1-zzxdf 1/1 Running 0 5m25s app-1-jnlkb 1/1 Running 0 5m26s
– Lọc các pod, replicaset và cả objects khac có env=prod
controlplane ~ ✖ kubectl get all --selector env=prod NAME READY STATUS RESTARTS AGE pod/db-2-h9sx5 1/1 Running 0 7m30s pod/auth 1/1 Running 0 7m30s pod/app-2-m9l77 1/1 Running 0 7m30s pod/app-1-zzxdf 1/1 Running 0 7m30s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/app-1 ClusterIP 10.43.138.121 <none> 3306/TCP 7m30s NAME DESIRED CURRENT READY AGE replicaset.apps/db-2 1 1 1 7m30s replicaset.apps/app-2 1 1 1 7m30s
– Lọc các pod có env=prod, tier=frontend, bu=finace
controlplane ~ ✖ kubectl get pods --selector env=prod,bu=finance,tier=frontend NAME READY STATUS RESTARTS AGE app-1-zzxdf 1/1 Running 0 9m25s
5. Annotations
Ngoài Labels, còn có một người anh em nữa tên là Annotations.
- Labels dùng để lọc và phân loại.
- Annotations thì dùng để ghi chú thêm thông tin mà không ảnh hưởng đến việc lọc.
Ví dụ, bạn có thể gắn thông tin build version, maintainer, commit hash… vào annotation.
Hy vọng qua bài viết này, bạn đã nắm vững cách sử dụng Labels and Selectors trong Kubernetes. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan: