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