Giới hạn phạm vi trong Kubernetes

theanh

Administrator
Nhân viên
Với Limit Range, chúng ta có thể hạn chế việc sử dụng và tạo tài nguyên vì theo mặc định, các container chạy với tài nguyên điện toán không giới hạn trên cụm Kubernetes. APod có thể sử dụng nhiều CPU và bộ nhớ như được xác định bởi Limit Range.

ALimit Range cung cấp các ràng buộc về:
  • Tài nguyên tối thiểu và tối đa
  • Yêu cầu lưu trữ tối thiểu và tối đa trên mỗi PersistentVolumeClaim
  • Tỷ lệ giữa yêu cầu và giới hạn cho một tài nguyên trong không gian tên.
  • Đặt yêu cầu/giới hạn mặc định cho các tài nguyên tính toán
Để biết thêm về Limit Range, hãy truy cập tài liệu chính thức của Kubernetes tại đây.

Trong bài viết này, chúng ta sẽ tạo một phạm vi giới hạn và xem cách đặt giá trị tối thiểu và tối đa cho tài nguyên CPU được sử dụng bởi Container và Pod. Chúng ta sẽ thấy các kịch bản khác nhau với Limit và Request trên CPU.

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

  1. Cụm Kubernetes có ít nhất 1 nút worker.
    Nếu bạn muốn tìm hiểu cách tạo Cụm Kubernetes, 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 EC2 Instances.

Chúng ta sẽ làm gì?​

  1. Tạo aLimitRange trong không gian tên mặc định.
  2. Tạo Pod với CPU Limit và Range trong không gian tên mặc định

Tạo aLimitRange trong không gian tên mặc định​

Tạo tệp để xác định phạm vi giới hạn trong mặc định không gian tên.
Mã:
vim set-limit-range.yml
Mã:
apiVersion: v1
kind: LimitRange
metadata: name: set-limit-range
spec: limits: - max: cpu: "800m" min: cpu: "200m" type: Container

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22318%22%3E%3C/svg%3E


Lấy danh sách các phạm vi giới hạn hiện có trong không gian tên mặc định và tạo phạm vi đó bằng tệp được tạo ở trên bước.
Mã:
kubectl get limitrange
Mã:
kubectl get limitrange

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22265%22%3E%3C/svg%3E


Trong ảnh chụp màn hình ở trên, có thể thấy rằng chúng ta đã tạo một phạm vi giới hạn xác định CPU là "Min=200m" và "Max=800m".

Điều này có nghĩa là các pod trong không gian tên mặc định không thể có CPU "nhỏ hơn Min=200m" và "nhiều hơn Max=800m".

Tạo Pod với Giới hạn và Phạm vi CPU trong không gian tên mặc định​

Pod có giới hạn​

Tạo định nghĩa apod yêu cầu CPU lớn hơn 200m và nhỏ hơn 800m
Mã:
vim pod-with-cpu-within-range.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name: pod-with-cpu-within-range
spec: containers: - name: pod-with-cpu-within-range image: nginx resources: limits: cpu: "800m" requests: cpu: "500m"

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22363%22%3E%3C/svg%3E


Liệt kê các pod hiện có và tạo một pod mới bằng tệp đã tạo ở trên bước.
Mã:
kubectl get pods
Mã:
kubectl get pods
Mã:
kubectl describe pod pod-with-cpu-within-range

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22353%22%3E%3C/svg%3E


Trong ảnh chụp màn hình ở trên, có thể thấy rằng thepod đã được tạo với yêu cầu CPU và giới hạn được xác định.


Pod có nhiều CPU hơn:​

Lần này, hãy tạo apod với giới hạn CPU là 1,5 tức là lớn hơn 800m.
Mã:
vim pod-with-cpu-more-than-limit.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name: pod-with-cpu-more-than-limit
spec: containers: - name: pod-with-cpu-more-than-limit image: nginx resources: limits: cpu: "1.5" requests: cpu: "500m"

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22368%22%3E%3C/svg%3E


Lấy danh sách các pod hiện có và thử tạo một pod mới có giới hạn CPU "1,5" lớn hơn "800m" mà chúng ta đã xác định trong giới hạn phạm vi.
Mã:
kubectl get pods
Mã:
kubectl create -f pod-with-cpu-more-than-limit.yml

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2288%22%3E%3C/svg%3E


Trong ảnh chụp màn hình ở trên, có thể thấy rằng thepod chưa được tạo.

Pod có ít CPU hơn:​

Bây giờ chúng ta hãy thử tạo một pod yêu cầu "CPU=100m" nhỏ hơn "200m" mà chúng ta đã xác định trong phạm vi giới hạn.
Mã:
vim pod-with-cpu-less-than-limit.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name: pod-with-cpu-less-than-limit
spec: containers: - name: pod-with-cpu-less-than-limit image: nginx resources: limits: cpu: "800m" requests: cpu: "100m"
Bây giờ hãy lấy danh sách existingpodsand thử tạo apod với tệp định nghĩa ở trên.
Mã:
kubectl get pods
Mã:
kubectl create -f pod-with-cpu-less-than-limit.yml
Lần này, việc tạo pod cũng sẽ thất bại vì chúng tôi đã yêu cầu CPU=100m nhỏ hơn 200m mà chúng tôi đã xác định phạm vi giới hạn.

Pod không có CPU:​

Trong trường hợp này chúng ta không xác định bất kỳ yêu cầu hoặc giới hạn nào cho CPU.
Mã:
vim pod-with-no-cpu.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name:pod-with-no-cpu
spec: containers: - name:pod-with-no-cpu image: vish/stress

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22284%22%3E%3C/svg%3E


Bây giờ chúng ta hãy thử tạo một pod và xem mô tả của nó.
Mã:
kubectl get pods
Mã:
kubectl describe pods pod-with-no-cpu

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22342%22%3E%3C/svg%3E


Trong ảnh chụp màn hình ở trên, có thể thấy rằng nếu chúng ta không chỉ định bất kỳ yêu cầu hoặc giới hạn nào cho CPU thì POD sẽ được phân bổ CPU bằng với giới hạn được chỉ định trong phạm vi giới hạn, tức là Trong ví dụ này, pod có giới hạn CPU và yêu cầu bằng 800m, giới hạn được chỉ định trong phạm vi giới hạn

Kết luận​

Trong bài viết này, chúng ta đã thấy các bước để tạo phạm vi giới hạn trong không gian tên mặc định. Sau đó, chúng ta đã thử các kịch bản khác nhau cho giới hạn CPU và yêu cầu trong pod.
 
Back
Bên trên