Node Selector trong Kubernetes

Trong bài viết này, hãy cùng mình tìm hiểu về Node Selector, một cách để kiểm deploy pod tới node mong muốn trong Kubernetes.

Xem thêm:

Taints và Tolerations trong Kuberbetes

Labels and Selectors trong Kubernetes

1. Vấn đề

Bạn có một cluster Kubernetes với 3 Nodes: 2 Node nhỏ (ít tài nguyên) và 1 Node lớn (nhiều tài nguyên).

Bạn muốn ứng dụng cần nhiều tài nguyên chạy trên Node lớn để đảm bảo hiệu suất. Tuy nhiên, scheduler trong kubernetes tự động điều các pod đến các node dẫn đến trường hợp Pods của ứng dụng cần nhiều tài nguyên có thể chạy trên Node nhỏ, gây thiếu hụt tài nguyên.

Node Selector

2. Giải pháp – Node Selectors

Node Selectors cho phép bạn gắn nhãn (label) cho Nodes và chọn lọc (select) Nodes dựa trên nhãn khi tạo Pods.

Xem thêm:

Labels and Selectors trong Kubernetes

3. Cách thức hoạt động

– Bước 1: Gắn nhãn cho Nodes:

Sử dụng câu lệnh kubectl label nodes <node-name> <key>=<value>

Ví dụ:

kubectl label nodes node-1 size=large (gắn nhãn "size=large" cho Node có tên "node-1").

Bước 2: Định nghĩa Node Selectors trong Pod Definition:

Thêm phần nodeSelector vào spec trong file YAML định nghĩa Pod.

Chỉ định cặp key-value tương ứng với nhãn của Node muốn Pods chạy trên đó.

Ví dụ pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
  nodeSelector:
    size: large
kubectl create –f pod-definition.yml

4. Hạn chế của Node Selectors

Node Selectors chỉ hỗ trợ lựa chọn dựa trên một cặp key-value duy nhất. Bạn không thể sử dụng các biểu thức phức tạp hơn như OR, NOT, ..

5. Giải pháp thay thế

Sử dụng Node Affinity và Node Anti-Affinity để có thể lựa chọn Nodes linh hoạt hơn dựa trên nhiều điều kiện phức tạp.

Node Affinity

Tóm lại, Node Selectors là cách đơn giản để kiểm soát Pods chạy trên Nodes cụ thể dựa trên nhãn.
Tuy nhiên, với yêu cầu phức tạp hơn, bạn cần sử dụng Node Affinity và Node Anti-Affinity. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.

Bài viết liên quan:

Manual Scheduling trong 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