Labels and Selectors trong Kubernetes

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:

Manual Scheduling trong K8s

Imperative và Declarative trong K8S

1. Khái niệm Labels và Selectors

Labels là các thuộc tính (key-value pairs) được gán cho các đối tượng Kubernetes (Pods, Services, Kubernetes Deployments,…) để phân loại và nhóm chúng.

Selectors là các bộ lọc sử dụng Labels để chọn ra các đối tượng Kubernetes cụ thể.

2. 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:

  • Loài: Thú, Chim, Cá,…
  • Môi trường sống: Hoang dã, Nuôi nhốt
  • Màu sắc: Xanh, Đỏ, Vàng,…

Selectors giúp bạn lọc ra các con vật cụ thể.

Ví dụ:

  • Chọn tất cả các con vật thuộc lớp Thú: class=Thú
  • Chọn tất cả các con vật màu xanh: color=Xanh
  • Kết hợp nhiều tiêu chí: class=Chim, color=Xanh (chọn tất cả các con chim màu xanh)

3. Ứng dụng trong Kubernetes

Kubernetes sử dụng Labels và Selectors để quản lý và tổ chức hàng trăm, hàng nghìn đối tượng.

Ví dụ:

  • Gom nhóm các Pods trong kubernetes: ReplicaSet sử dụng Selectors để xác định các Pods mà nó quản lý.
  • Kết nối Services với Pods: Service sử dụng Selectors để tìm và chuyển tiếp traffic đến các Pods phù hợp.

4. Cách sử dụng Labels và Selectors trong Kubernetes:

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

Annotations cũng là các key-value pairs nhưng được sử dụng để lưu trữ thông tin bổ sung, không dùng để phân loại hay lọc đối tượng.

Ví dụ về Annotations: thông tin về phiên bản, tác giả, liên lạc,…

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:

Namespace và Cgroups trong K8S

ClusterIP, NodePort, Loadbalance – Các loại service K8S

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em