Skip to content

Commit 379676c

Browse files
add DefaultComponentGlobalsRegistry flags in ServerRunOptions
Signed-off-by: Siyuan Zhang <[email protected]>
1 parent 4352c4a commit 379676c

File tree

36 files changed

+731
-282
lines changed

36 files changed

+731
-282
lines changed

cmd/kube-apiserver/app/options/options.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import (
2626
utilnet "k8s.io/apimachinery/pkg/util/net"
2727
cliflag "k8s.io/component-base/cli/flag"
2828

29-
utilversion "k8s.io/apiserver/pkg/util/version"
30-
"k8s.io/component-base/featuregate"
3129
api "k8s.io/kubernetes/pkg/apis/core"
3230
"k8s.io/kubernetes/pkg/cluster/ports"
3331
controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
@@ -66,9 +64,9 @@ type Extra struct {
6664
}
6765

6866
// NewServerRunOptions creates and returns ServerRunOptions according to the given featureGate and effectiveVersion of the server binary to run.
69-
func NewServerRunOptions(featureGate featuregate.FeatureGate, effectiveVersion utilversion.EffectiveVersion) *ServerRunOptions {
67+
func NewServerRunOptions() *ServerRunOptions {
7068
s := ServerRunOptions{
71-
Options: controlplaneapiserver.NewOptions(featureGate, effectiveVersion),
69+
Options: controlplaneapiserver.NewOptions(),
7270
CloudProvider: kubeoptions.NewCloudProviderOptions(),
7371

7472
Extra: Extra{

cmd/kube-apiserver/app/options/options_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,17 @@ import (
4848
)
4949

5050
func TestAddFlags(t *testing.T) {
51+
componentGlobalsRegistry := utilversion.DefaultComponentGlobalsRegistry
52+
t.Cleanup(func() {
53+
componentGlobalsRegistry.Reset()
54+
})
5155
fs := pflag.NewFlagSet("addflagstest", pflag.PanicOnError)
5256

53-
featureGate := featuregate.NewFeatureGate()
54-
componentRegistry := utilversion.NewComponentGlobalsRegistry()
55-
effectiveVersion := utilversion.NewEffectiveVersion("1.32")
56-
utilruntime.Must(componentRegistry.Register("test", effectiveVersion, featureGate))
57-
s := NewServerRunOptions(featureGate, effectiveVersion)
57+
utilruntime.Must(componentGlobalsRegistry.Register("test", utilversion.NewEffectiveVersion("1.32"), featuregate.NewFeatureGate()))
58+
s := NewServerRunOptions()
5859
for _, f := range s.Flags().FlagSets {
5960
fs.AddFlagSet(f)
6061
}
61-
componentRegistry.AddFlags(fs)
6262

6363
args := []string{
6464
"--enable-admission-plugins=AlwaysDeny",
@@ -133,7 +133,7 @@ func TestAddFlags(t *testing.T) {
133133
"--emulated-version=test=1.31",
134134
}
135135
fs.Parse(args)
136-
utilruntime.Must(componentRegistry.Set())
136+
utilruntime.Must(componentGlobalsRegistry.Set())
137137

138138
// This is a snapshot of expected options parsed by args.
139139
expected := &ServerRunOptions{
@@ -147,8 +147,8 @@ func TestAddFlags(t *testing.T) {
147147
MinRequestTimeout: 1800,
148148
JSONPatchMaxCopyBytes: int64(3 * 1024 * 1024),
149149
MaxRequestBodyBytes: int64(3 * 1024 * 1024),
150-
FeatureGate: featureGate,
151-
EffectiveVersion: effectiveVersion,
150+
ComponentGlobalsRegistry: componentGlobalsRegistry,
151+
ComponentName: utilversion.DefaultKubeComponent,
152152
},
153153
Admission: &kubeoptions.AdmissionOptions{
154154
GenericAdmission: &apiserveroptions.AdmissionOptions{
@@ -350,8 +350,8 @@ func TestAddFlags(t *testing.T) {
350350
if !reflect.DeepEqual(expected, s) {
351351
t.Errorf("Got different run options than expected.\nDifference detected on:\n%s", cmp.Diff(expected, s, cmpopts.IgnoreUnexported(admission.Plugins{}, kubeoptions.OIDCAuthenticationOptions{})))
352352
}
353-
354-
if s.GenericServerRunOptions.EffectiveVersion.EmulationVersion().String() != "1.31" {
355-
t.Errorf("Got emulation version %s, wanted %s", s.GenericServerRunOptions.EffectiveVersion.EmulationVersion().String(), "1.31")
353+
testEffectiveVersion := s.GenericServerRunOptions.ComponentGlobalsRegistry.EffectiveVersionFor("test")
354+
if testEffectiveVersion.EmulationVersion().String() != "1.31" {
355+
t.Errorf("Got emulation version %s, wanted %s", testEffectiveVersion.EmulationVersion().String(), "1.31")
356356
}
357357
}

cmd/kube-apiserver/app/options/validation.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
utilfeature "k8s.io/apiserver/pkg/util/feature"
2727
netutils "k8s.io/utils/net"
2828

29+
"k8s.io/apimachinery/pkg/util/version"
2930
controlplaneapiserver "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
3031
"k8s.io/kubernetes/pkg/controlplane/reconcilers"
3132
"k8s.io/kubernetes/pkg/features"
@@ -139,5 +140,14 @@ func (s CompletedOptions) Validate() []error {
139140
errs = append(errs, fmt.Errorf("--apiserver-count should be a positive number, but value '%d' provided", s.MasterCount))
140141
}
141142

143+
// TODO: remove in 1.32
144+
// emulationVersion is introduced in 1.31, so it is only allowed to be equal to the binary version at 1.31.
145+
effectiveVersion := s.GenericServerRunOptions.ComponentGlobalsRegistry.EffectiveVersionFor(s.GenericServerRunOptions.ComponentName)
146+
binaryVersion := version.MajorMinor(effectiveVersion.BinaryVersion().Major(), effectiveVersion.BinaryVersion().Minor())
147+
if binaryVersion.EqualTo(version.MajorMinor(1, 31)) && !effectiveVersion.EmulationVersion().EqualTo(binaryVersion) {
148+
errs = append(errs, fmt.Errorf("emulation version needs to be equal to binary version(%s) in compatibility-version alpha, got %s",
149+
binaryVersion.String(), effectiveVersion.EmulationVersion().String()))
150+
}
151+
142152
return errs
143153
}

cmd/kube-apiserver/app/server.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ func init() {
6464

6565
// NewAPIServerCommand creates a *cobra.Command object with default parameters
6666
func NewAPIServerCommand() *cobra.Command {
67-
effectiveVersion, featureGate := utilversion.DefaultComponentGlobalsRegistry.ComponentGlobalsOrRegister(
67+
_, featureGate := utilversion.DefaultComponentGlobalsRegistry.ComponentGlobalsOrRegister(
6868
utilversion.DefaultKubeComponent, utilversion.DefaultBuildEffectiveVersion(), utilfeature.DefaultMutableFeatureGate)
69-
s := options.NewServerRunOptions(featureGate, effectiveVersion)
69+
s := options.NewServerRunOptions()
7070

7171
cmd := &cobra.Command{
7272
Use: "kube-apiserver",
@@ -124,8 +124,6 @@ cluster's shared state through which all other components interact.`,
124124
fs := cmd.Flags()
125125
namedFlagSets := s.Flags()
126126
verflag.AddFlags(namedFlagSets.FlagSet("global"))
127-
utilversion.DefaultComponentGlobalsRegistry.AddFlags(namedFlagSets.FlagSet("global"))
128-
129127
globalflag.AddGlobalFlags(namedFlagSets.FlagSet("global"), cmd.Name(), logs.SkipLoggingConfigurationFlags())
130128
options.AddCustomGlobalFlags(namedFlagSets.FlagSet("generic"))
131129
for _, f := range namedFlagSets.FlagSets {

cmd/kube-apiserver/app/testing/testserver.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import (
5555
clientgotransport "k8s.io/client-go/transport"
5656
"k8s.io/client-go/util/cert"
5757
"k8s.io/client-go/util/keyutil"
58+
featuregatetesting "k8s.io/component-base/featuregate/testing"
5859
logsapi "k8s.io/component-base/logs/api/v1"
5960
"k8s.io/klog/v2"
6061
"k8s.io/kube-aggregator/pkg/apiserver"
@@ -187,15 +188,16 @@ func StartTestServer(t ktesting.TB, instanceOptions *TestServerInstanceOptions,
187188
if instanceOptions.BinaryVersion != "" {
188189
effectiveVersion = utilversion.NewEffectiveVersion(instanceOptions.BinaryVersion)
189190
}
191+
// need to call SetFeatureGateEmulationVersionDuringTest to reset the feature gate emulation version at the end of the test.
192+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, featureGate, effectiveVersion.EmulationVersion())
190193
utilversion.DefaultComponentGlobalsRegistry.Reset()
191194
utilruntime.Must(utilversion.DefaultComponentGlobalsRegistry.Register(utilversion.DefaultKubeComponent, effectiveVersion, featureGate))
192195

193-
s := options.NewServerRunOptions(featureGate, effectiveVersion)
196+
s := options.NewServerRunOptions()
194197

195198
for _, f := range s.Flags().FlagSets {
196199
fs.AddFlagSet(f)
197200
}
198-
utilversion.DefaultComponentGlobalsRegistry.AddFlags(fs)
199201

200202
s.SecureServing.Listener, s.SecureServing.BindPort, err = createLocalhostListenerOnFreePort()
201203
if err != nil {

pkg/controlplane/apiserver/config_test.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ import (
2424
"k8s.io/apimachinery/pkg/runtime"
2525
"k8s.io/apimachinery/pkg/runtime/schema"
2626
apiserveroptions "k8s.io/apiserver/pkg/server/options"
27-
utilversion "k8s.io/apiserver/pkg/util/version"
28-
"k8s.io/component-base/featuregate"
2927
aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme"
3028
"k8s.io/kubernetes/pkg/api/legacyscheme"
3129
"k8s.io/kubernetes/pkg/controlplane/apiserver/options"
@@ -34,9 +32,7 @@ import (
3432
)
3533

3634
func TestBuildGenericConfig(t *testing.T) {
37-
featureGate := featuregate.NewFeatureGate()
38-
effectiveVersion := utilversion.DefaultKubeEffectiveVersion()
39-
opts := options.NewOptions(featureGate, effectiveVersion)
35+
opts := options.NewOptions()
4036
s := (&apiserveroptions.SecureServingOptions{
4137
BindAddress: netutils.ParseIPSloppy("127.0.0.1"),
4238
}).WithLoopback()

pkg/controlplane/apiserver/options/options.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ import (
2828
peerreconcilers "k8s.io/apiserver/pkg/reconcilers"
2929
genericoptions "k8s.io/apiserver/pkg/server/options"
3030
"k8s.io/apiserver/pkg/storage/storagebackend"
31-
utilversion "k8s.io/apiserver/pkg/util/version"
3231
"k8s.io/client-go/util/keyutil"
3332
cliflag "k8s.io/component-base/cli/flag"
34-
"k8s.io/component-base/featuregate"
3533
"k8s.io/component-base/logs"
3634
logsapi "k8s.io/component-base/logs/api/v1"
3735
"k8s.io/component-base/metrics"
@@ -100,9 +98,9 @@ type CompletedOptions struct {
10098
}
10199

102100
// NewOptions creates a new ServerRunOptions object with default parameters
103-
func NewOptions(featureGate featuregate.FeatureGate, effectiveVersion utilversion.EffectiveVersion) *Options {
101+
func NewOptions() *Options {
104102
s := Options{
105-
GenericServerRunOptions: genericoptions.NewServerRunOptions(featureGate, effectiveVersion),
103+
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
106104
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, nil)),
107105
SecureServing: kubeoptions.NewSecureServingOptions(),
108106
Audit: genericoptions.NewAuditOptions(),

pkg/controlplane/apiserver/options/options_test.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,18 @@ import (
4444
)
4545

4646
func TestAddFlags(t *testing.T) {
47+
componentGlobalsRegistry := utilversion.DefaultComponentGlobalsRegistry
48+
t.Cleanup(func() {
49+
componentGlobalsRegistry.Reset()
50+
})
4751
fs := pflag.NewFlagSet("addflagstest", pflag.PanicOnError)
48-
featureGate := featuregate.NewFeatureGate()
49-
effectiveVersion := utilversion.NewEffectiveVersion("1.32")
50-
componentRegistry := utilversion.NewComponentGlobalsRegistry()
51-
utilruntime.Must(componentRegistry.Register("test", effectiveVersion, featureGate))
52-
s := NewOptions(featureGate, effectiveVersion)
52+
utilruntime.Must(componentGlobalsRegistry.Register("test", utilversion.NewEffectiveVersion("1.32"), featuregate.NewFeatureGate()))
53+
s := NewOptions()
5354
var fss cliflag.NamedFlagSets
5455
s.AddFlags(&fss)
5556
for _, f := range fss.FlagSets {
5657
fs.AddFlagSet(f)
5758
}
58-
componentRegistry.AddFlags(fs)
5959

6060
args := []string{
6161
"--enable-admission-plugins=AlwaysDeny",
@@ -119,7 +119,7 @@ func TestAddFlags(t *testing.T) {
119119
"--emulated-version=test=1.31",
120120
}
121121
fs.Parse(args)
122-
utilruntime.Must(componentRegistry.Set())
122+
utilruntime.Must(componentGlobalsRegistry.Set())
123123

124124
// This is a snapshot of expected options parsed by args.
125125
expected := &Options{
@@ -132,8 +132,8 @@ func TestAddFlags(t *testing.T) {
132132
MinRequestTimeout: 1800,
133133
JSONPatchMaxCopyBytes: int64(3 * 1024 * 1024),
134134
MaxRequestBodyBytes: int64(3 * 1024 * 1024),
135-
FeatureGate: featureGate,
136-
EffectiveVersion: effectiveVersion,
135+
ComponentGlobalsRegistry: componentGlobalsRegistry,
136+
ComponentName: utilversion.DefaultKubeComponent,
137137
},
138138
Admission: &kubeoptions.AdmissionOptions{
139139
GenericAdmission: &apiserveroptions.AdmissionOptions{
@@ -305,7 +305,8 @@ func TestAddFlags(t *testing.T) {
305305
t.Errorf("Got different run options than expected.\nDifference detected on:\n%s", cmp.Diff(expected, s, cmpopts.IgnoreUnexported(admission.Plugins{}, kubeoptions.OIDCAuthenticationOptions{})))
306306
}
307307

308-
if s.GenericServerRunOptions.EffectiveVersion.EmulationVersion().String() != "1.31" {
309-
t.Errorf("Got emulation version %s, wanted %s", s.GenericServerRunOptions.EffectiveVersion.EmulationVersion().String(), "1.31")
308+
testEffectiveVersion := s.GenericServerRunOptions.ComponentGlobalsRegistry.EffectiveVersionFor("test")
309+
if testEffectiveVersion.EmulationVersion().String() != "1.31" {
310+
t.Errorf("Got emulation version %s, wanted %s", testEffectiveVersion.EmulationVersion().String(), "1.31")
310311
}
311312
}

pkg/controlplane/apiserver/options/validation_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ func TestValidateOptions(t *testing.T) {
201201
name: "validate master count equal 0",
202202
expectErrors: true,
203203
options: &Options{
204-
GenericServerRunOptions: &genericoptions.ServerRunOptions{FeatureGate: utilfeature.DefaultFeatureGate.DeepCopy(), EffectiveVersion: utilversion.NewEffectiveVersion("1.32")},
204+
GenericServerRunOptions: &genericoptions.ServerRunOptions{ComponentGlobalsRegistry: utilversion.DefaultComponentGlobalsRegistry},
205205
Etcd: &genericoptions.EtcdOptions{},
206206
SecureServing: &genericoptions.SecureServingOptionsWithLoopback{},
207207
Audit: &genericoptions.AuditOptions{},
@@ -228,7 +228,7 @@ func TestValidateOptions(t *testing.T) {
228228
name: "validate token request enable not attempted",
229229
expectErrors: true,
230230
options: &Options{
231-
GenericServerRunOptions: &genericoptions.ServerRunOptions{FeatureGate: utilfeature.DefaultFeatureGate.DeepCopy(), EffectiveVersion: utilversion.NewEffectiveVersion("1.32")},
231+
GenericServerRunOptions: &genericoptions.ServerRunOptions{ComponentGlobalsRegistry: utilversion.DefaultComponentGlobalsRegistry},
232232
Etcd: &genericoptions.EtcdOptions{},
233233
SecureServing: &genericoptions.SecureServingOptionsWithLoopback{},
234234
Audit: &genericoptions.AuditOptions{},

staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,9 @@ import (
3939
flowcontrolrequest "k8s.io/apiserver/pkg/util/flowcontrol/request"
4040
"k8s.io/apiserver/pkg/util/openapi"
4141
"k8s.io/apiserver/pkg/util/proxy"
42-
utilversion "k8s.io/apiserver/pkg/util/version"
4342
"k8s.io/apiserver/pkg/util/webhook"
4443
scheme "k8s.io/client-go/kubernetes/scheme"
4544
corev1 "k8s.io/client-go/listers/core/v1"
46-
"k8s.io/component-base/featuregate"
4745
netutils "k8s.io/utils/net"
4846
)
4947

@@ -60,9 +58,9 @@ type CustomResourceDefinitionsServerOptions struct {
6058
}
6159

6260
// NewCustomResourceDefinitionsServerOptions creates default options of an apiextensions-apiserver.
63-
func NewCustomResourceDefinitionsServerOptions(out, errOut io.Writer, featureGate featuregate.FeatureGate, effectiveVersion utilversion.EffectiveVersion) *CustomResourceDefinitionsServerOptions {
61+
func NewCustomResourceDefinitionsServerOptions(out, errOut io.Writer) *CustomResourceDefinitionsServerOptions {
6462
o := &CustomResourceDefinitionsServerOptions{
65-
ServerRunOptions: genericoptions.NewServerRunOptions(featureGate, effectiveVersion),
63+
ServerRunOptions: genericoptions.NewServerRunOptions(),
6664
RecommendedOptions: genericoptions.NewRecommendedOptions(
6765
defaultEtcdPathPrefix,
6866
apiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion),

0 commit comments

Comments
 (0)