Taints vs Tolerations trong Kubernetes

Trong bài viết này, hãy cùng mình tìm hiểu về Taints và Tolerations trong Kuberbetes, hai khái niệm quan trọng trong Kubernetes giúp bạn kiểm soát việc lên lịch (scheduling) cho Pods trên các Nodes cụ thể.

1. Taints và Tolerations trong Kubernetes

Taints và Tolerations giúp ngăn chặn một pod trong k8s được deploy tới node mà ta không mong muốn.

Taints: Được gắn vào Nodes, xác định những hạn chế về Pods có thể chạy trên Node đó. Taints được dùng để cấm một pod deploy tới worker node mà có taints.

Tolerations: Được cấu hình trong Pods, cho phép Pods “chấp nhận” Taints của Nodes và chạy trên đó. Tolerations được dùng để gán vào pod, và những pod nào mà được gán tolerations thỏa mãn với điều kiện taints thì sẽ được deploy lên những worker node mà có gán taints.

Taints

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

Khi tạo Pod, Kubernetes Scheduler sẽ tìm kiếm Node phù hợp để chạy Pod.

Nếu Node có Taints, Scheduler sẽ kiểm tra xem Pod có Tolerations phù hợp hay không. Chỉ khi Pod có Tolerations phù hợp với Taints của Node, Pod mới được lên lịch chạy trên Node đó.

3. Các loại Taints Effects

NoSchedule: khi giá trị này được gán vào taints, nó sẽ không cho phép pod được deploy lên nó.

PreferNoSchedule: giá trị này cũng có tác dụng giống như NoSchedule, nhưng khác biệt một điểm là nếu Pod không thể được deploy tới bất kì node nào, mà node với effect là PreferNoSchedule có đủ tài nguyên để chạy pod, thì pod có thể được deploy lên nó.

NoExecute: không giống như NoSchedule và PreferNoSchedule chỉ có tác dụng khi pod được scheduling, thì giá trị effect này sẽ ảnh hưởng lên cả pod mà đang chạy trên node, nếu pod không có tolerations phù hợp với taints thì nó cũng sẽ bị gỡ khỏi node đó. Ví dụ ta có pod đang chạy trên một woker node, sau đó ta đánh taints node đó với effect là NoExecute, thì những pod nào đang chạy trên node đó mà không có tolerations phù hợp sẽ bị gỡ khỏi pod.

Taints and Toleration

4. Ví dụ cụ thể

Bạn có 3 Nodes: Node 1, Node 2, Node 3.

Bạn muốn dành riêng Node 1 cho ứng dụng “App-Blue”.

Bạn sẽ:

Gắn Taint app=blue:NoSchedule cho Node 1.

Thêm Toleration app=blue:NoSchedule vào Pod của ứng dụng “App-Blue”.

– Create a taint on node01 with key of spray, value of mortein and effect of NoSchedule:

controlplane ~ ➜  kubectl taint nodes node01 spray=mortein:NoSchedule
node/node01 tainted

5. Lưu ý quan trọng

Taints và Tolerations chỉ hạn chế Pods chạy trên Nodes, không đảm bảo Pods luôn chạy trên Node cụ thể.

Để đảm bảo Pod luôn chạy trên Node cụ thể, bạn cần sử dụng Node Affinity.

6. Taints trên Master Node:

Master Node mặc định có Taint để ngăn chặn Pods chạy trên đó, đảm bảo Master Node hoạt động ổn định.

Tóm lại, Taints và Tolerations là công cụ mạnh mẽ giúp bạn kiểm soát việc triển khai Pods trên các Nodes cụ thể trong Kubernetes. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.

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