Hướng dẫn sử dụng Taint và Label

Label

Label (nhãn) là cơ chế được sử dụng để tổ chức các đối tượng Kubernetes. Label là một cặp key - value với với một số hạn chế nhất định liên quan đến độ dài và các giá trị được phép nhưng không có bất kỳ ý nghĩa nào được xác định trước. Bạn có thể tự do chọn Label phù hợp hoặc để thể hiện tên, môi trường, quyền sở hữu.

Để sử dụng label ta dùng đến nodeSelector

Ý tưởng của việc sử dụng tham số nodeSelector này đó là mong muốn cấu hình các Pod chỉ chạy trên một tập các node có lable nhất định.

Untitled

Ví dụ như hình, các pod gắn nodeSelector với cặp key-value là size:large sẽ được scheduling vào node pool có label size=large

Taint

Taint là một loại nhãn đặc biệt dùng để đánh dấu node có những đặc trưng nào đó, xác định bởi một bộ key-value và một action khi Pod không thỏa mãn điều kiện key-value đó.

Gán Taint vào một node giống như việc chúng ta khóa một node bằng một cái ổ khóa (coi taint là ổ khóa), và (ổ khóa) này đặc trưng bởi một label key=value và một action kèm theo (gọi là effect nếu không có (chìa khóa).

Action này có thể là:

  • NoSchedule ==> Không có (chìa khóa) thì sẽ không được lên lịch chạy trên node này.
  • NoExecute ==> Không có (chìa khóa) thì sẽ có thể được lên lịch trên node này nhưng Pod sẽ không được thực thi.
  • PreferNoSchedule ==> Kubernetes sẽ cố né tránh nhất schedule pod k có tolerations lên node bị tains

Có (khóa) thì phải có (chìa). Để mở khóa (Taint) cho phép Pod có thể được chạy trên Node có Taint, thì Pod đó phải khai báo Tolerations (chìa khóa) đặc trưng với một label key=value và một Action kèm theo tương tự như với Taint.

Lưu ý: Một node có thể có nhiều Taint, khi đó Pod được gán vào Node nếu có tất cả các Toleration tương ứng với các Taint của node.

Untitled

Ví dụ: ở hình trên pool pool-dxzy94ue đang có gán 1 Taint là app=db:NoSchedule.

Pod1 có khai báo Tolerations có key-value (app=db) tương ứng với Taint khai báo trên 2 pool do đó có thể được chạy trên các node thuộc pool pool-dxzy94ue Với pool pool-ugrgeq9xkhông có Taint thì mặc nhiên Pod1 cũng có thể được lập lịch chạy trên node này. Do đó Pod1 có thể được chạy trên cả 2 pool

Pod2 không có khai báo Tolerations do đó nó không thể được lập lịch chạy trên các node có Taint. Do đó nó chỉ có thể được chạy trên node không có taint còn lại là pool-ugrgeq9x.

Ta sẽ gắn taint ở trên BKE khi tạo 1 node pool mới, tương tự như gán label, ta gắn theo pool thì sẽ không bị mất khi scale node

Giao diện gắn Taint và Label

Taint và Label được gán vào theo từng Node Pool, các nodepool khác nhau

Untitled

Tham khảo

Tham khảo thêm hướng dân sử dụng Taint và Label để scheduling các pod tại đây