Cách sử dụng Node Selectors trong Kubernetes

theanh

Administrator
Nhân viên
Chúng ta có thể hạn chế aPod chỉ có thể chạy trên một Node cụ thể. Có thể có một số tình huống mà chúng ta có thể muốn kiểm soát nhiều hơn trên một node nơi một pod hạ cánh.

nodeSelector là một trong những dạng ràng buộc lựa chọn node.nodeSelector là một trường của PodSpec.Đây là một tính năng lập lịch Pod đơn giản cho phép lập lịch một Pod vào một node có nhãn khớp với nodeSelector nhãn do người dùng chỉ định.

Để biết thêm về Node Selects, hãy nhấp vàođây để đến trang chính thức của Kubernetes.

Trong bài viết này, chúng ta sẽ không có vết bẩn nào trên master node để các pod cũng có thể được triển khai trên master node. Sau đó, chúng ta sẽ tạo các pod để xem chúng được triển khai trên worker cũng như master node. Sau đó, chúng ta sẽ gắn nhãn vào master node và trỏ các pod để triển khai trên master node chỉ bằng cách sử dụng nodeSelector.

Điều kiện tiên quyết​

  1. Kubernetes Cluster với ít nhất 1 worker node.
    Nếu bạn muốn tìm hiểu cách tạo Kubernetes Cluster, hãy nhấp vào đây. Hướng dẫn này sẽ giúp bạn tạo cụm Kubernetes với 1 Master và 2 Node trên AWS Ubuntu 18.04 EC2 Instances.

Những gì chúng ta sẽ làm​

  1. Cấu hình Node-Selectors

Cấu hình Node-Selectors​

Trước tiên, hãy trích xuất chi tiết các node trong cụm bằng lệnh sau.
Mã:
kubectl get nodes #Lấy các node khả dụng trong cụm
Mã:
kubectl describe nodes node01 | grep Taint #Mô tả node1 node để trích xuất thông tin chi tiết về Taints
Mã:
kubectl describe nodes master | grep Taint#Describemaster node toextract details regarding Taints


Phần trên cho thấy các nút không có taints, điều này có nghĩa là Pod có thể được đặt trên bất kỳ nút nào, trên master hoặc node01.

Bây giờ, hãy tạo một triển khai không có bất kỳ bộ chọn nút nào trong đó.
Mã:
vimmy-deployment-without-node-selector.yaml #Tạo định nghĩa triển khai
Mã:
apiVersion: apps/v1kind: Deploymentmetadata: labels: app: frontend name: frontendspec: replicas: 3 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - image: httpd:2.4-alpine name: frontend


Bây giờ, chúng ta đã sẵn sàng để tạo một triển khai bằng lệnh sau.
Mã:
kubectl get pods#Lấy các pod có sẵn trong cụm
Mã:
kubectl create -f my-deployment-without-node-selector.yaml #Tạo triển khai
Mã:
kubectl get pods ##Lấy các nút có sẵn trong cụm


Bây giờ, hãy thay đổi số lượng bản sao trong triển khai bằng cách chỉnh sửa tệp và áp dụng các thay đổi.
Mã:
kubectl apply -f my-deployment-without-node-selector.yaml #Áp dụng các thay đổi được thực hiện trong tệp định nghĩa triển khai
Mã:
kubectl get pods -o wide # Lấy thêm thông tin chi tiết về pod bằng tùy chọn -o wide


Trong ảnh chụp màn hình ở trên, có thể thấy rằng các pod mới đang được tạo và chúng cũng đang được lên lịch trên nút chính.

Lý do cho việc này là cả hai nút, nút chính và nút01, đều không có taints.

VÌ VẬY, để hạn chế việc lập lịch và đảm bảo các pod chỉ được đặt trên nút chính, hãy tạo nhãn trên nút chính.
Mã:
kubectl label nodes master [I]on-master=true #Tạo nhãn trên nút chính[/I]
Mã:
kubectl describe node master #Nhận thêm thông tin chi tiết về nút chính


Trong ảnh chụp màn hình ở trên, có thể thấy nút chính có nhãn là "on-master=true"

Bây giờ, hãy tạo một triển khai mới với nodeSelector:eek:n-master=truein để đảm bảo rằng các Pod chỉ được triển khai trên nút chính.
Mã:
vim my-deployment-with-node-selector.yaml #Tạo tệp định nghĩa triển khai
Mã:
apiVersion: apps/v1kind: Triển khaimetadata: name: streamer-v4-deployment nhãn: ứng dụng: streamer-v4spec: bản sao: 2 selector: matchLabels: ứng dụng: streamer-v4 template: siêu dữ liệu: nhãn: ứng dụng: streamer-v4 spec: container: - tên: streamer-v4 hình ảnh: nginx cổng: - containerPort: 8880[I] nodeSelector: on-master: "true"[/I]


Bây giờ có thể tạo một triển khai mới với nodeSelector bằng lệnh sau.
Mã:
kubectl create -f my-deployment-with-node-selector.yaml #Tạo triển khai
Mã:
kubectl get pods -o wide | grep streamer-v4-deployment #Nhận thêm thông tin chi tiết về các pod


Trong ảnh chụp màn hình ở trên, có thể thấy rằng các Pod chỉ được triển khai trên nút chính.

Bây giờ, hãy thay đổi "replica=50" để xem các pod sẽ được triển khai ở đâu.
Mã:
vim my-deployment-with-node-selector.yaml #Thay đổi định nghĩa triển khai


Áp dụng các thay đổi mới nhất bằng lệnh được đề cập bên dưới.
Mã:
kubectl apply -f my-deployment-with-node-selector.yaml #Áp dụng các thay đổi cho triển khai


Tại đây, bạn có thể thấy rằng tất cả các pod chỉ được tạo và triển khai trên nút "master".

Kết luận​

Trong bài viết này, chúng ta đã thấy cách các pod có thể bị hạn chế để chỉ được triển khai trên nút cụ thể bằng cách sử dụng nhãn và nodeSelector.

Chúng ta cũng thấy rằng nếu nút master không có Taint thì các pod có thể được triển khai trên đó.
 
Back
Bên trên