Merge pull request #112643 from SergeyKanzhelev/removeDynamicKubeletConfig
remove DynamicKubeletConfig feature gate from the code
This commit is contained in:
@@ -4160,7 +4160,7 @@ type NodeSpec struct {
|
||||
// +optional
|
||||
Taints []Taint
|
||||
|
||||
// Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed from Kubelets as of 1.24 and will be fully removed in 1.26.
|
||||
// Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed.
|
||||
// +optional
|
||||
ConfigSource *NodeConfigSource
|
||||
|
||||
|
@@ -5259,6 +5259,8 @@ func ValidateNodeUpdate(node, oldNode *core.Node) field.ErrorList {
|
||||
}
|
||||
|
||||
// validation specific to Node.Spec.ConfigSource
|
||||
// The field ConfigSource is deprecated and will not be used. The validation is kept in place
|
||||
// for the backward compatibility
|
||||
func validateNodeConfigSourceSpec(source *core.NodeConfigSource, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
count := int(0)
|
||||
@@ -5276,6 +5278,8 @@ func validateNodeConfigSourceSpec(source *core.NodeConfigSource, fldPath *field.
|
||||
}
|
||||
|
||||
// validation specific to Node.Spec.ConfigSource.ConfigMap
|
||||
// The field ConfigSource is deprecated and will not be used. The validation is kept in place
|
||||
// for the backward compatibility
|
||||
func validateConfigMapNodeConfigSourceSpec(source *core.ConfigMapNodeConfigSource, fldPath *field.Path) field.ErrorList {
|
||||
allErrs := field.ErrorList{}
|
||||
// uid and resourceVersion must not be set in spec
|
||||
|
@@ -256,12 +256,6 @@ const (
|
||||
// Enables usage of hugepages-<size> in downward API.
|
||||
DownwardAPIHugePages featuregate.Feature = "DownwardAPIHugePages"
|
||||
|
||||
// owner: @mtaufen
|
||||
// alpha: v1.4
|
||||
// beta: v1.11
|
||||
// deprecated: 1.22
|
||||
DynamicKubeletConfig featuregate.Feature = "DynamicKubeletConfig"
|
||||
|
||||
// owner: @andrewsykim
|
||||
// kep: https://kep.k8s.io/1672
|
||||
// alpha: v1.20
|
||||
@@ -863,8 +857,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
||||
|
||||
DownwardAPIHugePages: {Default: true, PreRelease: featuregate.Beta}, // on by default in 1.22
|
||||
|
||||
DynamicKubeletConfig: {Default: false, PreRelease: featuregate.Deprecated}, // feature gate is deprecated in 1.22, kubelet logic is removed in 1.24, api server logic can be removed in 1.26
|
||||
|
||||
EndpointSliceTerminatingCondition: {Default: true, PreRelease: featuregate.Beta},
|
||||
|
||||
EphemeralContainers: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.27
|
||||
|
2
pkg/generated/openapi/zz_generated.openapi.go
generated
2
pkg/generated/openapi/zz_generated.openapi.go
generated
@@ -19913,7 +19913,7 @@ func schema_k8sio_api_core_v1_NodeSpec(ref common.ReferenceCallback) common.Open
|
||||
},
|
||||
"configSource": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed from Kubelets as of 1.24 and will be fully removed in 1.26.",
|
||||
Description: "Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed.",
|
||||
Ref: ref("k8s.io/api/core/v1.NodeConfigSource"),
|
||||
},
|
||||
},
|
||||
|
@@ -34,11 +34,9 @@ import (
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
pkgstorage "k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/apiserver/pkg/storage/names"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/apis/core/validation"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/kubernetes/pkg/kubelet/client"
|
||||
proxyutil "k8s.io/kubernetes/pkg/proxy/util"
|
||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||
@@ -94,13 +92,13 @@ func (nodeStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Objec
|
||||
func dropDisabledFields(node *api.Node, oldNode *api.Node) {
|
||||
// Nodes allow *all* fields, including status, to be set on create.
|
||||
// for create
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) && oldNode == nil {
|
||||
if oldNode == nil {
|
||||
node.Spec.ConfigSource = nil
|
||||
node.Status.Config = nil
|
||||
}
|
||||
|
||||
// for update
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) && !nodeConfigSourceInUse(oldNode) && oldNode != nil {
|
||||
if !nodeConfigSourceInUse(oldNode) && oldNode != nil {
|
||||
node.Spec.ConfigSource = nil
|
||||
}
|
||||
|
||||
@@ -170,7 +168,7 @@ func (nodeStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime
|
||||
oldNode := old.(*api.Node)
|
||||
newNode.Spec = oldNode.Spec
|
||||
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) && !nodeStatusConfigInUse(oldNode) {
|
||||
if !nodeStatusConfigInUse(oldNode) {
|
||||
newNode.Status.Config = nil
|
||||
}
|
||||
}
|
||||
@@ -274,7 +272,7 @@ func dynamicKubeletConfigIsDeprecatedWarning(obj runtime.Object) []string {
|
||||
if newNode.Spec.ConfigSource != nil {
|
||||
var warnings []string
|
||||
// KEP https://github.com/kubernetes/enhancements/issues/281
|
||||
warnings = append(warnings, "spec.configSource: deprecated in v1.22, support removal is planned in v1.23")
|
||||
warnings = append(warnings, "spec.configSource: the feature is removed")
|
||||
return warnings
|
||||
}
|
||||
return nil
|
||||
|
@@ -27,11 +27,8 @@ import (
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/util/diff"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
|
||||
// ensure types are installed
|
||||
_ "k8s.io/kubernetes/pkg/apis/core/install"
|
||||
@@ -88,11 +85,10 @@ func makeNode(podCIDRs []string, addSpecDynamicConfig bool, addStatusDynamicConf
|
||||
|
||||
func TestDropFields(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
node *api.Node
|
||||
oldNode *api.Node
|
||||
compareNode *api.Node
|
||||
enableNodeDynamicConfig bool
|
||||
name string
|
||||
node *api.Node
|
||||
oldNode *api.Node
|
||||
compareNode *api.Node
|
||||
}{
|
||||
{
|
||||
name: "nil pod cidrs",
|
||||
@@ -127,60 +123,45 @@ func TestDropFields(t *testing.T) {
|
||||
compareNode: makeNode([]string{"2000::/10", "10.0.0.0/8"}, false, false),
|
||||
},
|
||||
{
|
||||
name: "new with no Spec.ConfigSource and no Status.Config , enableNodeDynamicConfig disabled",
|
||||
enableNodeDynamicConfig: false,
|
||||
node: makeNode(nil, false, false),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, false, false),
|
||||
name: "new with no Spec.ConfigSource and no Status.Config",
|
||||
node: makeNode(nil, false, false),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, false, false),
|
||||
},
|
||||
{
|
||||
name: "new with Spec.ConfigSource and no Status.Config, enableNodeDynamicConfig disabled",
|
||||
enableNodeDynamicConfig: false,
|
||||
node: makeNode(nil, true, false),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, false, false),
|
||||
name: "new with Spec.ConfigSource and no Status.Config",
|
||||
node: makeNode(nil, true, false),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, false, false),
|
||||
},
|
||||
{
|
||||
name: "new with Spec.ConfigSource and Status.Config, enableNodeDynamicConfig disabled",
|
||||
enableNodeDynamicConfig: false,
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, false, false),
|
||||
name: "new with Spec.ConfigSource and Status.Config",
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, false, false),
|
||||
},
|
||||
{
|
||||
name: "update with Spec.ConfigSource and Status.Config (old has none), enableNodeDynamicConfig disabled",
|
||||
enableNodeDynamicConfig: false,
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: makeNode(nil, false, false),
|
||||
compareNode: makeNode(nil, false, true),
|
||||
name: "update with Spec.ConfigSource and Status.Config (old has none)",
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: makeNode(nil, false, false),
|
||||
compareNode: makeNode(nil, false, true),
|
||||
},
|
||||
{
|
||||
name: "update with Spec.ConfigSource and Status.Config (old has them), enableNodeDynamicConfig disabled",
|
||||
enableNodeDynamicConfig: false,
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: makeNode(nil, true, true),
|
||||
compareNode: makeNode(nil, true, true),
|
||||
name: "update with Spec.ConfigSource and Status.Config (old has them)",
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: makeNode(nil, true, true),
|
||||
compareNode: makeNode(nil, true, true),
|
||||
},
|
||||
{
|
||||
name: "update with Spec.ConfigSource and Status.Config (old has Status.Config), enableNodeDynamicConfig disabled",
|
||||
enableNodeDynamicConfig: false,
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: makeNode(nil, false, true),
|
||||
compareNode: makeNode(nil, false, true),
|
||||
},
|
||||
{
|
||||
name: "new with Spec.ConfigSource and Status.Config, enableNodeDynamicConfig enabled",
|
||||
enableNodeDynamicConfig: true,
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: nil,
|
||||
compareNode: makeNode(nil, true, true),
|
||||
name: "update with Spec.ConfigSource and Status.Config (old has Status.Config)",
|
||||
node: makeNode(nil, true, true),
|
||||
oldNode: makeNode(nil, false, true),
|
||||
compareNode: makeNode(nil, false, true),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
func() {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DynamicKubeletConfig, tc.enableNodeDynamicConfig)()
|
||||
|
||||
dropDisabledFields(tc.node, tc.oldNode)
|
||||
|
||||
old := tc.oldNode.DeepCopy()
|
||||
|
Reference in New Issue
Block a user