mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-31 15:25:57 +00:00
feature(scheduler): more fine-grained QHints for nodeunschedulable plugin
This commit is contained in:
parent
e367afe3bb
commit
86aee8cbc7
@ -61,19 +61,20 @@ func (pl *NodeUnschedulable) EventsToRegister(_ context.Context) ([]framework.Cl
|
||||
// an informer. It checks whether that change made a previously unschedulable
|
||||
// pod schedulable.
|
||||
func (pl *NodeUnschedulable) isSchedulableAfterNodeChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) (framework.QueueingHint, error) {
|
||||
_, modifiedNode, err := util.As[*v1.Node](oldObj, newObj)
|
||||
originalNode, modifiedNode, err := util.As[*v1.Node](oldObj, newObj)
|
||||
if err != nil {
|
||||
return framework.Queue, err
|
||||
}
|
||||
|
||||
if !modifiedNode.Spec.Unschedulable {
|
||||
// We queue this Pod when -
|
||||
// 1. the node is updated from unschedulable to schedulable.
|
||||
// 2. the node is added and is schedulable.
|
||||
if (originalNode != nil && originalNode.Spec.Unschedulable && !modifiedNode.Spec.Unschedulable) ||
|
||||
(originalNode == nil && !modifiedNode.Spec.Unschedulable) {
|
||||
logger.V(5).Info("node was created or updated, pod may be schedulable now", "pod", klog.KObj(pod), "node", klog.KObj(modifiedNode))
|
||||
return framework.Queue, nil
|
||||
}
|
||||
|
||||
// TODO: also check if the original node meets the pod's requestments once preCheck is completely removed.
|
||||
// See: https://github.com/kubernetes/kubernetes/issues/110175
|
||||
|
||||
logger.V(5).Info("node was created or updated, but it doesn't make this pod schedulable", "pod", klog.KObj(pod), "node", klog.KObj(modifiedNode))
|
||||
return framework.QueueSkip, nil
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ func TestIsSchedulableAfterNodeChange(t *testing.T) {
|
||||
expectedHint: framework.Queue,
|
||||
},
|
||||
{
|
||||
name: "skip-unrelated-change",
|
||||
name: "skip-unrelated-change-unschedulable-true",
|
||||
pod: &v1.Pod{},
|
||||
newObj: &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
@ -155,6 +155,27 @@ func TestIsSchedulableAfterNodeChange(t *testing.T) {
|
||||
},
|
||||
expectedHint: framework.QueueSkip,
|
||||
},
|
||||
{
|
||||
name: "skip-unrelated-change-unschedulable-false",
|
||||
pod: &v1.Pod{},
|
||||
newObj: &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
Unschedulable: false,
|
||||
Taints: []v1.Taint{
|
||||
{
|
||||
Key: v1.TaintNodeNotReady,
|
||||
Effect: v1.TaintEffectNoExecute,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
oldObj: &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
Unschedulable: false,
|
||||
},
|
||||
},
|
||||
expectedHint: framework.QueueSkip,
|
||||
},
|
||||
{
|
||||
name: "queue-on-unschedulable-field-change",
|
||||
pod: &v1.Pod{},
|
||||
|
Loading…
Reference in New Issue
Block a user