mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-05 15:37:24 +00:00
feat: update taint nodes by condition to GA
This commit is contained in:
@@ -17,12 +17,7 @@ go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["plugins_test.go"],
|
||||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//pkg/features:go_default_library",
|
||||
"//pkg/scheduler:go_default_library",
|
||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
|
||||
],
|
||||
deps = ["//pkg/scheduler:go_default_library"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
|
||||
@@ -47,12 +47,9 @@ func defaultPredicates() sets.String {
|
||||
predicates.MatchInterPodAffinityPred,
|
||||
predicates.NoDiskConflictPred,
|
||||
predicates.GeneralPred,
|
||||
predicates.CheckNodeMemoryPressurePred,
|
||||
predicates.CheckNodeDiskPressurePred,
|
||||
predicates.CheckNodePIDPressurePred,
|
||||
predicates.CheckNodeConditionPred,
|
||||
predicates.PodToleratesNodeTaintsPred,
|
||||
predicates.CheckVolumeBindingPred,
|
||||
predicates.CheckNodeUnschedulablePred,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -62,34 +59,6 @@ func defaultPredicates() sets.String {
|
||||
// of a feature gate temporarily.
|
||||
func ApplyFeatureGates() (restore func()) {
|
||||
snapshot := scheduler.RegisteredPredicatesAndPrioritiesSnapshot()
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.TaintNodesByCondition) {
|
||||
// Remove "CheckNodeCondition", "CheckNodeMemoryPressure", "CheckNodePIDPressure"
|
||||
// and "CheckNodeDiskPressure" predicates
|
||||
scheduler.RemoveFitPredicate(predicates.CheckNodeConditionPred)
|
||||
scheduler.RemoveFitPredicate(predicates.CheckNodeMemoryPressurePred)
|
||||
scheduler.RemoveFitPredicate(predicates.CheckNodeDiskPressurePred)
|
||||
scheduler.RemoveFitPredicate(predicates.CheckNodePIDPressurePred)
|
||||
// Remove key "CheckNodeCondition", "CheckNodeMemoryPressure", "CheckNodePIDPressure" and "CheckNodeDiskPressure"
|
||||
// from ALL algorithm provider
|
||||
// The key will be removed from all providers which in algorithmProviderMap[]
|
||||
// if you just want remove specific provider, call func RemovePredicateKeyFromAlgoProvider()
|
||||
scheduler.RemovePredicateKeyFromAlgorithmProviderMap(predicates.CheckNodeConditionPred)
|
||||
scheduler.RemovePredicateKeyFromAlgorithmProviderMap(predicates.CheckNodeMemoryPressurePred)
|
||||
scheduler.RemovePredicateKeyFromAlgorithmProviderMap(predicates.CheckNodeDiskPressurePred)
|
||||
scheduler.RemovePredicateKeyFromAlgorithmProviderMap(predicates.CheckNodePIDPressurePred)
|
||||
|
||||
// Fit is determined based on whether a pod can tolerate all of the node's taints
|
||||
scheduler.RegisterMandatoryFitPredicate(predicates.PodToleratesNodeTaintsPred, predicates.PodToleratesNodeTaints)
|
||||
// Fit is determined based on whether a pod can tolerate unschedulable of node
|
||||
scheduler.RegisterMandatoryFitPredicate(predicates.CheckNodeUnschedulablePred, predicates.CheckNodeUnschedulablePredicate)
|
||||
// Insert Key "PodToleratesNodeTaints" and "CheckNodeUnschedulable" To All Algorithm Provider
|
||||
// The key will insert to all providers which in algorithmProviderMap[]
|
||||
// if you just want insert to specific provider, call func InsertPredicateKeyToAlgoProvider()
|
||||
scheduler.InsertPredicateKeyToAlgorithmProviderMap(predicates.PodToleratesNodeTaintsPred)
|
||||
scheduler.InsertPredicateKeyToAlgorithmProviderMap(predicates.CheckNodeUnschedulablePred)
|
||||
|
||||
klog.Infof("TaintNodesByCondition is enabled, PodToleratesNodeTaints predicate is mandatory")
|
||||
}
|
||||
|
||||
// Only register EvenPodsSpread predicate & priority if the feature is enabled
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.EvenPodsSpread) {
|
||||
|
||||
@@ -78,12 +78,9 @@ func TestDefaultPredicates(t *testing.T) {
|
||||
predicates.MatchInterPodAffinityPred,
|
||||
predicates.NoDiskConflictPred,
|
||||
predicates.GeneralPred,
|
||||
predicates.CheckNodeMemoryPressurePred,
|
||||
predicates.CheckNodeDiskPressurePred,
|
||||
predicates.CheckNodePIDPressurePred,
|
||||
predicates.CheckNodeConditionPred,
|
||||
predicates.PodToleratesNodeTaintsPred,
|
||||
predicates.CheckVolumeBindingPred,
|
||||
predicates.CheckNodeUnschedulablePred,
|
||||
)
|
||||
|
||||
if expected := defaultPredicates(); !result.Equal(expected) {
|
||||
|
||||
@@ -113,10 +113,13 @@ func init() {
|
||||
scheduler.RegisterFitPredicate(predicates.CheckNodePIDPressurePred, predicates.CheckNodePIDPressurePredicate)
|
||||
|
||||
// Fit is determined by node conditions: not ready, network unavailable or out of disk.
|
||||
scheduler.RegisterMandatoryFitPredicate(predicates.CheckNodeConditionPred, predicates.CheckNodeConditionPredicate)
|
||||
scheduler.RegisterFitPredicate(predicates.CheckNodeConditionPred, predicates.CheckNodeConditionPredicate)
|
||||
|
||||
// Fit is determined based on whether a pod can tolerate all of the node's taints
|
||||
scheduler.RegisterFitPredicate(predicates.PodToleratesNodeTaintsPred, predicates.PodToleratesNodeTaints)
|
||||
scheduler.RegisterMandatoryFitPredicate(predicates.PodToleratesNodeTaintsPred, predicates.PodToleratesNodeTaints)
|
||||
|
||||
// Fit is determined based on whether a pod can tolerate unschedulable of node
|
||||
scheduler.RegisterMandatoryFitPredicate(predicates.CheckNodeUnschedulablePred, predicates.CheckNodeUnschedulablePredicate)
|
||||
|
||||
// Fit is determined by volume topology requirements.
|
||||
scheduler.RegisterFitPredicateFactory(
|
||||
|
||||
@@ -20,9 +20,6 @@ import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/scheduler"
|
||||
)
|
||||
|
||||
@@ -81,8 +78,8 @@ func TestApplyFeatureGates(t *testing.T) {
|
||||
t.Fatalf("Error retrieving provider: %v", err)
|
||||
}
|
||||
|
||||
if !p.FitPredicateKeys.Has("CheckNodeCondition") {
|
||||
t.Fatalf("Failed to find predicate: 'CheckNodeCondition'")
|
||||
if p.FitPredicateKeys.Has("CheckNodeCondition") {
|
||||
t.Fatalf("Unexpected predicate: 'CheckNodeCondition'")
|
||||
}
|
||||
|
||||
if !p.FitPredicateKeys.Has("PodToleratesNodeTaints") {
|
||||
@@ -91,9 +88,6 @@ func TestApplyFeatureGates(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// Apply features for algorithm providers.
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.TaintNodesByCondition, true)()
|
||||
|
||||
defer ApplyFeatureGates()()
|
||||
|
||||
for _, pn := range algorithmProviderNames {
|
||||
|
||||
Reference in New Issue
Block a user