Kubernetes Priority and Preemption¶
Kubernetes Priority and Preemption is a scheduling mechanism, introduced as a Beta feature in version 1.11, designed to prevent critical workloads from being indefinitely delayed ("搁置") due to resource shortages^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Under standard operations, if a Pod cannot be scheduled, it remains in a pending state until the Pod is updated or the cluster state changes. The priority and preemption features allow the cluster to automatically resolve this for important applications by evicting ("挤走") lower-priority Pods to make room for higher-priority ones^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
PriorityClass¶
To utilize this mechanism, Kubernetes introduces a custom resource called PriorityClass^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Configuration Fields¶
When defining a PriorityClass, the following key fields are used^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]:
- value: An integer representing the priority. A larger value indicates a higher priority^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]. The system supports values up to 1,000,000,000 (one billion)^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
- globalDefault: A boolean flag. If set to
true, this value becomes the default priority for all Pods that do not specify apriorityClassName^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]. Iffalseor unset, the default priority for such Pods is 0^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]. - description: A text string clarifying the intended use of the priority class^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Usage in Pods¶
A Pod utilizes a priority class by referencing its name in the spec.priorityClassName field^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Once submitted, the PriorityAdmissionController intercepts the Pod configuration. It looks up the integer value associated with the specified PriorityClass name and automatically injects it into the spec.priority field of the Pod^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Scheduling Queue Priority¶
The primary function of the priority value is to influence the order of operations within the scheduler's internal queue^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]. High-priority Pods are positioned to exit the scheduling queue earlier than low-priority Pods^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]. This ensures that critical applications are scheduled and started as soon as resources permit^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Preemption Mechanism¶
When a high-priority Pod fails to find a suitable node, the preemption mechanism is triggered^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
The scheduler attempts to find a node where the high-priority Pod can fit by removing one or more lower-priority Pods^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]. By terminating these lower-priority Pods, the required resources are freed up, allowing the pending high-priority Pod to be placed on the node^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md].
Related Concepts¶
- Kubernetes Scheduler
- [[Kubernetes QoS]]
- [[Kubernetes Eviction]]
Sources¶
^[400-devops__06-Kubernetes__k8s-paas__原理及源码解析__Kubernetes调度机制.md]