Trong bài viết này, hãy cùng mình tìm hiểu về Node Affinity, một tính năng trong Kubernetes cho phép bạn kiểm soát vị trí của các Pod trên các Node.
Xem thêm:
1. Node Affinity là gì?
Node Affinity là một tính năng cho phép bạn đặt giới hạn cho việc đặt Pod trong kubernetes trên các Node cụ thể, cung cấp thêm khả năng so với Node Selectors.
2. Cách Node Affinity hoạt động
Node Affinity được định nghĩa trong phần spec.affinity.nodeAffinity
của một Pod. Nó sử dụng các điều khoản (nodeSelectorTerms) để chỉ định các yêu cầu về label của Node mà Pod muốn được đặt trên đó.
Mỗi điều khoản bao gồm các cặp key, operator, và value để so sánh với các label của Node.
Các operator phổ biến:
- in: Pod sẽ được đặt trên Node có label key với giá trị nằm trong danh sách value.
- notin: Pod sẽ được đặt trên Node có label key với giá trị không nằm trong danh sách value.
- exists: Pod sẽ được đặt trên Node có label key tồn tại, bất kể giá trị là gì.
3. Các loại Node Affinity
requiredDuringScheduling, ignoredDuringExecution: Yêu cầu Node phải thỏa mãn điều kiện trong quá trình scheduling, nhưng không ảnh hưởng đến Pod sau khi được scheduling. Nếu không tìm thấy Node phù hợp, Pod sẽ không được scheduling.
preferredDuringScheduling, ignoredDuringExecution: Ưu tiên Node thỏa mãn điều kiện trong quá trình scheduling, nhưng không ảnh hưởng đến Pod sau khi được scheduling. Nếu không tìm thấy Node phù hợp, Pod sẽ được đặt trên Node bất kỳ.
requiredDuringScheduling, requiredDuringExecution: Yêu cầu Node phải thỏa mãn điều kiện trong cả quá trình scheduling và execution. Nếu Node không còn phù hợp (ví dụ: bị xóa label), Pod sẽ bị evicted.
4. Sự khác biệt giữa Node Affinity và Node Selectors
Node Selectors chỉ cho phép bạn sử dụng các phép so sánh đơn giản như key=value.
Node Affinity cung cấp các phép so sánh phức tạp hơn, chẳng hạn như in, notin, exists, và cho phép bạn kết hợp nhiều điều kiện.
5. Lưu ý
Node Affinity chỉ là một phần của hệ thống scheduling, nó có thể bị ảnh hưởng bởi các yếu tố khác như Taints và Tolerations.
Việc sử dụng Node Affinity có thể làm phức tạp việc quản lý Cluster. Bạn cần cân nhắc kỹ các lợi ích và nhược điểm trước khi sử dụng tính năng này.
6. Cách kết hợp Taint andTolerations và Node Affinity
Phân bổ các Pod trong k8s theo màu sắc của chúng (Blue, Red, Green) trên các Node tương ứng (Blue, Red, Green) trong một môi trường Kubernetes.
- Đặt Pod màu xanh (Blue) lên Node màu xanh (Blue).
- Đặt Pod màu đỏ (Red) lên Node màu đỏ (Red).
- Đặt Pod màu xanh lá (Green) lên Node màu xanh lá (Green).
Taints và Tolerations:
- Bước 1: Áp dụng Taints lên các Node, đánh dấu chúng bằng màu sắc tương ứng (Blue, Red, Green).
- Bước 2: Đặt Tolerations lên các Pod phù hợp với các Taints tương ứng.
Kết quả: Các Pod sẽ được đặt lên các Node tương ứng về màu sắc.
Nhược điểm: Không đảm bảo các Pod sẽ chỉ được ưu tiên đặt trên các Node tương ứng. Ví dụ, Pod Red có thể được đặt lên một Node khác không có Taints hoặc Tolerations.
Node Affinity:
- Bước 1: Đặt Label cho các Node bằng màu sắc tương ứng (Blue, Red, Green).
- Bước 2: Đặt Node Selectors lên các Pod để liên kết chúng với các Node.
Kết quả: Các Pod sẽ được đặt lên các Node tương ứng về màu sắc.
Nhược điểm: Không đảm bảo các Node sẽ không bị các Pod khác đặt lên. Ví dụ, một Pod khác có thể được đặt lên Node Blue.
Kết hợp Taints, Tolerations và Node Affinity:
- Bước 1: Sử dụng Taints và Tolerations để ngăn các Pod khác được đặt lên Node của nhóm.
- Bước 2: Sử dụng Node Affinity để ngăn các Pod của nhóm được đặt lên Node của các nhóm khác.
Kết quả: Đảm bảo các Pod được đặt lên các Node tương ứng về màu sắc, và không bị các Pod khác đặt lên.
Hy vọng bài viết này đã giúp bạn đã có thêm kiến thức về Node Affinity. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan: