Cách sử dụng Kubernetes Taints và

[ad_1]

Sửa máy tính tại nhà TPHCM

Taints và dung sai là một cơ chế Kubernetes để kiểm soát cách các Pod lên lịch cho các Node trong cụm của bạn. Taints được áp dụng cho các Nút và hoạt động như một rào cản đẩy lùi các Nhóm mới. Các Nút bị nhiễm độc sẽ chỉ chấp nhận các Nhóm đã được đánh dấu bằng dung sai tương ứng.

Taints là một trong những cơ chế lập lịch Kubernetes tiên tiến hơn. Chúng tạo điều kiện thuận lợi cho nhiều trường hợp sử dụng khác nhau mà bạn muốn ngăn các Nhóm kết thúc trên các Nút không mong muốn. Trong bài viết này, bạn sẽ tìm hiểu giá trị và dung sai là gì và cách bạn có thể sử dụng chúng trong cụm của riêng mình.

Cách lập lịch trình hoạt động

Kubernetes là một hệ thống phân tán, nơi bạn có thể triển khai các ứng dụng được chứa trong vùng chứa (Pod) trên nhiều máy chủ vật lý (Nodes). Khi bạn tạo một Pod mới, Kubernetes cần xác định tập hợp các Node mà nó có thể được đặt. Đây là những gì lập kế hoạch đề cập đến.

Người lập lịch xem xét nhiều yếu tố khác nhau để thiết lập vị trí thích hợp cho mỗi Pod. Nó sẽ mặc định chọn một Node có thể cung cấp đủ tài nguyên để đáp ứng các yêu cầu CPU và bộ nhớ của Pod.

Tuy nhiên, Node đã chọn sẽ không nhất thiết phải thích hợp cho việc triển khai của bạn. Nó có thể thiếu phần cứng cần thiết hoặc được dành riêng cho mục đích phát triển. Taints của nút là một cơ chế để thực thi các ràng buộc này bằng cách ngăn chặn việc gán tùy ý các Nhóm cho các Nút.

Các trường hợp sử dụng mờ nhạt

Làm bẩn một Node có nghĩa là nó sẽ bắt đầu đẩy lùi các Pod, buộc bộ lập lịch phải xem xét Node ứng viên tiếp theo để thay thế. Bạn có thể khắc phục vết bẩn bằng cách thiết lập dung sai phù hợp trên Pod. Điều này cung cấp một cơ chế cho phép các Pod cụ thể vào Node.

Taints thường được sử dụng để giữ các Pod tránh xa các Node được dành riêng cho các mục đích cụ thể. Một số cụm Kubernetes có thể lưu trữ một số môi trường, chẳng hạn như dàn dựng và sản xuất. Trong tình huống này, bạn sẽ muốn ngăn việc triển khai theo giai đoạn kết thúc trên phần cứng sản xuất chuyên dụng.

Bạn có thể đạt được hành vi mong muốn bằng cách làm hỏng Node sản xuất và đặt dung sai phù hợp trên Pod sản xuất. Staging Pod sẽ được giới hạn trong các Node khác trong cụm của bạn, ngăn chúng tiêu thụ tài nguyên sản xuất.

Taints cũng có thể giúp phân biệt giữa các nút với phần cứng cụ thể. Các nhà khai thác có thể triển khai một tập hợp con các Nút với GPU chuyên dụng để sử dụng với khối lượng công việc AI. Việc sơn các Nút này đảm bảo các Pod không cần GPU không thể lên lịch trên chúng.

Hiệu ứng Taint

Mỗi Node taint có thể có một trong ba tác động khác nhau đến các quyết định lập lịch của Kubernetes:

  • NoSchedule – Các nhóm thiếu khả năng dung nạp vết bẩn sẽ không được lên lịch trên Node. Các nhóm đã được lên lịch cho Node sẽ không bị ảnh hưởng, ngay cả khi chúng không chịu được vết bẩn.
  • PreferNoSchedule – Kubernetes sẽ tránh lập lịch cho các Pod mà không có sự chấp nhận của kẻ xấu. Pod vẫn có thể được lên lịch cho Node như một phương án cuối cùng. Điều này không ảnh hưởng đến các Nhóm hiện có.
  • NoExecute – Chức năng này tương tự như NoSchedule ngoại trừ các Nhóm hiện có cũng bị ảnh hưởng. Các nhóm không có sự chấp nhận sẽ bị loại bỏ ngay lập tức khỏi Node, khiến chúng bị dời lại sang các Node khác trong cụm của bạn.

Các NoExecute hiệu ứng hữu ích khi bạn thay đổi vai trò của một Node đã chạy một số khối lượng công việc. NoSchedule thích hợp hơn nếu bạn muốn bảo vệ Node không nhận các Pod mới mà không làm gián đoạn các triển khai hiện có.

Tainting a Node

Taints được áp dụng cho các nút bằng cách sử dụng kubectl taint yêu cầu. Nó lấy tên của Node đích, một khóa và giá trị cho taint, và một hiệu ứng.

Dưới đây là một ví dụ về việc làm mờ một Node để phân bổ nó vào một môi trường cụ thể:

$ kubectl taint nodes demo-node env=production:NoSchedule
node/demo-node tainted

Bạn có thể áp dụng nhiều đặc điểm cho một Node bằng cách lặp lại lệnh. Giá trị khóa là tùy chọn – bạn có thể tạo giá trị nhị phân bằng cách bỏ qua nó:

$ kubectl taint nodes demo-node has-gpu:NoSchedule

Để xóa vết mờ đã áp dụng trước đó, hãy lặp lại lệnh nhưng thêm dấu gạch ngang (-) đến tên hiệu ứng:

$ kubectl taint nodes demo-node has-gpu:NoSchedule-
node/demo-node untainted

Thao tác này sẽ xóa vết bẩn phù hợp nếu nó tồn tại.

Bạn có thể truy xuất danh sách tất cả các đặc điểm được áp dụng cho một Node bằng cách sử dụng describe yêu cầu. Phần đuôi sẽ được hiển thị gần đầu đầu ra, sau nhãn và chú thích của Node:

$ kubectl describe node demo-node
Name:   demo-node
...
Taints: env=production:NoSchedule
...

Thêm dung sai vào nhóm

Ví dụ trên bị nhiễm bẩn demo-node với ý định dành nó cho khối lượng công việc sản xuất. Bước tiếp theo là thêm dung sai tương đương vào các Pod sản xuất của bạn để chúng được phép lên lịch trên Node.

Dung sai pod được khai báo trong spec.tolerations trường kê khai:

apiVersion: v1
kind: Pod
metadata:
  name: api
spec:
  containers:
    - name: api
      image: example.com/api:latest
  tolerations:
    - key: env
      operator: Equals
      value: production
      effect: NoSchedule

Sự dung nạp này cho phép api Pod để lên lịch cho các Nút có env nhiễm bẩn với giá trị của productionNoSchedule như hiệu ứng. Pod mẫu hiện có thể được lên lịch để demo-node.

Để dung thứ cho những điểm không có giá trị, hãy sử dụng Exists toán tử thay thế:

apiVersion: v1
kind: Pod
metadata:
  name: api
spec:
  containers:
    - name: api
      image: example.com/api:latest
  tolerations:
    - key: has-gpu
      operator: Exists
      effect: NoSchedule

Pod bây giờ dung nạp has-gpu taint, cho dù một giá trị đã được đặt hay chưa.

Dung sai không yêu cầu rằng Pod được lên lịch cho một Node bị nhiễm bẩn. Đây là một quan niệm sai lầm phổ biến xung quanh tai và sự khoan dung. Cơ chế chỉ nói rằng một Node không thể lưu trữ một Pod; nó không thể hiện quan điểm thay thế rằng một Pod phải được đặt trên một Node cụ thể. Tài thường được kết hợp với duyên để đạt được hành vi hai chiều này.

Quy tắc Đối sánh Taint và Dung sai

Các Node bị nhiễm độc chỉ nhận được các Pod chịu được tất cả các vết bẩn của chúng. Kubernetes đầu tiên phát hiện ra các điểm yếu trên Node, sau đó lọc ra các điểm yếu được Pod chấp nhận. Các hiệu ứng theo yêu cầu của bộ lông còn lại sẽ được áp dụng cho Pod.

Có một trường hợp đặc biệt cho NoExecute hiệu ứng. Các vỏ chịu được loại vết bẩn này thường sẽ ở lại trên Node sau khi vết bẩn được áp dụng. Bạn có thể sửa đổi hành vi này để Pods tự nguyện bị đuổi sau một thời gian nhất định, mặc dù đã chấp nhận đặc điểm:

apiVersion: v1
kind: Pod
metadata:
  name: api
spec:
  containers:
    - name: api
      image: example.com/api:latest
  tolerations:
    - key: env
      operator: Equals
      value: production
      effect: NoExecute
      tolerationSeconds: 900

Một Node đang lưu trữ Pod này nhưng sau đó bị nhiễm độc env=production:NoExecute sẽ cho phép Pod duy trì hiện diện trong tối đa 15 phút sau khi vết bẩn được áp dụng. Pod sau đó sẽ bị trục xuất mặc dù có NoExecute sự dung nạp.

Taints tự động

Các nút được mặt phẳng điều khiển Kubernetes tự động làm bẩn để loại bỏ các Pod và ngăn lập lịch khi xảy ra tranh chấp tài nguyên. Taints chẳng hạn như node.kubernetes.io/memory-pressurenode.kubernetes.io/disk-pressure nghĩa là Kubernetes đang chặn Node lấy các Pod mới vì nó thiếu đủ tài nguyên.

Các đặc điểm thường được áp dụng khác bao gồm node.kubernetes.io/not-readykhi một Node mới không chấp nhận Pod và node.kubernetes.io/unschedulable. Sau đó được áp dụng cho các Nút có dây để tạm dừng tất cả hoạt động lập lịch của Pod.

Những taints này thực hiện các hệ thống quản lý Node và trục xuất Kubernetes. Thông thường bạn không cần phải suy nghĩ về chúng và cũng không nên quản lý các yếu tố này theo cách thủ công. Nếu bạn thấy chúng trên một Node, đó là vì Kubernetes đã áp dụng chúng để đáp ứng với các điều kiện thay đổi hoặc một lệnh khác mà bạn đã đưa ra. Có thể tạo Pod dung sai cho những đặc điểm này nhưng làm như vậy có thể dẫn đến cạn kiệt tài nguyên và hành vi không mong muốn.

Bản tóm tắt

Taints và dung sai là một cơ chế để đẩy lùi các Pod ra khỏi các Nút Kubernetes riêng lẻ. Chúng giúp bạn tránh các kết quả lập lịch không mong muốn bằng cách ngăn các Nhóm tự động được gán cho các Nút tùy ý.

Tainting không phải là cơ chế duy nhất cung cấp khả năng kiểm soát hành vi lập lịch trình. Các mối quan hệ và phản mối quan hệ trong nhóm là một kỹ thuật liên quan để hạn chế các nút có thể nhận một nhóm. Mối quan hệ cũng có thể được xác định ở cấp độ giữa các Pod, cho phép bạn đưa ra quyết định lên lịch dựa trên các Pod đã chạy trên một Node. Bạn có thể kết hợp mối quan hệ với đặc điểm và dung sai để thiết lập các quy tắc lập lịch nâng cao.

dịch vụ cài win online từ xa

[ad_2]