mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 03:57:41 +00:00
MOVE: cmd/kube-apiserver/app.createAPIExtensionsConfig -> pkg/controlplane
This commit is contained in:
parent
c831a08c8e
commit
f7d4e90b5c
@ -20,76 +20,10 @@ limitations under the License.
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
|
||||||
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
|
||||||
apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver"
|
apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver"
|
||||||
apiextensionsoptions "k8s.io/apiextensions-apiserver/pkg/cmd/server/options"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
"k8s.io/apiserver/pkg/admission"
|
|
||||||
"k8s.io/apiserver/pkg/features"
|
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
|
||||||
"k8s.io/apiserver/pkg/util/webhook"
|
|
||||||
kubeexternalinformers "k8s.io/client-go/informers"
|
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func createAPIExtensionsConfig(
|
|
||||||
kubeAPIServerConfig genericapiserver.Config,
|
|
||||||
externalInformers kubeexternalinformers.SharedInformerFactory,
|
|
||||||
pluginInitializers []admission.PluginInitializer,
|
|
||||||
commandOptions *options.ServerRunOptions,
|
|
||||||
masterCount int,
|
|
||||||
serviceResolver webhook.ServiceResolver,
|
|
||||||
authResolverWrapper webhook.AuthenticationInfoResolverWrapper,
|
|
||||||
) (*apiextensionsapiserver.Config, error) {
|
|
||||||
// make a shallow copy to let us twiddle a few things
|
|
||||||
// most of the config actually remains the same. We only need to mess with a couple items related to the particulars of the apiextensions
|
|
||||||
genericConfig := kubeAPIServerConfig
|
|
||||||
genericConfig.PostStartHooks = map[string]genericapiserver.PostStartHookConfigEntry{}
|
|
||||||
genericConfig.RESTOptionsGetter = nil
|
|
||||||
|
|
||||||
// copy the etcd options so we don't mutate originals.
|
|
||||||
// we assume that the etcd options have been completed already. avoid messing with anything outside
|
|
||||||
// of changes to StorageConfig as that may lead to unexpected behavior when the options are applied.
|
|
||||||
etcdOptions := *commandOptions.Etcd
|
|
||||||
etcdOptions.StorageConfig.Paging = utilfeature.DefaultFeatureGate.Enabled(features.APIListChunking)
|
|
||||||
// this is where the true decodable levels come from.
|
|
||||||
etcdOptions.StorageConfig.Codec = apiextensionsapiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion)
|
|
||||||
// prefer the more compact serialization (v1beta1) for storage until https://issue.k8s.io/82292 is resolved for objects whose v1 serialization is too big but whose v1beta1 serialization can be stored
|
|
||||||
etcdOptions.StorageConfig.EncodeVersioner = runtime.NewMultiGroupVersioner(v1beta1.SchemeGroupVersion, schema.GroupKind{Group: v1beta1.GroupName})
|
|
||||||
etcdOptions.SkipHealthEndpoints = true // avoid double wiring of health checks
|
|
||||||
if err := etcdOptions.ApplyTo(&genericConfig); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// override MergedResourceConfig with apiextensions defaults and registry
|
|
||||||
if err := commandOptions.APIEnablement.ApplyTo(
|
|
||||||
&genericConfig,
|
|
||||||
apiextensionsapiserver.DefaultAPIResourceConfigSource(),
|
|
||||||
apiextensionsapiserver.Scheme); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
apiextensionsConfig := &apiextensionsapiserver.Config{
|
|
||||||
GenericConfig: &genericapiserver.RecommendedConfig{
|
|
||||||
Config: genericConfig,
|
|
||||||
SharedInformerFactory: externalInformers,
|
|
||||||
},
|
|
||||||
ExtraConfig: apiextensionsapiserver.ExtraConfig{
|
|
||||||
CRDRESTOptionsGetter: apiextensionsoptions.NewCRDRESTOptionsGetter(etcdOptions, genericConfig.ResourceTransformers, genericConfig.StorageObjectCountTracker),
|
|
||||||
MasterCount: masterCount,
|
|
||||||
AuthResolverWrapper: authResolverWrapper,
|
|
||||||
ServiceResolver: serviceResolver,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// we need to clear the poststarthooks so we don't add them multiple times to all the servers (that fails)
|
|
||||||
apiextensionsConfig.GenericConfig.PostStartHooks = map[string]genericapiserver.PostStartHookConfigEntry{}
|
|
||||||
|
|
||||||
return apiextensionsConfig, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func createAPIExtensionsServer(apiextensionsConfig *apiextensionsapiserver.Config, delegateAPIServer genericapiserver.DelegationTarget) (*apiextensionsapiserver.CustomResourceDefinitions, error) {
|
func createAPIExtensionsServer(apiextensionsConfig *apiextensionsapiserver.Config, delegateAPIServer genericapiserver.DelegationTarget) (*apiextensionsapiserver.CustomResourceDefinitions, error) {
|
||||||
return apiextensionsConfig.Complete().New(delegateAPIServer)
|
return apiextensionsConfig.Complete().New(delegateAPIServer)
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/capabilities"
|
"k8s.io/kubernetes/pkg/capabilities"
|
||||||
"k8s.io/kubernetes/pkg/controlplane"
|
"k8s.io/kubernetes/pkg/controlplane"
|
||||||
|
"k8s.io/kubernetes/pkg/controlplane/apiserver"
|
||||||
"k8s.io/kubernetes/pkg/controlplane/reconcilers"
|
"k8s.io/kubernetes/pkg/controlplane/reconcilers"
|
||||||
generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi"
|
generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi"
|
||||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
"k8s.io/kubernetes/pkg/kubeapiserver"
|
||||||
@ -189,7 +190,7 @@ func CreateServerChain(completedOptions completedServerRunOptions) (*aggregatora
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If additional API servers are added, they should be gated.
|
// If additional API servers are added, they should be gated.
|
||||||
apiExtensionsConfig, err := createAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, kubeAPIServerConfig.ExtraConfig.VersionedInformers, pluginInitializer, completedOptions.ServerRunOptions, completedOptions.MasterCount,
|
apiExtensionsConfig, err := apiserver.CreateAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, kubeAPIServerConfig.ExtraConfig.VersionedInformers, pluginInitializer, completedOptions.ServerRunOptions, completedOptions.MasterCount,
|
||||||
serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(kubeAPIServerConfig.ExtraConfig.ProxyTransport, kubeAPIServerConfig.GenericConfig.EgressSelector, kubeAPIServerConfig.GenericConfig.LoopbackClientConfig, kubeAPIServerConfig.GenericConfig.TracerProvider))
|
serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(kubeAPIServerConfig.ExtraConfig.ProxyTransport, kubeAPIServerConfig.GenericConfig.EgressSelector, kubeAPIServerConfig.GenericConfig.LoopbackClientConfig, kubeAPIServerConfig.GenericConfig.TracerProvider))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
89
pkg/controlplane/apiserver/apiextensions.go
Normal file
89
pkg/controlplane/apiserver/apiextensions.go
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2023 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 apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||||
|
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||||
|
apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver"
|
||||||
|
apiextensionsoptions "k8s.io/apiextensions-apiserver/pkg/cmd/server/options"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apiserver/pkg/admission"
|
||||||
|
"k8s.io/apiserver/pkg/features"
|
||||||
|
"k8s.io/apiserver/pkg/server"
|
||||||
|
"k8s.io/apiserver/pkg/util/feature"
|
||||||
|
"k8s.io/apiserver/pkg/util/webhook"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CreateAPIExtensionsConfig(
|
||||||
|
kubeAPIServerConfig server.Config,
|
||||||
|
kubeInformers informers.SharedInformerFactory,
|
||||||
|
pluginInitializers []admission.PluginInitializer,
|
||||||
|
commandOptions *options.ServerRunOptions,
|
||||||
|
masterCount int,
|
||||||
|
serviceResolver webhook.ServiceResolver,
|
||||||
|
authResolverWrapper webhook.AuthenticationInfoResolverWrapper,
|
||||||
|
) (*apiextensionsapiserver.Config, error) {
|
||||||
|
// make a shallow copy to let us twiddle a few things
|
||||||
|
// most of the config actually remains the same. We only need to mess with a couple items related to the particulars of the apiextensions
|
||||||
|
genericConfig := kubeAPIServerConfig
|
||||||
|
genericConfig.PostStartHooks = map[string]server.PostStartHookConfigEntry{}
|
||||||
|
genericConfig.RESTOptionsGetter = nil
|
||||||
|
|
||||||
|
// copy the etcd options so we don't mutate originals.
|
||||||
|
// we assume that the etcd options have been completed already. avoid messing with anything outside
|
||||||
|
// of changes to StorageConfig as that may lead to unexpected behavior when the options are applied.
|
||||||
|
etcdOptions := *commandOptions.Etcd
|
||||||
|
etcdOptions.StorageConfig.Paging = feature.DefaultFeatureGate.Enabled(features.APIListChunking)
|
||||||
|
// this is where the true decodable levels come from.
|
||||||
|
etcdOptions.StorageConfig.Codec = apiextensionsapiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion)
|
||||||
|
// prefer the more compact serialization (v1beta1) for storage until https://issue.k8s.io/82292 is resolved for objects whose v1 serialization is too big but whose v1beta1 serialization can be stored
|
||||||
|
etcdOptions.StorageConfig.EncodeVersioner = runtime.NewMultiGroupVersioner(v1beta1.SchemeGroupVersion, schema.GroupKind{Group: v1beta1.GroupName})
|
||||||
|
etcdOptions.SkipHealthEndpoints = true // avoid double wiring of health checks
|
||||||
|
if err := etcdOptions.ApplyTo(&genericConfig); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// override MergedResourceConfig with apiextensions defaults and registry
|
||||||
|
if err := commandOptions.APIEnablement.ApplyTo(
|
||||||
|
&genericConfig,
|
||||||
|
apiextensionsapiserver.DefaultAPIResourceConfigSource(),
|
||||||
|
apiextensionsapiserver.Scheme); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
apiextensionsConfig := &apiextensionsapiserver.Config{
|
||||||
|
GenericConfig: &server.RecommendedConfig{
|
||||||
|
Config: genericConfig,
|
||||||
|
SharedInformerFactory: kubeInformers,
|
||||||
|
},
|
||||||
|
ExtraConfig: apiextensionsapiserver.ExtraConfig{
|
||||||
|
CRDRESTOptionsGetter: apiextensionsoptions.NewCRDRESTOptionsGetter(etcdOptions, genericConfig.ResourceTransformers, genericConfig.StorageObjectCountTracker),
|
||||||
|
MasterCount: masterCount,
|
||||||
|
AuthResolverWrapper: authResolverWrapper,
|
||||||
|
ServiceResolver: serviceResolver,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// we need to clear the poststarthooks so we don't add them multiple times to all the servers (that fails)
|
||||||
|
apiextensionsConfig.GenericConfig.PostStartHooks = map[string]server.PostStartHookConfigEntry{}
|
||||||
|
|
||||||
|
return apiextensionsConfig, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user