Kubernetes Resource Model¶
In Kubernetes, attributes related to scheduling and resource management are defined as fields within the Pod specification^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Resource Types¶
CPU and memory are the two primary resource types managed in Kubernetes, categorized by their behavior when resources are scarce^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md]:
- Compressible Resources (CPU): When CPU resources are insufficient, a Pod will experience "starvation" (throttling) but will not be terminated^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
- Incompressible Resources (Memory): When memory resources are insufficient, a Pod will be killed by the kernel due to Out-Of-Memory (OOM) errors^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Resource Configuration¶
Since a Pod can consist of multiple Containers, CPU and memory limits are configured per container; the Pod's overall resource allocation is the sum of these individual values^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Requests and Limits¶
Resources are defined using requests and limits^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md]:
- Requests: The amount of resources guaranteed to the container. The
kube-scheduleruses this value to determine which Node has sufficient resources to host the Pod^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md]. - Limits: The maximum amount of resources a container can consume. The
kubeletuses this value to set Cgroups limits on the host^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
This approach mirrors Borg architecture, allowing users to declare a smaller requests value for scheduling flexibility while setting a larger limits value to handle usage spikes^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Quality of Service (QoS)¶
Kubernetes classifies Pods into three QoS classes based on their resource requests, which determines their priority during resource eviction (reclamation) when a Node is under pressure^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Guaranteed¶
A Pod is classified as Guaranteed if every container within it has both requests and limits set, and the value for requests equals the value for limits for both CPU and memory^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Burstable¶
A Pod is classified as Burstable if it does not meet the criteria for Guaranteed but has at least one container with a specific requests value set^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
BestEffort¶
A Pod is classified as BestEffort if it has neither requests nor limits set for any of its containers^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Eviction Priority¶
When a Node faces resource shortages, kubelet performs eviction based on QoS tiers^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md]:
BestEffort < Burstable < Guaranteed
Guaranteed Pods are only evicted if they exceed their resource limits or if the host is in a severe Memory Pressure state^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
CPU Management: cpuset¶
For performance-critical applications, Kubernetes supports binding a Pod to specific CPU cores (cpuset) rather than sharing CPU capacity (cpushare)^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md]. This reduces context switching overhead and improves performance.
To enable this feature:
1. The Pod must be of the Guaranteed QoS class^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
2. The CPU requests and limits must be set to an equal integer value^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
It is recommended to configure critical system Pods (like those in DaemonSets) as Guaranteed to prevent them from being evicted and immediately re-created in a resource loop^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md].
Sources¶
^[400-devops-06-kubernetes-k8s-paas-kubernetes-k8s-paas-原理及源码解析-kubernetes调度机制.md]