mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +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
|
// an informer. It checks whether that change made a previously unschedulable
|
||||||
// pod schedulable.
|
// pod schedulable.
|
||||||
func (pl *NodeUnschedulable) isSchedulableAfterNodeChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) (framework.QueueingHint, error) {
|
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 {
|
if err != nil {
|
||||||
return framework.Queue, err
|
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))
|
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
|
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))
|
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
|
return framework.QueueSkip, nil
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ func TestIsSchedulableAfterNodeChange(t *testing.T) {
|
|||||||
expectedHint: framework.Queue,
|
expectedHint: framework.Queue,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "skip-unrelated-change",
|
name: "skip-unrelated-change-unschedulable-true",
|
||||||
pod: &v1.Pod{},
|
pod: &v1.Pod{},
|
||||||
newObj: &v1.Node{
|
newObj: &v1.Node{
|
||||||
Spec: v1.NodeSpec{
|
Spec: v1.NodeSpec{
|
||||||
@ -155,6 +155,27 @@ func TestIsSchedulableAfterNodeChange(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expectedHint: framework.QueueSkip,
|
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",
|
name: "queue-on-unschedulable-field-change",
|
||||||
pod: &v1.Pod{},
|
pod: &v1.Pod{},
|
||||||
|
Loading…
Reference in New Issue
Block a user