Trong bài viết, hãy cùng mình tìm hiểu về cách Kubernetes quản lý và phân bổ tài nguyên (CPU và bộ nhớ) cho các pod.
Xem thêm:
1. Resource requirement
Khi bạn chạy một ứng dụng trên Kubernetes, bạn cần cho nó biết là: “Ê, tui cần ít nhất nhiêu CPU và RAM để chạy cho mượt nha!”. Resource requirement là lượng CPU và bộ nhớ tối thiểu mà một pod cần để hoạt động.
Khi đặt resource requirement, Kubernetes đảm bảo pod sẽ luôn có ít nhất lượng tài nguyên cần thiết để pod hoạt động ổn định.
Ví dụ: Bạn khai báo memory: 5Mi thì Kubernetes sẽ chắc chắn dành ra ít nhất 5Mi RAM cho pod đó, không thiếu một byte!
2. Giới hạn tài nguyên (Resource Limits):
Resource Limits là lượng CPU và bộ nhớ tối đa mà một pod trong kubernetes được phép sử dụng.
Resource Limits giúp tránh tình trạng một pod chiếm quá nhiều tài nguyên gây ảnh hưởng đến các pod khác, đảm bảo sự cân bằng và ổn định cho toàn bộ cụm. Nếu như một Pod cố gắng vượt qua giới hạn tài nguyên thì nó sẽ bị Out Of Memory
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: elephant
name: elephant
spec:
containers:
- image: polinux/stress
name: elephant
resources:
limits:
memory: 20Mi
requests:
memory: 5Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
3. Các trường hợp sử dụng
No Requests, No Limits: Dùng bao nhiêu tùy thích → dễ giành giật tài nguyên. Pod có thể sử dụng bất kỳ lượng tài nguyên nào, tiềm ẩn nguy cơ thiếu hụt tài nguyên cho các pod khác.
No Request, Limits: Kubernetes sẽ “auto” gán request bằng limit. Kubernetes sẽ tự động đặt resource request bằng với giới hạn.
Request và Limits: Pod được đảm bảo lượng tài nguyên yêu cầu và có thể sử dụng tối đa giới hạn đã đặt. Có vẻ đây là trường hợp lý tưởng Nhưng khi một Pod cần thêm CPU và một Pod không tiêu tốn hết CPU. Thì tại sao mình lại không nhường cái CPU đó cho Pod đang thiếu. Vì vậy trường hợp tiếp theo nó là lý tưởng nhất
Request, No Limits: Pod được đảm bảo lượng tài nguyên cần thiết và có thể sử dụng thêm tài nguyên nếu có sẵn.

4. Limit Ranges
Limit Ranges cho phép bạn đặt giá trị mặc định cho yêu cầu và giới hạn tài nguyên cho các pod được tạo mới trong một namespace.
Cách sử dụng: Tạo một file định nghĩa Limit Range với các giá trị mặc định, tối đa và tối thiểu cho CPU và bộ nhớ.
6. Resource Quotas
Resource Quotas cho phép bạn đặt giới hạn cứng về lượng tài nguyên (CPU và bộ nhớ) có thể được sử dụng bởi tất cả các pod trong một namespace. Giúp quản lý và kiểm soát lượng tài nguyên được sử dụng trong một namespace, tránh tình trạng quá tải tài nguyên.
Ví dụ: Chỉ cho 10 CPU và 16Gi RAM trong 1 namespace. Vượt quá là không deploy thêm được nữa.
Kubernetes giống như một quản lý chợ – vừa đảm bảo mỗi quán có đủ mặt bằng (resource request), vừa không cho quán nào lấn chiếm hết phần của người khác (resource limit). Việc quản lý tài nguyên hợp lý sẽ giúp cả cluster chạy mượt mà, tránh crash bất ngờ.
Trên đây là một số kiến thức cơ bản về cách Kubernetes quản lý tài nguyên cho các pod. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan: