kube-apiserver: removed the deprecated the --cloud-provider and --cloud-config CLI parameters.

Signed-off-by: carlory <baofa.fan@daocloud.io>
This commit is contained in:
carlory 2025-02-14 18:43:34 +08:00
parent 87fcae2bc7
commit 29e5d42979
9 changed files with 7 additions and 168 deletions

View File

@ -28,13 +28,11 @@ import (
cp "k8s.io/kubernetes/pkg/controlplane/apiserver/options"
"k8s.io/kubernetes/pkg/kubeapiserver"
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
)
// completedOptions is a private wrapper that enforces a call of Complete() before Run can be invoked.
type completedOptions struct {
cp.CompletedOptions
CloudProvider *kubeoptions.CloudProviderOptions
Extra
}
@ -64,7 +62,6 @@ func (s *ServerRunOptions) Complete(ctx context.Context) (CompletedOptions, erro
completed := completedOptions{
CompletedOptions: controlplane,
CloudProvider: s.CloudProvider,
Extra: s.Extra,
}

View File

@ -38,7 +38,6 @@ import (
// ServerRunOptions runs a kubernetes api server.
type ServerRunOptions struct {
*controlplaneapiserver.Options // embedded to avoid noise in existing consumers
CloudProvider *kubeoptions.CloudProviderOptions
Extra
}
@ -66,8 +65,7 @@ type Extra struct {
// NewServerRunOptions creates and returns ServerRunOptions according to the given featureGate and effectiveVersion of the server binary to run.
func NewServerRunOptions() *ServerRunOptions {
s := ServerRunOptions{
Options: controlplaneapiserver.NewOptions(),
CloudProvider: kubeoptions.NewCloudProviderOptions(),
Options: controlplaneapiserver.NewOptions(),
Extra: Extra{
EndpointReconcilerType: string(reconcilers.LeaseEndpointReconcilerType),
@ -101,7 +99,6 @@ func NewServerRunOptions() *ServerRunOptions {
// Flags returns flags for a specific APIServer by section name
func (s *ServerRunOptions) Flags() (fss cliflag.NamedFlagSets) {
s.Options.AddFlags(&fss)
s.CloudProvider.AddFlags(fss.FlagSet("cloud provider"))
// Note: the weird ""+ in below lines seems to be the only way to get gofmt to
// arrange these text blocks sensibly. Grrr.

View File

@ -331,10 +331,6 @@ func TestAddFlags(t *testing.T) {
},
MasterCount: 5,
},
CloudProvider: &kubeoptions.CloudProviderOptions{
CloudConfigFile: "/cloud-config",
CloudProvider: "azure",
},
}
expected.Authentication.OIDC.UsernameClaim = "sub"

View File

@ -132,7 +132,6 @@ func (s CompletedOptions) Validate() []error {
var errs []error
errs = append(errs, s.CompletedOptions.Validate()...)
errs = append(errs, s.CloudProvider.Validate()...)
errs = append(errs, validateClusterIPFlags(s.Extra)...)
errs = append(errs, validateServiceNodePort(s.Extra)...)
errs = append(errs, validatePublicIPServiceClusterIPRangeIPFamilies(s.Extra, *s.GenericServerRunOptions)...)

View File

@ -212,9 +212,7 @@ func CreateKubeAPIServerConfig(
capabilities.Setup(opts.AllowPrivileged, opts.MaxConnectionBytesPerSec)
// additional admission initializers
kubeAdmissionConfig := &kubeapiserveradmission.Config{
CloudConfigFile: opts.CloudProvider.CloudConfigFile,
}
kubeAdmissionConfig := &kubeapiserveradmission.Config{}
kubeInitializers, err := kubeAdmissionConfig.New()
if err != nil {
return nil, nil, nil, fmt.Errorf("failed to create admission plugin initializer: %w", err)

View File

@ -17,28 +17,13 @@ limitations under the License.
package admission
import (
"os"
"k8s.io/klog/v2"
"k8s.io/apiserver/pkg/admission"
)
// Config holds the configuration needed to for initialize the admission plugins
type Config struct {
CloudConfigFile string
}
type Config struct{}
// New sets up the plugins and admission start hooks needed for admission
func (c *Config) New() ([]admission.PluginInitializer, error) {
var cloudConfig []byte
if c.CloudConfigFile != "" {
var err error
cloudConfig, err = os.ReadFile(c.CloudConfigFile)
if err != nil {
klog.Fatalf("Error reading from cloud configuration file %s: %#v", c.CloudConfigFile, err)
}
}
return []admission.PluginInitializer{NewPluginInitializer(cloudConfig)}, nil
return []admission.PluginInitializer{NewPluginInitializer()}, nil
}

View File

@ -22,29 +22,17 @@ import (
// TODO add a `WantsToRun` which takes a stopCh. Might make it generic.
// WantsCloudConfig defines a function which sets CloudConfig for admission plugins that need it.
type WantsCloudConfig interface {
SetCloudConfig([]byte)
}
// PluginInitializer is used for initialization of the Kubernetes specific admission plugins.
type PluginInitializer struct {
cloudConfig []byte
}
var _ admission.PluginInitializer = &PluginInitializer{}
// NewPluginInitializer constructs new instance of PluginInitializer
func NewPluginInitializer(cloudConfig []byte) *PluginInitializer {
return &PluginInitializer{
cloudConfig: cloudConfig,
}
func NewPluginInitializer() *PluginInitializer {
return &PluginInitializer{}
}
// Initialize checks the initialization interfaces implemented by each plugin
// and provide the appropriate initialization data
func (i *PluginInitializer) Initialize(plugin admission.Interface) {
if wants, ok := plugin.(WantsCloudConfig); ok {
wants.SetCloudConfig(i.cloudConfig)
}
}
func (i *PluginInitializer) Initialize(plugin admission.Interface) {}

View File

@ -1,52 +0,0 @@
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package admission
import (
"context"
"testing"
"k8s.io/apiserver/pkg/admission"
)
type doNothingAdmission struct{}
func (doNothingAdmission) Admit(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error {
return nil
}
func (doNothingAdmission) Handles(o admission.Operation) bool { return false }
func (doNothingAdmission) Validate() error { return nil }
type WantsCloudConfigAdmissionPlugin struct {
doNothingAdmission
cloudConfig []byte
}
func (p *WantsCloudConfigAdmissionPlugin) SetCloudConfig(cloudConfig []byte) {
p.cloudConfig = cloudConfig
}
func TestCloudConfigAdmissionPlugin(t *testing.T) {
cloudConfig := []byte("cloud-configuration")
initializer := NewPluginInitializer(cloudConfig)
wantsCloudConfigAdmission := &WantsCloudConfigAdmissionPlugin{}
initializer.Initialize(wantsCloudConfigAdmission)
if wantsCloudConfigAdmission.cloudConfig == nil {
t.Errorf("Expected cloud config to be initialized but found nil")
}
}

View File

@ -1,69 +0,0 @@
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package options
import (
"fmt"
"github.com/spf13/pflag"
utilfeature "k8s.io/apiserver/pkg/util/feature"
cloudprovider "k8s.io/cloud-provider"
"k8s.io/kubernetes/pkg/features"
)
// CloudProviderOptions contains cloud provider config
type CloudProviderOptions struct {
CloudConfigFile string
CloudProvider string
}
// NewCloudProviderOptions creates a default CloudProviderOptions
func NewCloudProviderOptions() *CloudProviderOptions {
return &CloudProviderOptions{}
}
// Validate checks invalid config
func (opts *CloudProviderOptions) Validate() []error {
var errs []error
switch {
case opts.CloudProvider == "":
case cloudprovider.IsExternal(opts.CloudProvider):
if !utilfeature.DefaultFeatureGate.Enabled(features.DisableCloudProviders) {
errs = append(errs, fmt.Errorf("when using --cloud-provider set to '%s', "+
"please set DisableCloudProviders feature to true", opts.CloudProvider))
}
if !utilfeature.DefaultFeatureGate.Enabled(features.DisableKubeletCloudCredentialProviders) {
errs = append(errs, fmt.Errorf("when using --cloud-provider set to '%s', "+
"please set DisableKubeletCloudCredentialProviders feature to true", opts.CloudProvider))
}
default:
errs = append(errs, fmt.Errorf("unknown --cloud-provider: %s", opts.CloudProvider))
}
return errs
}
// AddFlags returns flags of cloud provider for a API Server
func (s *CloudProviderOptions) AddFlags(fs *pflag.FlagSet) {
fs.StringVar(&s.CloudProvider, "cloud-provider", s.CloudProvider,
"The provider for cloud services. Empty string for no provider.")
fs.MarkDeprecated("cloud-provider", "will be removed in a future version") // nolint: errcheck
fs.StringVar(&s.CloudConfigFile, "cloud-config", s.CloudConfigFile,
"The path to the cloud provider configuration file. Empty string for no configuration file.")
fs.MarkDeprecated("cloud-config", "will be removed in a future version") // nolint: errcheck
}