Giới hạn tài nguyên trong Kubernetes

theanh

Administrator
Nhân viên
Nếu nút có đủ tài nguyên khả dụng, thì một container có thể sử dụng nhiều tài nguyên hơn. Chúng ta có thể chỉ định lượng tài nguyên mà một Container cần. Các tài nguyên chung cần chỉ định là CPU và bộ nhớ Khi chúng ta chỉ định yêu cầu tài nguyên cho các Container trong một Pod, trình lập lịch sẽ quyết định đặt Pod vào nút nào. Khi chúng ta chỉ định giới hạn tài nguyên cho một Container, kubelet sẽ xử lý các giới hạn để container đang chạy không được phép sử dụng nhiều hơn giới hạn mà chúng ta đã đặt.

Ví dụ: nếu chúng ta đặt yêu cầu bộ nhớ là 100 MiB cho một container thì container có thể thử sử dụng nhiều RAM hơn. Nhưng nếu chúng ta đặt giới hạn bộ nhớ là 4GiB cho Container đó, thời gian chạy sẽ ngăn không cho container sử dụng nhiều hơn giới hạn tài nguyên đã cấu hình.

CPU và bộ nhớ được gọi là tài nguyên tính toán.

Mỗi Container của Pod có thể chỉ định một hoặc nhiều mục sau:
  • giới hạn cpu
  • giới hạn bộ nhớ
  • giới hạn trang lớn-<size>
  • yêu cầu cpu
  • yêu cầu bộ nhớ
  • yêu cầu hugepages-<size>
Để biết thêm về tài nguyên trong Kubernetes, hãy nhấp vàođây để truy cập tài liệu chính thức của Kubernetes.

Trong bài viết này, chúng ta sẽ xem ví dụ về giới hạn tài nguyên và yêu cầu CPU và Bộ nhớ. Chúng ta cũng sẽ sử dụng Metric Server. Metrics Server là trình tổng hợp dữ liệu sử dụng tài nguyên trong cụm và theo mặc định, nó không được triển khai trong cụm. Chúng ta sẽ sử dụng Metric Server này để xem mức tiêu thụ tài nguyên theo từng nhóm.

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

  1. Cụm Kubernetes có ít nhất 1 nút công nhân.
    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 18.04 EC2 Instances.

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

  1. Giới hạn tài nguyên

Giới hạn tài nguyên​

Trước khi tiến hành và tạo các pod với các yêu cầu tài nguyên được chỉ định, hãy cài đặt Metric Server.

Sao chép kho lưu trữ Github của Metric Server bằng lệnh sau và cài đặt nó.
Mã:
git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
Mã:
cd kubernetes-metrics-server/
Tạo Metric Server bằng cách sử dụng đối tượng tệp.
Mã:
kubectl create -f .

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


Chờ một lúc để Metric Server khởi tạo. Sau một thời gian, bạn có thể thực hiện lệnh sau để giám sát các nút cụm.
Mã:
kubectl top node

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


Bây giờ, hãy tạo một tệp định nghĩa pod có nội dung sau trong đó chứa yêu cầu bộ nhớ và giới hạn.
Mã:
vim my-pod-with-memory.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name: my-pod-memory-demo
spec: containers: - name: my-container-memory-demo image: polinux/stress resources: limits: memory: "50Mi" requests: memory: "20Mi" command: ["stress"] args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]

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


Bạn có thể tìm thấy thuộc tính "resources" trong đó chúng tôi đã chỉ định giới hạn bộ nhớ là 50Mi và yêu cầu bộ nhớ là 20Mi

Kiểm tra các pod hiện có với không gian tên mặc định trên cụm.
Mã:
kubectl get pods #Get podsfromthe defaultnamespace
Tạo một pod bằng cách sử dụng định nghĩa pod đã tạo trong bước trên.
Mã:
kubectl create -f my-pod-with-memory.yml #Create a pod
Mã:
kubectl get pods

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


Bây giờ, nếu bạn có thông tin chi tiết về Pod, bạn có thể thấy rằng Pod đang yêu cầu bộ nhớ 20Mi và có giới hạn là 50Mi bộ nhớ.
Mã:
kubectl get pods
Mã:
kubectl describe pod my-pod-memory-demo #Describe the pod

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


Có thể kiểm tra mức sử dụng pod bằng lệnh sau.
Mã:
kubectl top pods #Check resource consumption by the pod

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


Bây giờ, hãy tạo một định nghĩa pod với yêu cầu CPU và giới hạn.
Mã:
vim my-pod-with-cpu.yml
Mã:
apiVersion: v1
kind: Pod
metadata: name: my-pod-cpu-demo
spec: containers: - name: my-container-cpu-demo image: vish/stress resources: limits: cpu: "1" requests: cpu: "0.5" args: - -cpus - "2"


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

Trong tệp trên, bạn có thể thấy định nghĩa có thuộc tính "tài nguyên" với yêu cầu CPU là 0,5 và giới hạn là 1. Ngoài ra, lưu ý rằng chúng ta đang truyền 2 CPU theo yêu cầu của mình, nhiều hơn giới hạn.

Bây giờ, hãy tạo một pod với yêu cầu CPU và giới hạn bằng cách sử dụng lệnh sau lệnh.
Mã:
kubectl apply -f my-pod-with-cpu.yml #Create a pod
Mã:
kubectl get pods

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


Nhận thông tin chi tiết về pod mà chúng tôi đã tạo.
Mã:
kubectl get pods
Mã:
kubectl describe pod my-pod-cpu-demo

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


Bạn có thể thấy Pod đã yêu cầu CPU .5 hoặc 500m với giới hạn là 1 CPU

Để kiểm tra mức sử dụng CPU, hãy sử dụng lệnh sau.
Mã:
kubectl top pod#Check resource consumption by the pod

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


Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng ngay cả sau khi truyền 2 CPU trong định nghĩa pod làm đối số, nó vẫn không thể tiêu thụ nhiều hơn giới hạn, tức là 1 CPU. Ở đây, pod "my-pod-cpu-demo" có thể tiêu thụ 999m CPU tương đương với 1 CPU và nó không thể tăng mức tiêu thụ của mình.

Kết luận​

Trong bài viết này, chúng ta đã thấy các bước để bật giám sát trong cụm bằng Metric Server. Chúng ta đã thấy cách một pod có thể yêu cầu CPU và bộ nhớ và tiêu thụ tài nguyên không vượt quá giới hạn đã chỉ định.
 
Back
Bên trên