Replace godep with dep
This commit is contained in:
parent
1e7489927c
commit
bf5616c65b
14883 changed files with 3937406 additions and 361781 deletions
42
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/BUILD
generated
vendored
Normal file
42
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_binary",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "federation-apiserver",
|
||||
library = ":go_default_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["apiserver.go"],
|
||||
deps = [
|
||||
"//federation/cmd/federation-apiserver/app:go_default_library",
|
||||
"//federation/cmd/federation-apiserver/app/options:go_default_library",
|
||||
"//pkg/version/verflag:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//federation/cmd/federation-apiserver/app:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
10
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/OWNERS
generated
vendored
Normal file
10
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/OWNERS
generated
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
approvers:
|
||||
- deads2k
|
||||
- lavalamp
|
||||
- smarterclayton
|
||||
- nikhiljindal
|
||||
reviewers:
|
||||
- lavalamp
|
||||
- smarterclayton
|
||||
- nikhiljindal
|
||||
- deads2k
|
||||
53
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/apiserver.go
generated
vendored
Normal file
53
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/apiserver.go
generated
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
Copyright 2014 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.
|
||||
*/
|
||||
|
||||
// apiserver is the main api server and master for the cluster.
|
||||
// it is responsible for serving the cluster management API.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apiserver/pkg/util/flag"
|
||||
"k8s.io/apiserver/pkg/util/logs"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-apiserver/app"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
|
||||
"k8s.io/kubernetes/pkg/version/verflag"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().UTC().UnixNano())
|
||||
|
||||
s := options.NewServerRunOptions()
|
||||
s.AddFlags(pflag.CommandLine)
|
||||
|
||||
flag.InitFlags()
|
||||
logs.InitLogs()
|
||||
defer logs.FlushLogs()
|
||||
|
||||
verflag.PrintAndExitIfRequested()
|
||||
|
||||
if err := app.Run(s, wait.NeverStop); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
104
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/BUILD
generated
vendored
Normal file
104
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"autoscaling.go",
|
||||
"batch.go",
|
||||
"core.go",
|
||||
"extensions.go",
|
||||
"federation.go",
|
||||
"install.go",
|
||||
"plugins.go",
|
||||
"server.go",
|
||||
],
|
||||
deps = [
|
||||
"//federation/apis/core:go_default_library",
|
||||
"//federation/apis/core/install:go_default_library",
|
||||
"//federation/apis/core/v1:go_default_library",
|
||||
"//federation/apis/federation:go_default_library",
|
||||
"//federation/apis/federation/install:go_default_library",
|
||||
"//federation/apis/federation/v1beta1:go_default_library",
|
||||
"//federation/cmd/federation-apiserver/app/options:go_default_library",
|
||||
"//federation/plugin/pkg/admission/schedulingpolicy:go_default_library",
|
||||
"//federation/registry/cluster/etcd:go_default_library",
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/install:go_default_library",
|
||||
"//pkg/apis/autoscaling:go_default_library",
|
||||
"//pkg/apis/autoscaling/install:go_default_library",
|
||||
"//pkg/apis/batch:go_default_library",
|
||||
"//pkg/apis/batch/install:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/apis/extensions/install:go_default_library",
|
||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
||||
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
|
||||
"//pkg/cloudprovider/providers:go_default_library",
|
||||
"//pkg/generated/openapi:go_default_library",
|
||||
"//pkg/kubeapiserver:go_default_library",
|
||||
"//pkg/kubeapiserver/admission:go_default_library",
|
||||
"//pkg/kubeapiserver/options:go_default_library",
|
||||
"//pkg/kubeapiserver/server:go_default_library",
|
||||
"//pkg/quota/install:go_default_library",
|
||||
"//pkg/registry/autoscaling/horizontalpodautoscaler/storage:go_default_library",
|
||||
"//pkg/registry/batch/job/storage:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/configmap/storage:go_default_library",
|
||||
"//pkg/registry/core/event/storage:go_default_library",
|
||||
"//pkg/registry/core/namespace/storage:go_default_library",
|
||||
"//pkg/registry/core/secret/storage:go_default_library",
|
||||
"//pkg/registry/core/service/storage:go_default_library",
|
||||
"//pkg/registry/extensions/daemonset/storage:go_default_library",
|
||||
"//pkg/registry/extensions/deployment/storage:go_default_library",
|
||||
"//pkg/registry/extensions/ingress/storage:go_default_library",
|
||||
"//pkg/registry/extensions/replicaset/storage:go_default_library",
|
||||
"//pkg/routes:go_default_library",
|
||||
"//pkg/version:go_default_library",
|
||||
"//plugin/pkg/admission/admit:go_default_library",
|
||||
"//plugin/pkg/admission/deny:go_default_library",
|
||||
"//plugin/pkg/admission/gc:go_default_library",
|
||||
"//plugin/pkg/admission/initialization:go_default_library",
|
||||
"//vendor/github.com/go-openapi/spec:go_default_library",
|
||||
"//vendor/github.com/golang/glog:go_default_library",
|
||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
||||
"//vendor/k8s.io/api/autoscaling/v1:go_default_library",
|
||||
"//vendor/k8s.io/api/batch/v1:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server/filters:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server/options:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
|
||||
"//vendor/k8s.io/client-go/informers:go_default_library",
|
||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||
"//vendor/k8s.io/kube-openapi/pkg/common:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//federation/cmd/federation-apiserver/app/options:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
61
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/autoscaling.go
generated
vendored
Normal file
61
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/autoscaling.go
generated
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
autoscalingv1 "k8s.io/api/autoscaling/v1"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
"k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||
_ "k8s.io/kubernetes/pkg/apis/autoscaling/install"
|
||||
hpastorage "k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/storage"
|
||||
)
|
||||
|
||||
func installAutoscalingAPIs(g *genericapiserver.GenericAPIServer, optsGetter generic.RESTOptionsGetter, apiResourceConfigSource storage.APIResourceConfigSource) {
|
||||
hpaStorageFn := func() map[string]rest.Storage {
|
||||
hpaStorage, hpaStatusStorage := hpastorage.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"horizontalpodautoscalers": hpaStorage,
|
||||
"horizontalpodautoscalers/status": hpaStatusStorage,
|
||||
}
|
||||
}
|
||||
resourcesStorageMap := map[string]getResourcesStorageFunc{
|
||||
"horizontalpodautoscalers": hpaStorageFn,
|
||||
}
|
||||
shouldInstallGroup, resources := enabledResources(autoscalingv1.SchemeGroupVersion, resourcesStorageMap, apiResourceConfigSource)
|
||||
if !shouldInstallGroup {
|
||||
return
|
||||
}
|
||||
autoscalingGroupMeta := api.Registry.GroupOrDie(autoscaling.GroupName)
|
||||
apiGroupInfo := genericapiserver.APIGroupInfo{
|
||||
GroupMeta: *autoscalingGroupMeta,
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{
|
||||
"v1": resources,
|
||||
},
|
||||
OptionsExternalVersion: &api.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
||||
Scheme: api.Scheme,
|
||||
ParameterCodec: api.ParameterCodec,
|
||||
NegotiatedSerializer: api.Codecs,
|
||||
}
|
||||
if err := g.InstallAPIGroup(&apiGroupInfo); err != nil {
|
||||
glog.Fatalf("Error in registering group versions: %v", err)
|
||||
}
|
||||
}
|
||||
61
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/batch.go
generated
vendored
Normal file
61
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/batch.go
generated
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
batchv1 "k8s.io/api/batch/v1"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
"k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/batch"
|
||||
_ "k8s.io/kubernetes/pkg/apis/batch/install"
|
||||
jobstorage "k8s.io/kubernetes/pkg/registry/batch/job/storage"
|
||||
)
|
||||
|
||||
func installBatchAPIs(g *genericapiserver.GenericAPIServer, optsGetter generic.RESTOptionsGetter, apiResourceConfigSource storage.APIResourceConfigSource) {
|
||||
jobsStorageFn := func() map[string]rest.Storage {
|
||||
jobStorage := jobstorage.NewStorage(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"jobs": jobStorage.Job,
|
||||
"jobs/status": jobStorage.Status,
|
||||
}
|
||||
}
|
||||
resourcesStorageMap := map[string]getResourcesStorageFunc{
|
||||
"jobs": jobsStorageFn,
|
||||
}
|
||||
shouldInstallGroup, resources := enabledResources(batchv1.SchemeGroupVersion, resourcesStorageMap, apiResourceConfigSource)
|
||||
if !shouldInstallGroup {
|
||||
return
|
||||
}
|
||||
batchGroupMeta := api.Registry.GroupOrDie(batch.GroupName)
|
||||
apiGroupInfo := genericapiserver.APIGroupInfo{
|
||||
GroupMeta: *batchGroupMeta,
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{
|
||||
"v1": resources,
|
||||
},
|
||||
OptionsExternalVersion: &api.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
||||
Scheme: api.Scheme,
|
||||
ParameterCodec: api.ParameterCodec,
|
||||
NegotiatedSerializer: api.Codecs,
|
||||
}
|
||||
if err := g.InstallAPIGroup(&apiGroupInfo); err != nil {
|
||||
glog.Fatalf("Error in registering group versions: %v", err)
|
||||
}
|
||||
}
|
||||
104
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/core.go
generated
vendored
Normal file
104
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/core.go
generated
vendored
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
|
||||
// HACK to ensure that rest mapper from pkg/api is registered for groupName="".
|
||||
// This is required because both pkg/api/install and federation/apis/core/install
|
||||
// are installing their respective groupMeta at the same groupName.
|
||||
// federation/apis/core/install has only a subset of resources and hence if it gets registered first, then installation of v1 API fails in pkg/master.
|
||||
// TODO(nikhiljindal): Fix this by ensuring that pkg/api/install and federation/apis/core/install do not conflict with each other.
|
||||
_ "k8s.io/kubernetes/pkg/api/install"
|
||||
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
"k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/kubernetes/federation/apis/core"
|
||||
_ "k8s.io/kubernetes/federation/apis/core/install"
|
||||
corev1 "k8s.io/kubernetes/federation/apis/core/v1"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
configmapstore "k8s.io/kubernetes/pkg/registry/core/configmap/storage"
|
||||
eventstore "k8s.io/kubernetes/pkg/registry/core/event/storage"
|
||||
namespacestore "k8s.io/kubernetes/pkg/registry/core/namespace/storage"
|
||||
secretstore "k8s.io/kubernetes/pkg/registry/core/secret/storage"
|
||||
servicestore "k8s.io/kubernetes/pkg/registry/core/service/storage"
|
||||
)
|
||||
|
||||
func installCoreAPIs(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, optsGetter generic.RESTOptionsGetter, apiResourceConfigSource storage.APIResourceConfigSource) {
|
||||
servicesStorageFn := func() map[string]rest.Storage {
|
||||
serviceStore, serviceStatusStore := servicestore.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"services": serviceStore,
|
||||
"services/status": serviceStatusStore,
|
||||
}
|
||||
}
|
||||
namespacesStorageFn := func() map[string]rest.Storage {
|
||||
namespaceStore, namespaceStatusStore, namespaceFinalizeStore := namespacestore.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"namespaces": namespaceStore,
|
||||
"namespaces/status": namespaceStatusStore,
|
||||
"namespaces/finalize": namespaceFinalizeStore,
|
||||
}
|
||||
}
|
||||
secretsStorageFn := func() map[string]rest.Storage {
|
||||
secretStore := secretstore.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"secrets": secretStore,
|
||||
}
|
||||
}
|
||||
configmapsStorageFn := func() map[string]rest.Storage {
|
||||
configMapStore := configmapstore.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"configmaps": configMapStore,
|
||||
}
|
||||
}
|
||||
eventsStorageFn := func() map[string]rest.Storage {
|
||||
eventStore := eventstore.NewREST(optsGetter, uint64(s.EventTTL.Seconds()))
|
||||
return map[string]rest.Storage{
|
||||
"events": eventStore,
|
||||
}
|
||||
}
|
||||
resourcesStorageMap := map[string]getResourcesStorageFunc{
|
||||
"services": servicesStorageFn,
|
||||
"namespaces": namespacesStorageFn,
|
||||
"secrets": secretsStorageFn,
|
||||
"configmaps": configmapsStorageFn,
|
||||
"events": eventsStorageFn,
|
||||
}
|
||||
shouldInstallGroup, resources := enabledResources(corev1.SchemeGroupVersion, resourcesStorageMap, apiResourceConfigSource)
|
||||
if !shouldInstallGroup {
|
||||
return
|
||||
}
|
||||
coreGroupMeta := api.Registry.GroupOrDie(core.GroupName)
|
||||
apiGroupInfo := genericapiserver.APIGroupInfo{
|
||||
GroupMeta: *coreGroupMeta,
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{
|
||||
corev1.SchemeGroupVersion.Version: resources,
|
||||
},
|
||||
OptionsExternalVersion: &api.Registry.GroupOrDie(core.GroupName).GroupVersion,
|
||||
Scheme: core.Scheme,
|
||||
ParameterCodec: core.ParameterCodec,
|
||||
NegotiatedSerializer: core.Codecs,
|
||||
}
|
||||
if err := g.InstallLegacyAPIGroup(genericapiserver.DefaultLegacyAPIPrefix, &apiGroupInfo); err != nil {
|
||||
glog.Fatalf("Error in registering group version: %+v.\n Error: %v\n", apiGroupInfo, err)
|
||||
}
|
||||
}
|
||||
91
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/extensions.go
generated
vendored
Normal file
91
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/extensions.go
generated
vendored
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
"k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
_ "k8s.io/kubernetes/pkg/apis/extensions/install"
|
||||
daemonsetstore "k8s.io/kubernetes/pkg/registry/extensions/daemonset/storage"
|
||||
deploymentstore "k8s.io/kubernetes/pkg/registry/extensions/deployment/storage"
|
||||
ingressstore "k8s.io/kubernetes/pkg/registry/extensions/ingress/storage"
|
||||
replicasetstore "k8s.io/kubernetes/pkg/registry/extensions/replicaset/storage"
|
||||
)
|
||||
|
||||
func installExtensionsAPIs(g *genericapiserver.GenericAPIServer, optsGetter generic.RESTOptionsGetter, apiResourceConfigSource storage.APIResourceConfigSource) {
|
||||
replicasetsStorageFn := func() map[string]rest.Storage {
|
||||
replicaSetStorage := replicasetstore.NewStorage(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"replicasets": replicaSetStorage.ReplicaSet,
|
||||
"replicasets/status": replicaSetStorage.Status,
|
||||
"replicasets/scale": replicaSetStorage.Scale,
|
||||
}
|
||||
}
|
||||
deploymentsStorageFn := func() map[string]rest.Storage {
|
||||
deploymentStorage := deploymentstore.NewStorage(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"deployments": deploymentStorage.Deployment,
|
||||
"deployments/status": deploymentStorage.Status,
|
||||
"deployments/scale": deploymentStorage.Scale,
|
||||
"deployments/rollback": deploymentStorage.Rollback,
|
||||
}
|
||||
}
|
||||
ingressesStorageFn := func() map[string]rest.Storage {
|
||||
ingressStorage, ingressStatusStorage := ingressstore.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"ingresses": ingressStorage,
|
||||
"ingresses/status": ingressStatusStorage,
|
||||
}
|
||||
}
|
||||
daemonsetsStorageFn := func() map[string]rest.Storage {
|
||||
daemonSetStorage, daemonSetStatusStorage := daemonsetstore.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"daemonsets": daemonSetStorage,
|
||||
"daemonsets/status": daemonSetStatusStorage,
|
||||
}
|
||||
}
|
||||
resourcesStorageMap := map[string]getResourcesStorageFunc{
|
||||
"replicasets": replicasetsStorageFn,
|
||||
"deployments": deploymentsStorageFn,
|
||||
"ingresses": ingressesStorageFn,
|
||||
"daemonsets": daemonsetsStorageFn,
|
||||
}
|
||||
shouldInstallGroup, resources := enabledResources(extensionsv1beta1.SchemeGroupVersion, resourcesStorageMap, apiResourceConfigSource)
|
||||
if !shouldInstallGroup {
|
||||
return
|
||||
}
|
||||
extensionsGroupMeta := api.Registry.GroupOrDie(extensions.GroupName)
|
||||
apiGroupInfo := genericapiserver.APIGroupInfo{
|
||||
GroupMeta: *extensionsGroupMeta,
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{
|
||||
"v1beta1": resources,
|
||||
},
|
||||
OptionsExternalVersion: &api.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
||||
Scheme: api.Scheme,
|
||||
ParameterCodec: api.ParameterCodec,
|
||||
NegotiatedSerializer: api.Codecs,
|
||||
}
|
||||
if err := g.InstallAPIGroup(&apiGroupInfo); err != nil {
|
||||
glog.Fatalf("Error in registering group versions: %v", err)
|
||||
}
|
||||
}
|
||||
63
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/federation.go
generated
vendored
Normal file
63
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/federation.go
generated
vendored
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
"k8s.io/apiserver/pkg/server/storage"
|
||||
"k8s.io/kubernetes/federation/apis/federation"
|
||||
_ "k8s.io/kubernetes/federation/apis/federation/install"
|
||||
fedv1beta1 "k8s.io/kubernetes/federation/apis/federation/v1beta1"
|
||||
clusteretcd "k8s.io/kubernetes/federation/registry/cluster/etcd"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
)
|
||||
|
||||
func installFederationAPIs(g *genericapiserver.GenericAPIServer, optsGetter generic.RESTOptionsGetter, apiResourceConfigSource storage.APIResourceConfigSource) {
|
||||
groupName := federation.GroupName
|
||||
clustersStorageFn := func() map[string]rest.Storage {
|
||||
clusterStorage, clusterStatusStorage := clusteretcd.NewREST(optsGetter)
|
||||
return map[string]rest.Storage{
|
||||
"clusters": clusterStorage,
|
||||
"clusters/status": clusterStatusStorage,
|
||||
}
|
||||
}
|
||||
resourcesStorageMap := map[string]getResourcesStorageFunc{
|
||||
"clusters": clustersStorageFn,
|
||||
}
|
||||
shouldInstallGroup, resources := enabledResources(fedv1beta1.SchemeGroupVersion, resourcesStorageMap, apiResourceConfigSource)
|
||||
if !shouldInstallGroup {
|
||||
return
|
||||
}
|
||||
federationGroupMeta := api.Registry.GroupOrDie(groupName)
|
||||
apiGroupInfo := genericapiserver.APIGroupInfo{
|
||||
GroupMeta: *federationGroupMeta,
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{
|
||||
"v1beta1": resources,
|
||||
},
|
||||
OptionsExternalVersion: &api.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
||||
Scheme: api.Scheme,
|
||||
ParameterCodec: api.ParameterCodec,
|
||||
NegotiatedSerializer: api.Codecs,
|
||||
}
|
||||
if err := g.InstallAPIGroup(&apiGroupInfo); err != nil {
|
||||
glog.Fatalf("Error in registering group versions: %v", err)
|
||||
}
|
||||
}
|
||||
55
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/install.go
generated
vendored
Normal file
55
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/install.go
generated
vendored
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
"k8s.io/apiserver/pkg/server/storage"
|
||||
)
|
||||
|
||||
// Function to get a map of resources and the corresponding storages.
|
||||
type getResourcesStorageFunc func() map[string]rest.Storage
|
||||
|
||||
// Filters the resources from the given resources storage map to those that are enabled in the given apiResourceConfigSource.
|
||||
// resourcesStorageMap is expected to contain all resources in a group version.
|
||||
// Returns false if none of the resources are enabled and hence the whole group version should be disabled.
|
||||
func enabledResources(groupVersion schema.GroupVersion, resourcesStorageMap map[string]getResourcesStorageFunc, apiResourceConfigSource storage.APIResourceConfigSource) (bool, map[string]rest.Storage) {
|
||||
enabledResources := map[string]rest.Storage{}
|
||||
groupName := groupVersion.Group
|
||||
if !apiResourceConfigSource.AnyResourcesForGroupEnabled(groupName) {
|
||||
glog.V(1).Infof("Skipping disabled API group %q", groupName)
|
||||
return false, enabledResources
|
||||
}
|
||||
for resource, fn := range resourcesStorageMap {
|
||||
if apiResourceConfigSource.ResourceEnabled(groupVersion.WithResource(resource)) {
|
||||
resources := fn()
|
||||
for k, v := range resources {
|
||||
enabledResources[k] = v
|
||||
}
|
||||
} else {
|
||||
glog.V(1).Infof("Skipping disabled resource %s in API group %q", resource, groupName)
|
||||
}
|
||||
}
|
||||
if len(enabledResources) == 0 {
|
||||
glog.V(1).Infof("Skipping API group %q since there is no enabled resource", groupName)
|
||||
return false, enabledResources
|
||||
}
|
||||
return true, enabledResources
|
||||
}
|
||||
35
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options/BUILD
generated
vendored
Normal file
35
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"options.go",
|
||||
"validation.go",
|
||||
],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/features:go_default_library",
|
||||
"//pkg/kubeapiserver/options:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server/options:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
95
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options/options.go
generated
vendored
Normal file
95
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options/options.go
generated
vendored
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
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 options contains flags and options for initializing federation-apiserver.
|
||||
package options
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
genericoptions "k8s.io/apiserver/pkg/server/options"
|
||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
||||
|
||||
// add the kubernetes feature gates
|
||||
_ "k8s.io/kubernetes/pkg/features"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
// Runtime options for the federation-apiserver.
|
||||
type ServerRunOptions struct {
|
||||
GenericServerRunOptions *genericoptions.ServerRunOptions
|
||||
Etcd *genericoptions.EtcdOptions
|
||||
SecureServing *genericoptions.SecureServingOptions
|
||||
InsecureServing *kubeoptions.InsecureServingOptions
|
||||
Audit *genericoptions.AuditOptions
|
||||
Features *genericoptions.FeatureOptions
|
||||
Admission *genericoptions.AdmissionOptions
|
||||
Authentication *kubeoptions.BuiltInAuthenticationOptions
|
||||
Authorization *kubeoptions.BuiltInAuthorizationOptions
|
||||
CloudProvider *kubeoptions.CloudProviderOptions
|
||||
StorageSerialization *kubeoptions.StorageSerializationOptions
|
||||
APIEnablement *kubeoptions.APIEnablementOptions
|
||||
|
||||
EventTTL time.Duration
|
||||
}
|
||||
|
||||
// NewServerRunOptions creates a new ServerRunOptions object with default values.
|
||||
func NewServerRunOptions() *ServerRunOptions {
|
||||
s := ServerRunOptions{
|
||||
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
||||
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil)),
|
||||
SecureServing: kubeoptions.NewSecureServingOptions(),
|
||||
InsecureServing: kubeoptions.NewInsecureServingOptions(),
|
||||
Audit: genericoptions.NewAuditOptions(),
|
||||
Features: genericoptions.NewFeatureOptions(),
|
||||
Admission: genericoptions.NewAdmissionOptions(),
|
||||
Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(),
|
||||
Authorization: kubeoptions.NewBuiltInAuthorizationOptions(),
|
||||
CloudProvider: kubeoptions.NewCloudProviderOptions(),
|
||||
StorageSerialization: kubeoptions.NewStorageSerializationOptions(),
|
||||
APIEnablement: kubeoptions.NewAPIEnablementOptions(),
|
||||
|
||||
EventTTL: 1 * time.Hour,
|
||||
}
|
||||
// Overwrite the default for storage data format.
|
||||
s.Etcd.DefaultStorageMediaType = "application/vnd.kubernetes.protobuf"
|
||||
// Set the default for admission plugins names
|
||||
s.Admission.PluginNames = []string{"AlwaysAdmit"}
|
||||
return &s
|
||||
}
|
||||
|
||||
// AddFlags adds flags for ServerRunOptions fields to be specified via FlagSet.
|
||||
func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet) {
|
||||
// Add the generic flags.
|
||||
s.GenericServerRunOptions.AddUniversalFlags(fs)
|
||||
s.Etcd.AddFlags(fs)
|
||||
s.SecureServing.AddFlags(fs)
|
||||
s.InsecureServing.AddFlags(fs)
|
||||
s.Audit.AddFlags(fs)
|
||||
s.Features.AddFlags(fs)
|
||||
s.Authentication.AddFlags(fs)
|
||||
s.Authorization.AddFlags(fs)
|
||||
s.CloudProvider.AddFlags(fs)
|
||||
s.StorageSerialization.AddFlags(fs)
|
||||
s.APIEnablement.AddFlags(fs)
|
||||
s.Admission.AddFlags(fs)
|
||||
|
||||
fs.DurationVar(&s.EventTTL, "event-ttl", s.EventTTL,
|
||||
"Amount of time to retain events.")
|
||||
}
|
||||
58
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options/validation.go
generated
vendored
Normal file
58
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options/validation.go
generated
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
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 options
|
||||
|
||||
import "fmt"
|
||||
|
||||
func (options *ServerRunOptions) Validate() []error {
|
||||
var errors []error
|
||||
if errs := options.GenericServerRunOptions.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.Etcd.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.SecureServing.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.InsecureServing.Validate("insecure-port"); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.Audit.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.Features.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.Admission.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.Authentication.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.Authorization.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if errs := options.CloudProvider.Validate(); len(errs) > 0 {
|
||||
errors = append(errors, errs...)
|
||||
}
|
||||
if options.EventTTL <= 0 {
|
||||
errors = append(errors, fmt.Errorf("--event-ttl must be greater than 0"))
|
||||
}
|
||||
// TODO: add more checks
|
||||
return errors
|
||||
}
|
||||
42
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/plugins.go
generated
vendored
Normal file
42
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/plugins.go
generated
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
Copyright 2014 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 app
|
||||
|
||||
// This file exists to force the desired plugin implementations to be linked.
|
||||
// This should probably be part of some configuration fed into the build for a
|
||||
// given binary target.
|
||||
import (
|
||||
// Cloud providers
|
||||
_ "k8s.io/kubernetes/pkg/cloudprovider/providers"
|
||||
|
||||
// Admission policies
|
||||
"k8s.io/apiserver/pkg/admission"
|
||||
"k8s.io/kubernetes/federation/plugin/pkg/admission/schedulingpolicy"
|
||||
"k8s.io/kubernetes/plugin/pkg/admission/admit"
|
||||
"k8s.io/kubernetes/plugin/pkg/admission/deny"
|
||||
"k8s.io/kubernetes/plugin/pkg/admission/gc"
|
||||
"k8s.io/kubernetes/plugin/pkg/admission/initialization"
|
||||
)
|
||||
|
||||
// RegisterAllAdmissionPlugins registers all admission plugins
|
||||
func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
|
||||
admit.Register(plugins)
|
||||
deny.Register(plugins)
|
||||
gc.Register(plugins)
|
||||
initialization.Register(plugins)
|
||||
schedulingpolicy.Register(plugins)
|
||||
}
|
||||
486
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/server.go
generated
vendored
Normal file
486
vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/server.go
generated
vendored
Normal file
|
|
@ -0,0 +1,486 @@
|
|||
/*
|
||||
Copyright 2014 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 app does all of the work necessary to create a Kubernetes
|
||||
// APIServer by binding together the API, master and APIServer infrastructure.
|
||||
// It can be configured and called directly or via the hyperkube cache.
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-openapi/spec"
|
||||
"github.com/golang/glog"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
||||
apiv1 "k8s.io/api/core/v1"
|
||||
extensionsapiv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
"k8s.io/apiserver/pkg/server/filters"
|
||||
serveroptions "k8s.io/apiserver/pkg/server/options"
|
||||
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||
clientgoinformers "k8s.io/client-go/informers"
|
||||
clientgoclientset "k8s.io/client-go/kubernetes"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
openapicommon "k8s.io/kube-openapi/pkg/common"
|
||||
federationv1beta1 "k8s.io/kubernetes/federation/apis/federation/v1beta1"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
|
||||
"k8s.io/kubernetes/pkg/generated/openapi"
|
||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
||||
kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
|
||||
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
||||
kubeserver "k8s.io/kubernetes/pkg/kubeapiserver/server"
|
||||
quotainstall "k8s.io/kubernetes/pkg/quota/install"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/routes"
|
||||
"k8s.io/kubernetes/pkg/version"
|
||||
)
|
||||
|
||||
// NewAPIServerCommand creates a *cobra.Command object with default parameters
|
||||
func NewAPIServerCommand() *cobra.Command {
|
||||
s := options.NewServerRunOptions()
|
||||
s.AddFlags(pflag.CommandLine)
|
||||
cmd := &cobra.Command{
|
||||
Use: "federation-apiserver",
|
||||
Long: `The Kubernetes federation API server validates and configures data
|
||||
for the api objects which include pods, services, replicationcontrollers, and
|
||||
others. The API Server services REST operations and provides the frontend to the
|
||||
cluster's shared state through which all other components interact.`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
},
|
||||
}
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run runs the specified APIServer. It only returns if stopCh is closed
|
||||
// or one of the ports cannot be listened on initially.
|
||||
func Run(s *options.ServerRunOptions, stopCh <-chan struct{}) error {
|
||||
err := NonBlockingRun(s, stopCh)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
<-stopCh
|
||||
return nil
|
||||
}
|
||||
|
||||
// NonBlockingRun runs the specified APIServer and configures it to
|
||||
// stop with the given channel.
|
||||
func NonBlockingRun(s *options.ServerRunOptions, stopCh <-chan struct{}) error {
|
||||
// register all admission plugins
|
||||
RegisterAllAdmissionPlugins(s.Admission.Plugins)
|
||||
|
||||
// set defaults
|
||||
if err := s.GenericServerRunOptions.DefaultAdvertiseAddress(s.SecureServing); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := kubeoptions.DefaultAdvertiseAddress(s.GenericServerRunOptions, s.InsecureServing); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.SecureServing.MaybeDefaultWithSelfSignedCerts(s.GenericServerRunOptions.AdvertiseAddress.String(), nil, nil); err != nil {
|
||||
return fmt.Errorf("error creating self-signed certificates: %v", err)
|
||||
}
|
||||
if err := s.CloudProvider.DefaultExternalHost(s.GenericServerRunOptions); err != nil {
|
||||
return fmt.Errorf("error setting the external host value: %v", err)
|
||||
}
|
||||
|
||||
s.Authentication.ApplyAuthorization(s.Authorization)
|
||||
|
||||
// validate options
|
||||
if errs := s.Validate(); len(errs) != 0 {
|
||||
return utilerrors.NewAggregate(errs)
|
||||
}
|
||||
|
||||
genericConfig := genericapiserver.NewConfig(api.Codecs)
|
||||
if err := s.GenericServerRunOptions.ApplyTo(genericConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
insecureServingOptions, err := s.InsecureServing.ApplyTo(genericConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.SecureServing.ApplyTo(genericConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.Authentication.ApplyTo(genericConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.Audit.ApplyTo(genericConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.Features.ApplyTo(genericConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resourceConfig := defaultResourceConfig()
|
||||
|
||||
if s.Etcd.StorageConfig.DeserializationCacheSize == 0 {
|
||||
// When size of cache is not explicitly set, set it to 50000
|
||||
s.Etcd.StorageConfig.DeserializationCacheSize = 50000
|
||||
}
|
||||
storageGroupsToEncodingVersion, err := s.StorageSerialization.StorageGroupsToEncodingVersion()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error generating storage version map: %s", err)
|
||||
}
|
||||
storageFactory, err := kubeapiserver.NewStorageFactory(
|
||||
s.Etcd.StorageConfig, s.Etcd.DefaultStorageMediaType, api.Codecs,
|
||||
serverstorage.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
||||
[]schema.GroupVersionResource{}, resourceConfig, s.APIEnablement.RuntimeConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error in initializing storage factory: %s", err)
|
||||
}
|
||||
|
||||
for _, override := range s.Etcd.EtcdServersOverrides {
|
||||
tokens := strings.Split(override, "#")
|
||||
if len(tokens) != 2 {
|
||||
glog.Errorf("invalid value of etcd server overrides: %s", override)
|
||||
continue
|
||||
}
|
||||
|
||||
apiresource := strings.Split(tokens[0], "/")
|
||||
if len(apiresource) != 2 {
|
||||
glog.Errorf("invalid resource definition: %s", tokens[0])
|
||||
continue
|
||||
}
|
||||
group := apiresource[0]
|
||||
resource := apiresource[1]
|
||||
groupResource := schema.GroupResource{Group: group, Resource: resource}
|
||||
|
||||
servers := strings.Split(tokens[1], ";")
|
||||
storageFactory.SetEtcdLocation(groupResource, servers)
|
||||
}
|
||||
if err := s.Etcd.ApplyWithStorageFactoryTo(storageFactory, genericConfig); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
apiAuthenticator, securityDefinitions, err := s.Authentication.ToAuthenticationConfig().New()
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid Authentication Config: %v", err)
|
||||
}
|
||||
|
||||
client, err := internalclientset.NewForConfig(genericConfig.LoopbackClientConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create clientset: %v", err)
|
||||
}
|
||||
externalClient, err := clientset.NewForConfig(genericConfig.LoopbackClientConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create external clientset: %v", err)
|
||||
}
|
||||
sharedInformers := informers.NewSharedInformerFactory(client, 10*time.Minute)
|
||||
|
||||
clientgoExternalClient, err := clientgoclientset.NewForConfig(genericConfig.LoopbackClientConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create real external clientset: %v", err)
|
||||
}
|
||||
versionedInformers := clientgoinformers.NewSharedInformerFactory(clientgoExternalClient, 10*time.Minute)
|
||||
|
||||
authorizationConfig := s.Authorization.ToAuthorizationConfig(sharedInformers)
|
||||
apiAuthorizer, _, err := authorizationConfig.New()
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid Authorization Config: %v", err)
|
||||
}
|
||||
|
||||
var cloudConfig []byte
|
||||
if s.CloudProvider.CloudConfigFile != "" {
|
||||
cloudConfig, err = ioutil.ReadFile(s.CloudProvider.CloudConfigFile)
|
||||
if err != nil {
|
||||
glog.Fatalf("Error reading from cloud configuration file %s: %#v", s.CloudProvider.CloudConfigFile, err)
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: we do not provide informers to the quota registry because admission level decisions
|
||||
// do not require us to open watches for all items tracked by quota.
|
||||
quotaRegistry := quotainstall.NewRegistry(nil, nil)
|
||||
pluginInitializer := kubeapiserveradmission.NewPluginInitializer(client, externalClient, sharedInformers, apiAuthorizer, cloudConfig, nil, quotaRegistry)
|
||||
|
||||
err = s.Admission.ApplyTo(
|
||||
genericConfig,
|
||||
versionedInformers,
|
||||
pluginInitializer,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to initialize plugins: %v", err)
|
||||
}
|
||||
|
||||
kubeVersion := version.Get()
|
||||
genericConfig.Version = &kubeVersion
|
||||
genericConfig.Authenticator = apiAuthenticator
|
||||
genericConfig.Authorizer = apiAuthorizer
|
||||
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapi.GetOpenAPIDefinitions, api.Scheme)
|
||||
genericConfig.OpenAPIConfig.PostProcessSpec = postProcessOpenAPISpecForBackwardCompatibility
|
||||
genericConfig.OpenAPIConfig.SecurityDefinitions = securityDefinitions
|
||||
genericConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
||||
genericConfig.LongRunningFunc = filters.BasicLongRunningRequestCheck(
|
||||
sets.NewString("watch", "proxy"),
|
||||
sets.NewString("attach", "exec", "proxy", "log", "portforward"),
|
||||
)
|
||||
|
||||
// TODO: Move this to generic api server (Need to move the command line flag).
|
||||
if s.Etcd.EnableWatchCache {
|
||||
glog.V(2).Infof("Initializing cache sizes based on %dMB limit", s.GenericServerRunOptions.TargetRAMMB)
|
||||
sizes := cachesize.NewHeuristicWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB)
|
||||
if userSpecified, err := serveroptions.ParseWatchCacheSizes(s.Etcd.WatchCacheSizes); err == nil {
|
||||
for resource, size := range userSpecified {
|
||||
sizes[resource] = size
|
||||
}
|
||||
}
|
||||
s.Etcd.WatchCacheSizes, err = serveroptions.WriteWatchCacheSizes(sizes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
m, err := genericConfig.Complete(versionedInformers).New("federation", genericapiserver.EmptyDelegate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
routes.UIRedirect{}.Install(m.Handler.NonGoRestfulMux)
|
||||
routes.Logs{}.Install(m.Handler.GoRestfulContainer)
|
||||
|
||||
apiResourceConfigSource := storageFactory.APIResourceConfigSource
|
||||
installFederationAPIs(m, genericConfig.RESTOptionsGetter, apiResourceConfigSource)
|
||||
installCoreAPIs(s, m, genericConfig.RESTOptionsGetter, apiResourceConfigSource)
|
||||
installExtensionsAPIs(m, genericConfig.RESTOptionsGetter, apiResourceConfigSource)
|
||||
installBatchAPIs(m, genericConfig.RESTOptionsGetter, apiResourceConfigSource)
|
||||
installAutoscalingAPIs(m, genericConfig.RESTOptionsGetter, apiResourceConfigSource)
|
||||
|
||||
// run the insecure server now
|
||||
if insecureServingOptions != nil {
|
||||
insecureHandlerChain := kubeserver.BuildInsecureHandlerChain(m.UnprotectedHandler(), genericConfig)
|
||||
if err := kubeserver.NonBlockingRun(insecureServingOptions, insecureHandlerChain, stopCh); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
err = m.PrepareRun().NonBlockingRun(stopCh)
|
||||
if err == nil {
|
||||
sharedInformers.Start(stopCh)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func defaultResourceConfig() *serverstorage.ResourceConfig {
|
||||
rc := serverstorage.NewResourceConfig()
|
||||
|
||||
rc.EnableVersions(
|
||||
federationv1beta1.SchemeGroupVersion,
|
||||
)
|
||||
|
||||
// All core resources except these are disabled by default.
|
||||
rc.EnableResources(
|
||||
apiv1.SchemeGroupVersion.WithResource("secrets"),
|
||||
apiv1.SchemeGroupVersion.WithResource("services"),
|
||||
apiv1.SchemeGroupVersion.WithResource("namespaces"),
|
||||
apiv1.SchemeGroupVersion.WithResource("events"),
|
||||
apiv1.SchemeGroupVersion.WithResource("configmaps"),
|
||||
)
|
||||
// All extension resources except these are disabled by default.
|
||||
rc.EnableResources(
|
||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"),
|
||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"),
|
||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"),
|
||||
extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
|
||||
)
|
||||
// All apps resources except these are disabled by default.
|
||||
rc.EnableResources(
|
||||
appsv1beta2.SchemeGroupVersion.WithResource("daemonsets"),
|
||||
appsv1beta2.SchemeGroupVersion.WithResource("deployments"),
|
||||
appsv1beta2.SchemeGroupVersion.WithResource("replicasets"),
|
||||
)
|
||||
return rc
|
||||
}
|
||||
|
||||
// PostProcessSpec adds removed definitions for backward compatibility
|
||||
func postProcessOpenAPISpecForBackwardCompatibility(s *spec.Swagger) (*spec.Swagger, error) {
|
||||
compatibilityMap := map[string]string{
|
||||
"v1beta1.ReplicaSetList": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList",
|
||||
"v1.FlockerVolumeSource": "io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource",
|
||||
"v1.FlexVolumeSource": "io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource",
|
||||
"v1.SecretKeySelector": "io.k8s.kubernetes.pkg.api.v1.SecretKeySelector",
|
||||
"v1.DeleteOptions": "io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions",
|
||||
"v1.ServiceSpec": "io.k8s.kubernetes.pkg.api.v1.ServiceSpec",
|
||||
"v1.NamespaceStatus": "io.k8s.kubernetes.pkg.api.v1.NamespaceStatus",
|
||||
"v1.Affinity": "io.k8s.kubernetes.pkg.api.v1.Affinity",
|
||||
"v1.PodAffinity": "io.k8s.kubernetes.pkg.api.v1.PodAffinity",
|
||||
"v1.EnvVarSource": "io.k8s.kubernetes.pkg.api.v1.EnvVarSource",
|
||||
"v1.ListMeta": "io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta",
|
||||
"v1.ObjectMeta": "io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta",
|
||||
"v1.APIGroupList": "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList",
|
||||
"v1.EnvFromSource": "io.k8s.kubernetes.pkg.api.v1.EnvFromSource",
|
||||
"v1.Service": "io.k8s.kubernetes.pkg.api.v1.Service",
|
||||
"v1.HorizontalPodAutoscaler": "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler",
|
||||
"v1.StatusCause": "io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause",
|
||||
"v1.ObjectFieldSelector": "io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector",
|
||||
"v1.QuobyteVolumeSource": "io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource",
|
||||
"v1beta1.ReplicaSetSpec": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec",
|
||||
"v1.LabelSelector": "io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector",
|
||||
"v1.DownwardAPIVolumeFile": "io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile",
|
||||
"v1.GCEPersistentDiskVolumeSource": "io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource",
|
||||
"v1beta1.ClusterCondition": "io.k8s.kubernetes.federation.apis.federation.v1beta1.ClusterCondition",
|
||||
"v1.JobCondition": "io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition",
|
||||
"v1.LabelSelectorRequirement": "io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement",
|
||||
"v1beta1.Deployment": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment",
|
||||
"v1.LoadBalancerIngress": "io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress",
|
||||
"v1.SecretList": "io.k8s.kubernetes.pkg.api.v1.SecretList",
|
||||
"v1.ServicePort": "io.k8s.kubernetes.pkg.api.v1.ServicePort",
|
||||
"v1.Namespace": "io.k8s.kubernetes.pkg.api.v1.Namespace",
|
||||
"v1beta1.ReplicaSetCondition": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition",
|
||||
"v1.CrossVersionObjectReference": "io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference",
|
||||
"v1.ConfigMapVolumeSource": "io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource",
|
||||
"v1.FCVolumeSource": "io.k8s.kubernetes.pkg.api.v1.FCVolumeSource",
|
||||
"v1.GroupVersionForDiscovery": "io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery",
|
||||
"v1beta1.ClusterStatus": "io.k8s.kubernetes.federation.apis.federation.v1beta1.ClusterStatus",
|
||||
"v1.Job": "io.k8s.kubernetes.pkg.apis.batch.v1.Job",
|
||||
"v1.PersistentVolumeClaimVolumeSource": "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource",
|
||||
"v1.Handler": "io.k8s.kubernetes.pkg.api.v1.Handler",
|
||||
"v1.ServerAddressByClientCIDR": "io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR",
|
||||
"v1.PodAntiAffinity": "io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity",
|
||||
"v1.ISCSIVolumeSource": "io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource",
|
||||
"v1.WeightedPodAffinityTerm": "io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm",
|
||||
"v1.HorizontalPodAutoscalerSpec": "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec",
|
||||
"v1.HorizontalPodAutoscalerList": "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList",
|
||||
"v1.Probe": "io.k8s.kubernetes.pkg.api.v1.Probe",
|
||||
"v1.APIGroup": "io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup",
|
||||
"v1beta1.DeploymentList": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList",
|
||||
"v1.NodeAffinity": "io.k8s.kubernetes.pkg.api.v1.NodeAffinity",
|
||||
"v1.SecretEnvSource": "io.k8s.kubernetes.pkg.api.v1.SecretEnvSource",
|
||||
"v1beta1.DeploymentStatus": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus",
|
||||
"v1.CinderVolumeSource": "io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource",
|
||||
"v1.NodeSelectorTerm": "io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm",
|
||||
"v1.Patch": "io.k8s.apimachinery.pkg.apis.meta.v1.Patch",
|
||||
"v1.SecretVolumeSource": "io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource",
|
||||
"v1.Secret": "io.k8s.kubernetes.pkg.api.v1.Secret",
|
||||
"v1.NodeSelector": "io.k8s.kubernetes.pkg.api.v1.NodeSelector",
|
||||
"runtime.RawExtension": "io.k8s.apimachinery.pkg.runtime.RawExtension",
|
||||
"v1.PreferredSchedulingTerm": "io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm",
|
||||
"v1beta1.ClusterList": "io.k8s.kubernetes.federation.apis.federation.v1beta1.ClusterList",
|
||||
"v1.KeyToPath": "io.k8s.kubernetes.pkg.api.v1.KeyToPath",
|
||||
"intstr.IntOrString": "io.k8s.apimachinery.pkg.util.intstr.IntOrString",
|
||||
"v1beta1.ClusterSpec": "io.k8s.kubernetes.federation.apis.federation.v1beta1.ClusterSpec",
|
||||
"v1.ServiceList": "io.k8s.kubernetes.pkg.api.v1.ServiceList",
|
||||
"v1beta1.DeploymentStrategy": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy",
|
||||
"v1beta1.IngressBackend": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend",
|
||||
"v1.Time": "io.k8s.apimachinery.pkg.apis.meta.v1.Time",
|
||||
"v1.ContainerPort": "io.k8s.kubernetes.pkg.api.v1.ContainerPort",
|
||||
"v1beta1.HTTPIngressRuleValue": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue",
|
||||
"v1.AzureFileVolumeSource": "io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource",
|
||||
"v1.PodTemplateSpec": "io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec",
|
||||
"v1.PodSpec": "io.k8s.kubernetes.pkg.api.v1.PodSpec",
|
||||
"v1beta1.ReplicaSetStatus": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus",
|
||||
"v1.CephFSVolumeSource": "io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource",
|
||||
"v1.Volume": "io.k8s.kubernetes.pkg.api.v1.Volume",
|
||||
"v1beta1.Ingress": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress",
|
||||
"v1.PodAffinityTerm": "io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm",
|
||||
"v1.ObjectReference": "io.k8s.kubernetes.pkg.api.v1.ObjectReference",
|
||||
"v1.ServiceStatus": "io.k8s.kubernetes.pkg.api.v1.ServiceStatus",
|
||||
"v1.APIResource": "io.k8s.apimachinery.pkg.apis.meta.v1.APIResource",
|
||||
"v1.AzureDiskVolumeSource": "io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource",
|
||||
"v1.ConfigMap": "io.k8s.kubernetes.pkg.api.v1.ConfigMap",
|
||||
"v1beta1.IngressSpec": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec",
|
||||
"v1.APIVersions": "io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions",
|
||||
"resource.Quantity": "io.k8s.apimachinery.pkg.api.resource.Quantity",
|
||||
"v1.Event": "io.k8s.kubernetes.pkg.api.v1.Event",
|
||||
"v1.JobStatus": "io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus",
|
||||
"v1beta1.ServerAddressByClientCIDR": "io.k8s.kubernetes.federation.apis.federation.v1beta1.ServerAddressByClientCIDR",
|
||||
"v1.LocalObjectReference": "io.k8s.kubernetes.pkg.api.v1.LocalObjectReference",
|
||||
"v1.HostPathVolumeSource": "io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource",
|
||||
"v1.LoadBalancerStatus": "io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus",
|
||||
"v1beta1.HTTPIngressPath": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath",
|
||||
"v1beta1.DeploymentSpec": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec",
|
||||
"v1.ExecAction": "io.k8s.kubernetes.pkg.api.v1.ExecAction",
|
||||
"v1.HorizontalPodAutoscalerStatus": "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus",
|
||||
"v1.JobSpec": "io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec",
|
||||
"v1beta1.DaemonSetSpec": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec",
|
||||
"v1.SELinuxOptions": "io.k8s.kubernetes.pkg.api.v1.SELinuxOptions",
|
||||
"v1beta1.IngressTLS": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS",
|
||||
"v1beta1.ScaleStatus": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus",
|
||||
"v1.NamespaceSpec": "io.k8s.kubernetes.pkg.api.v1.NamespaceSpec",
|
||||
"v1.StatusDetails": "io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails",
|
||||
"v1beta1.IngressList": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList",
|
||||
"v1beta1.DeploymentRollback": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback",
|
||||
"v1.GlusterfsVolumeSource": "io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource",
|
||||
"v1.JobList": "io.k8s.kubernetes.pkg.apis.batch.v1.JobList",
|
||||
"v1.EventList": "io.k8s.kubernetes.pkg.api.v1.EventList",
|
||||
"v1beta1.IngressRule": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule",
|
||||
"v1.APIResourceList": "io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList",
|
||||
"v1.ConfigMapKeySelector": "io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector",
|
||||
"v1.PhotonPersistentDiskVolumeSource": "io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource",
|
||||
"v1.HTTPHeader": "io.k8s.kubernetes.pkg.api.v1.HTTPHeader",
|
||||
"version.Info": "io.k8s.apimachinery.pkg.version.Info",
|
||||
"v1.EventSource": "io.k8s.kubernetes.pkg.api.v1.EventSource",
|
||||
"v1.OwnerReference": "io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference",
|
||||
"v1beta1.ScaleSpec": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec",
|
||||
"v1.GitRepoVolumeSource": "io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource",
|
||||
"v1.ConfigMapEnvSource": "io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource",
|
||||
"v1beta1.DeploymentCondition": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition",
|
||||
"v1.EnvVar": "io.k8s.kubernetes.pkg.api.v1.EnvVar",
|
||||
"v1.DownwardAPIVolumeSource": "io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource",
|
||||
"v1.SecurityContext": "io.k8s.kubernetes.pkg.api.v1.SecurityContext",
|
||||
"v1beta1.IngressStatus": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus",
|
||||
"v1beta1.Cluster": "io.k8s.kubernetes.federation.apis.federation.v1beta1.Cluster",
|
||||
"v1.Capabilities": "io.k8s.kubernetes.pkg.api.v1.Capabilities",
|
||||
"v1.AWSElasticBlockStoreVolumeSource": "io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource",
|
||||
"v1beta1.ReplicaSet": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet",
|
||||
"v1.ConfigMapList": "io.k8s.kubernetes.pkg.api.v1.ConfigMapList",
|
||||
"v1.Lifecycle": "io.k8s.kubernetes.pkg.api.v1.Lifecycle",
|
||||
"v1beta1.Scale": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale",
|
||||
"v1beta1.DaemonSet": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet",
|
||||
"v1beta1.RollingUpdateDeployment": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment",
|
||||
"v1beta1.DaemonSetStatus": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus",
|
||||
"v1.Preconditions": "io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions",
|
||||
"v1beta1.DaemonSetList": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList",
|
||||
"v1.RBDVolumeSource": "io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource",
|
||||
"v1.NFSVolumeSource": "io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource",
|
||||
"v1.NodeSelectorRequirement": "io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement",
|
||||
"v1.ResourceRequirements": "io.k8s.kubernetes.pkg.api.v1.ResourceRequirements",
|
||||
"v1.WatchEvent": "io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent",
|
||||
"v1.HTTPGetAction": "io.k8s.kubernetes.pkg.api.v1.HTTPGetAction",
|
||||
"v1beta1.RollbackConfig": "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig",
|
||||
"v1.PodSecurityContext": "io.k8s.kubernetes.pkg.api.v1.PodSecurityContext",
|
||||
"v1.VolumeMount": "io.k8s.kubernetes.pkg.api.v1.VolumeMount",
|
||||
"v1.NamespaceList": "io.k8s.kubernetes.pkg.api.v1.NamespaceList",
|
||||
"v1.TCPSocketAction": "io.k8s.kubernetes.pkg.api.v1.TCPSocketAction",
|
||||
"v1.ResourceFieldSelector": "io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector",
|
||||
"v1.Container": "io.k8s.kubernetes.pkg.api.v1.Container",
|
||||
"v1.VsphereVirtualDiskVolumeSource": "io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource",
|
||||
"v1.EmptyDirVolumeSource": "io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource",
|
||||
"v1.Status": "io.k8s.apimachinery.pkg.apis.meta.v1.Status",
|
||||
}
|
||||
|
||||
for k, v := range compatibilityMap {
|
||||
if _, found := s.Definitions[v]; !found {
|
||||
continue
|
||||
}
|
||||
s.Definitions[k] = spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Ref: spec.MustCreateRef("#/definitions/" + openapicommon.EscapeJsonPointer(v)),
|
||||
Description: fmt.Sprintf("Deprecated. Please use %s instead.", v),
|
||||
},
|
||||
}
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
44
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/BUILD
generated
vendored
Normal file
44
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_binary",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "federation-controller-manager",
|
||||
library = ":go_default_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["controller-manager.go"],
|
||||
deps = [
|
||||
"//federation/cmd/federation-controller-manager/app:go_default_library",
|
||||
"//federation/cmd/federation-controller-manager/app/options:go_default_library",
|
||||
"//pkg/util/reflector/prometheus:go_default_library",
|
||||
"//pkg/util/workqueue/prometheus:go_default_library",
|
||||
"//pkg/version/verflag:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//federation/cmd/federation-controller-manager/app:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
8
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/OWNERS
generated
vendored
Normal file
8
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/OWNERS
generated
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
approvers:
|
||||
- quinton-hoole
|
||||
- nikhiljindal
|
||||
- madhusudancs
|
||||
reviewers:
|
||||
- quinton-hoole
|
||||
- nikhiljindal
|
||||
- madhusudancs
|
||||
80
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/BUILD
generated
vendored
Normal file
80
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
"go_test",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"controllermanager.go",
|
||||
"plugins.go",
|
||||
],
|
||||
deps = [
|
||||
"//federation/apis/federation/v1beta1:go_default_library",
|
||||
"//federation/client/clientset_generated/federation_clientset:go_default_library",
|
||||
"//federation/cmd/federation-controller-manager/app/options:go_default_library",
|
||||
"//federation/pkg/dnsprovider/providers/aws/route53:go_default_library",
|
||||
"//federation/pkg/dnsprovider/providers/coredns:go_default_library",
|
||||
"//federation/pkg/dnsprovider/providers/google/clouddns:go_default_library",
|
||||
"//federation/pkg/federatedtypes:go_default_library",
|
||||
"//federation/pkg/federation-controller/cluster:go_default_library",
|
||||
"//federation/pkg/federation-controller/ingress:go_default_library",
|
||||
"//federation/pkg/federation-controller/job:go_default_library",
|
||||
"//federation/pkg/federation-controller/service:go_default_library",
|
||||
"//federation/pkg/federation-controller/service/dns:go_default_library",
|
||||
"//federation/pkg/federation-controller/sync:go_default_library",
|
||||
"//federation/pkg/federation-controller/util/eventsink:go_default_library",
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/util/configz:go_default_library",
|
||||
"//pkg/version:go_default_library",
|
||||
"//vendor/github.com/golang/glog:go_default_library",
|
||||
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
|
||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||
"//vendor/k8s.io/client-go/discovery:go_default_library",
|
||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||
"//vendor/k8s.io/client-go/rest:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/leaderelection:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/record:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["controllermanager_test.go"],
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//federation/pkg/federation-controller/ingress:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//federation/cmd/federation-controller-manager/app/options:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
318
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/controllermanager.go
generated
vendored
Normal file
318
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/controllermanager.go
generated
vendored
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
/*
|
||||
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 app implements a server that runs a set of active
|
||||
// components. This includes cluster controller
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/pprof"
|
||||
"os"
|
||||
goruntime "runtime"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apiserver/pkg/server/healthz"
|
||||
utilflag "k8s.io/apiserver/pkg/util/flag"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
"k8s.io/client-go/tools/leaderelection"
|
||||
"k8s.io/client-go/tools/leaderelection/resourcelock"
|
||||
"k8s.io/client-go/tools/record"
|
||||
federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1"
|
||||
federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options"
|
||||
"k8s.io/kubernetes/federation/pkg/federatedtypes"
|
||||
clustercontroller "k8s.io/kubernetes/federation/pkg/federation-controller/cluster"
|
||||
ingresscontroller "k8s.io/kubernetes/federation/pkg/federation-controller/ingress"
|
||||
jobcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/job"
|
||||
servicecontroller "k8s.io/kubernetes/federation/pkg/federation-controller/service"
|
||||
servicednscontroller "k8s.io/kubernetes/federation/pkg/federation-controller/service/dns"
|
||||
synccontroller "k8s.io/kubernetes/federation/pkg/federation-controller/sync"
|
||||
"k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/util/configz"
|
||||
"k8s.io/kubernetes/pkg/version"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/discovery"
|
||||
)
|
||||
|
||||
const (
|
||||
apiserverWaitTimeout = 2 * time.Minute
|
||||
apiserverRetryInterval = 2 * time.Second
|
||||
)
|
||||
|
||||
// NewControllerManagerCommand creates a *cobra.Command object with default parameters
|
||||
func NewControllerManagerCommand() *cobra.Command {
|
||||
s := options.NewCMServer()
|
||||
s.AddFlags(pflag.CommandLine)
|
||||
cmd := &cobra.Command{
|
||||
Use: "federation-controller-manager",
|
||||
Long: `The federation controller manager is a daemon that embeds
|
||||
the core control loops shipped with federation. In applications of robotics and
|
||||
automation, a control loop is a non-terminating loop that regulates the state of
|
||||
the system. In federation, a controller is a control loop that watches the shared
|
||||
state of the federation cluster through the apiserver and makes changes attempting
|
||||
to move the current state towards the desired state. Examples of controllers that
|
||||
ship with federation today is the cluster controller.`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
},
|
||||
}
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run runs the CMServer. This should never exit.
|
||||
func Run(s *options.CMServer) error {
|
||||
glog.Infof("%+v", version.Get())
|
||||
if c, err := configz.New("componentconfig"); err == nil {
|
||||
c.Set(s.ControllerManagerConfiguration)
|
||||
} else {
|
||||
glog.Errorf("unable to register configz: %s", err)
|
||||
}
|
||||
|
||||
restClientCfg, err := clientcmd.BuildConfigFromFlags(s.Master, s.Kubeconfig)
|
||||
if err != nil || restClientCfg == nil {
|
||||
glog.V(2).Infof("Couldn't build the rest client config from flags: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Override restClientCfg qps/burst settings from flags
|
||||
restClientCfg.QPS = s.APIServerQPS
|
||||
restClientCfg.Burst = s.APIServerBurst
|
||||
|
||||
go func() {
|
||||
mux := http.NewServeMux()
|
||||
healthz.InstallHandler(mux)
|
||||
if s.EnableProfiling {
|
||||
mux.HandleFunc("/debug/pprof/", pprof.Index)
|
||||
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
|
||||
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
|
||||
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
|
||||
if s.EnableContentionProfiling {
|
||||
goruntime.SetBlockProfileRate(1)
|
||||
}
|
||||
}
|
||||
mux.Handle("/metrics", prometheus.Handler())
|
||||
|
||||
server := &http.Server{
|
||||
Addr: net.JoinHostPort(s.Address, strconv.Itoa(s.Port)),
|
||||
Handler: mux,
|
||||
}
|
||||
glog.Fatal(server.ListenAndServe())
|
||||
}()
|
||||
|
||||
federationClientset, err := federationclientset.NewForConfig(restclient.AddUserAgent(restClientCfg, "federation-controller-manager"))
|
||||
if err != nil {
|
||||
glog.Fatalf("Invalid API configuration: %v", err)
|
||||
}
|
||||
|
||||
run := func(stop <-chan struct{}) {
|
||||
err := StartControllers(s, restClientCfg, stop)
|
||||
glog.Fatalf("error running controllers: %v", err)
|
||||
panic("unreachable")
|
||||
}
|
||||
|
||||
if !s.LeaderElection.LeaderElect {
|
||||
run(nil)
|
||||
// unreachable
|
||||
}
|
||||
|
||||
if err := ensureFederationNamespace(federationClientset, s.FederationOnlyNamespace); err != nil {
|
||||
glog.Fatalf("Failed to ensure federation only namespace %s: %v", s.FederationOnlyNamespace, err)
|
||||
}
|
||||
|
||||
leaderElectionClient := kubernetes.NewForConfigOrDie(restclient.AddUserAgent(restClientCfg, "leader-election"))
|
||||
eventBroadcaster := record.NewBroadcaster()
|
||||
eventBroadcaster.StartLogging(glog.Infof)
|
||||
eventBroadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(federationClientset))
|
||||
recorder := eventBroadcaster.NewRecorder(api.Scheme, v1.EventSource{Component: "controller-manager"})
|
||||
|
||||
id, err := os.Hostname()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rl := resourcelock.ConfigMapLock{
|
||||
ConfigMapMeta: metav1.ObjectMeta{
|
||||
Namespace: s.FederationOnlyNamespace,
|
||||
Name: "federation-controller-manager-leader-election",
|
||||
Annotations: map[string]string{
|
||||
federationapi.FederationClusterSelectorAnnotation: federationapi.FederationOnlyClusterSelector,
|
||||
}},
|
||||
Client: leaderElectionClient.CoreV1(),
|
||||
LockConfig: resourcelock.ResourceLockConfig{
|
||||
Identity: id,
|
||||
EventRecorder: recorder,
|
||||
},
|
||||
}
|
||||
|
||||
leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{
|
||||
Lock: &rl,
|
||||
LeaseDuration: s.LeaderElection.LeaseDuration.Duration,
|
||||
RenewDeadline: s.LeaderElection.RenewDeadline.Duration,
|
||||
RetryPeriod: s.LeaderElection.RetryPeriod.Duration,
|
||||
Callbacks: leaderelection.LeaderCallbacks{
|
||||
OnStartedLeading: run,
|
||||
OnStoppedLeading: func() {
|
||||
glog.Fatalf("leaderelection lost")
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
panic("unreachable")
|
||||
}
|
||||
|
||||
func StartControllers(s *options.CMServer, restClientCfg *restclient.Config, stopChan <-chan struct{}) error {
|
||||
minimizeLatency := false
|
||||
|
||||
discoveryClient := discovery.NewDiscoveryClientForConfigOrDie(restClientCfg)
|
||||
serverResources, err := discoveryClient.ServerResources()
|
||||
if err != nil {
|
||||
glog.Fatalf("Could not find resources from API Server: %v", err)
|
||||
}
|
||||
|
||||
clustercontroller.StartClusterController(restClientCfg, stopChan, s.ClusterMonitorPeriod.Duration)
|
||||
|
||||
if controllerEnabled(s.Controllers, serverResources, servicecontroller.ControllerName, servicecontroller.RequiredResources, true) {
|
||||
if controllerEnabled(s.Controllers, serverResources, servicednscontroller.ControllerName, servicecontroller.RequiredResources, true) {
|
||||
serviceDNScontrollerClientset := federationclientset.NewForConfigOrDie(restclient.AddUserAgent(restClientCfg, servicednscontroller.UserAgentName))
|
||||
serviceDNSController, err := servicednscontroller.NewServiceDNSController(serviceDNScontrollerClientset, s.DnsProvider, s.DnsConfigFile, s.FederationName, s.ServiceDnsSuffix, s.ZoneName, s.ZoneID)
|
||||
if err != nil {
|
||||
glog.Fatalf("Failed to start service dns controller: %v", err)
|
||||
} else {
|
||||
go serviceDNSController.DNSControllerRun(s.ConcurrentServiceSyncs, wait.NeverStop)
|
||||
}
|
||||
}
|
||||
|
||||
glog.V(3).Infof("Loading client config for service controller %q", servicecontroller.UserAgentName)
|
||||
scClientset := federationclientset.NewForConfigOrDie(restclient.AddUserAgent(restClientCfg, servicecontroller.UserAgentName))
|
||||
serviceController := servicecontroller.New(scClientset)
|
||||
go serviceController.Run(s.ConcurrentServiceSyncs, stopChan)
|
||||
}
|
||||
|
||||
adapterSpecificArgs := make(map[string]interface{})
|
||||
adapterSpecificArgs[federatedtypes.HpaKind] = &s.HpaScaleForbiddenWindow
|
||||
for kind, federatedType := range federatedtypes.FederatedTypes() {
|
||||
if controllerEnabled(s.Controllers, serverResources, federatedType.ControllerName, federatedType.RequiredResources, true) {
|
||||
synccontroller.StartFederationSyncController(kind, federatedType.AdapterFactory, restClientCfg, stopChan, minimizeLatency, adapterSpecificArgs)
|
||||
}
|
||||
}
|
||||
|
||||
if controllerEnabled(s.Controllers, serverResources, jobcontroller.ControllerName, jobcontroller.RequiredResources, true) {
|
||||
glog.V(3).Infof("Loading client config for job controller %q", jobcontroller.UserAgentName)
|
||||
jobClientset := federationclientset.NewForConfigOrDie(restclient.AddUserAgent(restClientCfg, jobcontroller.UserAgentName))
|
||||
jobController := jobcontroller.NewJobController(jobClientset)
|
||||
glog.V(3).Infof("Running job controller")
|
||||
go jobController.Run(s.ConcurrentJobSyncs, wait.NeverStop)
|
||||
}
|
||||
|
||||
if controllerEnabled(s.Controllers, serverResources, ingresscontroller.ControllerName, ingresscontroller.RequiredResources, true) {
|
||||
glog.V(3).Infof("Loading client config for ingress controller %q", ingresscontroller.UserAgentName)
|
||||
ingClientset := federationclientset.NewForConfigOrDie(restclient.AddUserAgent(restClientCfg, ingresscontroller.UserAgentName))
|
||||
ingressController := ingresscontroller.NewIngressController(ingClientset)
|
||||
glog.V(3).Infof("Running ingress controller")
|
||||
ingressController.Run(stopChan)
|
||||
}
|
||||
|
||||
select {}
|
||||
}
|
||||
|
||||
func controllerEnabled(controllers utilflag.ConfigurationMap, serverResources []*metav1.APIResourceList, controller string, requiredResources []schema.GroupVersionResource, defaultValue bool) bool {
|
||||
controllerConfig, ok := controllers[controller]
|
||||
if ok {
|
||||
if controllerConfig == "false" {
|
||||
glog.Infof("%s controller disabled by config", controller)
|
||||
return false
|
||||
}
|
||||
if controllerConfig == "true" {
|
||||
if !hasRequiredResources(serverResources, requiredResources) {
|
||||
glog.Fatalf("%s controller enabled explicitly but API Server does not have required resources", controller)
|
||||
panic("unreachable")
|
||||
}
|
||||
return true
|
||||
}
|
||||
} else if defaultValue {
|
||||
if !hasRequiredResources(serverResources, requiredResources) {
|
||||
glog.Warningf("%s controller disabled because API Server does not have required resources", controller)
|
||||
return false
|
||||
}
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func hasRequiredResources(serverResources []*metav1.APIResourceList, requiredResources []schema.GroupVersionResource) bool {
|
||||
for _, resource := range requiredResources {
|
||||
found := false
|
||||
for _, serverResource := range serverResources {
|
||||
if serverResource.GroupVersion == resource.GroupVersion().String() {
|
||||
for _, apiResource := range serverResource.APIResources {
|
||||
if apiResource.Name == resource.Resource {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func ensureFederationNamespace(clientset *federationclientset.Clientset, namespace string) error {
|
||||
ns := v1.Namespace{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: namespace,
|
||||
Annotations: map[string]string{
|
||||
federationapi.FederationClusterSelectorAnnotation: federationapi.FederationOnlyClusterSelector,
|
||||
},
|
||||
},
|
||||
}
|
||||
// Probably this is the first operation by controller manager on api server. So retry the operation
|
||||
// until timeout to handle scenario where api server is not yet ready.
|
||||
err := wait.PollImmediate(apiserverRetryInterval, apiserverWaitTimeout, func() (bool, error) {
|
||||
var err error
|
||||
_, err = clientset.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
if !errors.IsNotFound(err) {
|
||||
glog.V(2).Infof("Failed to get namespace %s: %v", namespace, err)
|
||||
return false, nil
|
||||
}
|
||||
_, err := clientset.CoreV1().Namespaces().Create(&ns)
|
||||
if err != nil {
|
||||
glog.V(2).Infof("Failed to create namespace %s: %v", namespace, err)
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
return err
|
||||
}
|
||||
88
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/controllermanager_test.go
generated
vendored
Normal file
88
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/controllermanager_test.go
generated
vendored
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilflag "k8s.io/apiserver/pkg/util/flag"
|
||||
ingresscontroller "k8s.io/kubernetes/federation/pkg/federation-controller/ingress"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestControllerEnabled(t *testing.T) {
|
||||
|
||||
testCases := []struct {
|
||||
controllersConfig utilflag.ConfigurationMap
|
||||
serverResources []*metav1.APIResourceList
|
||||
controller string
|
||||
requiredResources []schema.GroupVersionResource
|
||||
defaultValue bool
|
||||
expectedResult bool
|
||||
}{
|
||||
// no override, API server has Ingress enabled
|
||||
{
|
||||
controllersConfig: utilflag.ConfigurationMap{},
|
||||
serverResources: []*metav1.APIResourceList{
|
||||
{
|
||||
GroupVersion: "extensions/v1beta1",
|
||||
APIResources: []metav1.APIResource{
|
||||
{Name: "ingresses", Namespaced: true, Kind: "Ingress"},
|
||||
},
|
||||
},
|
||||
},
|
||||
controller: ingresscontroller.ControllerName,
|
||||
requiredResources: ingresscontroller.RequiredResources,
|
||||
defaultValue: true,
|
||||
expectedResult: true,
|
||||
},
|
||||
// no override, API server has Ingress disabled
|
||||
{
|
||||
controllersConfig: utilflag.ConfigurationMap{},
|
||||
serverResources: []*metav1.APIResourceList{},
|
||||
controller: ingresscontroller.ControllerName,
|
||||
requiredResources: ingresscontroller.RequiredResources,
|
||||
defaultValue: true,
|
||||
expectedResult: false,
|
||||
},
|
||||
// API server has Ingress enabled, override config to disable Ingress controller
|
||||
{
|
||||
controllersConfig: utilflag.ConfigurationMap{
|
||||
ingresscontroller.ControllerName: "false",
|
||||
},
|
||||
serverResources: []*metav1.APIResourceList{
|
||||
{
|
||||
GroupVersion: "extensions/v1beta1",
|
||||
APIResources: []metav1.APIResource{
|
||||
{Name: "ingresses", Namespaced: true, Kind: "Ingress"},
|
||||
},
|
||||
},
|
||||
},
|
||||
controller: ingresscontroller.ControllerName,
|
||||
requiredResources: ingresscontroller.RequiredResources,
|
||||
defaultValue: true,
|
||||
expectedResult: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range testCases {
|
||||
actualEnabled := controllerEnabled(test.controllersConfig, test.serverResources, test.controller, test.requiredResources, test.defaultValue)
|
||||
if actualEnabled != test.expectedResult {
|
||||
t.Errorf("%s controller: expected %v, got %v", test.controller, test.expectedResult, actualEnabled)
|
||||
}
|
||||
}
|
||||
}
|
||||
32
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options/BUILD
generated
vendored
Normal file
32
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["options.go"],
|
||||
deps = [
|
||||
"//federation/pkg/dnsprovider:go_default_library",
|
||||
"//pkg/apis/componentconfig:go_default_library",
|
||||
"//pkg/client/leaderelectionconfig:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
152
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options/options.go
generated
vendored
Normal file
152
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options/options.go
generated
vendored
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
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 options provides the flags used for the controller manager.
|
||||
|
||||
package options
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
utilflag "k8s.io/apiserver/pkg/util/flag"
|
||||
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
||||
"k8s.io/kubernetes/pkg/client/leaderelectionconfig"
|
||||
)
|
||||
|
||||
type ControllerManagerConfiguration struct {
|
||||
// port is the port that the controller-manager's http service runs on.
|
||||
Port int `json:"port"`
|
||||
// address is the IP address to serve on (set to 0.0.0.0 for all interfaces).
|
||||
Address string `json:"address"`
|
||||
// federation name.
|
||||
FederationName string `json:"federationName"`
|
||||
// zone name, like example.com.
|
||||
ZoneName string `json:"zoneName"`
|
||||
// zone ID, for use when zoneName is ambiguous.
|
||||
ZoneID string `json:"zoneID"`
|
||||
// ServiceDnsSuffix is the dns suffix to use when publishing federated services.
|
||||
ServiceDnsSuffix string `json:"serviceDnsSuffix"`
|
||||
// dnsProvider is the provider for dns services.
|
||||
DnsProvider string `json:"dnsProvider"`
|
||||
// dnsConfigFile is the path to the dns provider configuration file.
|
||||
DnsConfigFile string `json:"dnsConfigFile"`
|
||||
// concurrentServiceSyncs is the number of services that are
|
||||
// allowed to sync concurrently. Larger number = more responsive service
|
||||
// management, but more CPU (and network) load.
|
||||
ConcurrentServiceSyncs int `json:"concurrentServiceSyncs"`
|
||||
// concurrentReplicaSetSyncs is the number of ReplicaSets that are
|
||||
// allowed to sync concurrently. Larger number = more responsive service
|
||||
// management, but more CPU (and network) load.
|
||||
ConcurrentReplicaSetSyncs int `json:"concurrentReplicaSetSyncs"`
|
||||
// concurrentJobSyncs is the number of Jobs that are
|
||||
// allowed to sync concurrently. Larger number = more responsive service
|
||||
// management, but more CPU (and network) load.
|
||||
ConcurrentJobSyncs int `json:"concurrentJobSyncs"`
|
||||
// clusterMonitorPeriod is the period for syncing ClusterStatus in cluster controller.
|
||||
ClusterMonitorPeriod metav1.Duration `json:"clusterMonitorPeriod"`
|
||||
// APIServerQPS is the QPS to use while talking with federation apiserver.
|
||||
APIServerQPS float32 `json:"federatedAPIQPS"`
|
||||
// APIServerBurst is the burst to use while talking with federation apiserver.
|
||||
APIServerBurst int `json:"federatedAPIBurst"`
|
||||
// enableProfiling enables profiling via web interface host:port/debug/pprof/
|
||||
EnableProfiling bool `json:"enableProfiling"`
|
||||
// enableContentionProfiling enables lock contention profiling, if enableProfiling is true.
|
||||
EnableContentionProfiling bool `json:"enableContentionProfiling"`
|
||||
// leaderElection defines the configuration of leader election client.
|
||||
LeaderElection componentconfig.LeaderElectionConfiguration `json:"leaderElection"`
|
||||
// contentType is contentType of requests sent to apiserver.
|
||||
ContentType string `json:"contentType"`
|
||||
// ConfigurationMap determining which controllers should be enabled or disabled
|
||||
Controllers utilflag.ConfigurationMap `json:"controllers"`
|
||||
// HpaScaleForbiddenWindow is the duration used by federation hpa controller to
|
||||
// determine if it can move max and/or min replicas around (or not), of a cluster local
|
||||
// hpa object, by comparing current time with the last scaled time of that cluster local hpa.
|
||||
// Lower value will result in faster response to scalibility conditions achieved
|
||||
// by cluster local hpas on local replicas, but too low a value can result in thrashing.
|
||||
// Higher values will result in slower response to scalibility conditions on local replicas.
|
||||
HpaScaleForbiddenWindow metav1.Duration `json:"HpaScaleForbiddenWindow"`
|
||||
// pre-configured namespace name that would be created only in federation control plane
|
||||
FederationOnlyNamespace string `json:"federationOnlyNamespaceName"`
|
||||
}
|
||||
|
||||
// CMServer is the main context object for the controller manager.
|
||||
type CMServer struct {
|
||||
ControllerManagerConfiguration
|
||||
Master string
|
||||
Kubeconfig string
|
||||
}
|
||||
|
||||
const (
|
||||
// FederatedControllerManagerPort is the default port for the federation controller manager status server.
|
||||
// May be overridden by a flag at startup.
|
||||
FederatedControllerManagerPort = 10253
|
||||
)
|
||||
|
||||
// NewCMServer creates a new CMServer with a default config.
|
||||
func NewCMServer() *CMServer {
|
||||
s := CMServer{
|
||||
ControllerManagerConfiguration: ControllerManagerConfiguration{
|
||||
Port: FederatedControllerManagerPort,
|
||||
Address: "0.0.0.0",
|
||||
ConcurrentServiceSyncs: 10,
|
||||
ConcurrentReplicaSetSyncs: 10,
|
||||
ClusterMonitorPeriod: metav1.Duration{Duration: 40 * time.Second},
|
||||
ConcurrentJobSyncs: 10,
|
||||
APIServerQPS: 20.0,
|
||||
APIServerBurst: 30,
|
||||
LeaderElection: leaderelectionconfig.DefaultLeaderElectionConfiguration(),
|
||||
Controllers: make(utilflag.ConfigurationMap),
|
||||
HpaScaleForbiddenWindow: metav1.Duration{Duration: 2 * time.Minute},
|
||||
FederationOnlyNamespace: "federation-only",
|
||||
},
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
// AddFlags adds flags for a specific CMServer to the specified FlagSet
|
||||
func (s *CMServer) AddFlags(fs *pflag.FlagSet) {
|
||||
fs.IntVar(&s.Port, "port", s.Port, "The port that the controller-manager's http service runs on")
|
||||
fs.Var(componentconfig.IPVar{Val: &s.Address}, "address", "The IP address to serve on (set to 0.0.0.0 for all interfaces)")
|
||||
fs.StringVar(&s.FederationName, "federation-name", s.FederationName, "Federation name.")
|
||||
fs.StringVar(&s.ZoneName, "zone-name", s.ZoneName, "Zone name, like example.com.")
|
||||
fs.StringVar(&s.ZoneID, "zone-id", s.ZoneID, "Zone ID, needed if the zone name is not unique.")
|
||||
fs.StringVar(&s.ServiceDnsSuffix, "service-dns-suffix", s.ServiceDnsSuffix, "DNS Suffix to use when publishing federated service names. Defaults to zone-name")
|
||||
fs.IntVar(&s.ConcurrentServiceSyncs, "concurrent-service-syncs", s.ConcurrentServiceSyncs, "The number of service syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load")
|
||||
fs.IntVar(&s.ConcurrentReplicaSetSyncs, "concurrent-replicaset-syncs", s.ConcurrentReplicaSetSyncs, "The number of ReplicaSets syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load")
|
||||
fs.IntVar(&s.ConcurrentJobSyncs, "concurrent-job-syncs", s.ConcurrentJobSyncs, "The number of Jobs syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load")
|
||||
fs.DurationVar(&s.ClusterMonitorPeriod.Duration, "cluster-monitor-period", s.ClusterMonitorPeriod.Duration, "The period for syncing ClusterStatus in ClusterController.")
|
||||
fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/")
|
||||
fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", false, "Enable lock contention profiling, if profiling is enabled")
|
||||
fs.StringVar(&s.Master, "master", s.Master, "The address of the federation API server (overrides any value in kubeconfig)")
|
||||
fs.StringVar(&s.Kubeconfig, "kubeconfig", s.Kubeconfig, "Path to kubeconfig file with authorization and master location information.")
|
||||
fs.StringVar(&s.ContentType, "kube-api-content-type", s.ContentType, "ContentType of requests sent to apiserver. Passing application/vnd.kubernetes.protobuf is an experimental feature now.")
|
||||
fs.Float32Var(&s.APIServerQPS, "federated-api-qps", s.APIServerQPS, "QPS to use while talking with federation apiserver")
|
||||
fs.IntVar(&s.APIServerBurst, "federated-api-burst", s.APIServerBurst, "Burst to use while talking with federation apiserver")
|
||||
fs.StringVar(&s.DnsProvider, "dns-provider", s.DnsProvider, "DNS provider. Valid values are: "+fmt.Sprintf("%q", dnsprovider.RegisteredDnsProviders()))
|
||||
fs.StringVar(&s.DnsConfigFile, "dns-provider-config", s.DnsConfigFile, "Path to config file for configuring DNS provider.")
|
||||
fs.DurationVar(&s.HpaScaleForbiddenWindow.Duration, "hpa-scale-forbidden-window", s.HpaScaleForbiddenWindow.Duration, "The time window wrt cluster local hpa lastscale time, during which federated hpa would not move the hpa max/min replicas around")
|
||||
fs.Var(&s.Controllers, "controllers", ""+
|
||||
"A set of key=value pairs that describe controller configuration "+
|
||||
"to enable/disable specific controllers. Key should be the resource name (like services) and value should be true or false. "+
|
||||
"For example: services=false,ingresses=false")
|
||||
fs.StringVar(&s.FederationOnlyNamespace, "federation-only-namespace", s.FederationOnlyNamespace, "Name of the namespace that would be created only in federation control plane.")
|
||||
leaderelectionconfig.BindFlags(&s.LeaderElection, fs)
|
||||
}
|
||||
27
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/plugins.go
generated
vendored
Normal file
27
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/plugins.go
generated
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
// This file exists to force the desired plugin implementations to be linked.
|
||||
// This should probably be part of some configuration fed into the build for a
|
||||
// given binary target.
|
||||
import (
|
||||
// DNS providers
|
||||
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53"
|
||||
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/coredns"
|
||||
_ "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns"
|
||||
)
|
||||
52
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/controller-manager.go
generated
vendored
Normal file
52
vendor/k8s.io/kubernetes/federation/cmd/federation-controller-manager/controller-manager.go
generated
vendored
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
Copyright 2014 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 main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
"k8s.io/apiserver/pkg/server/healthz"
|
||||
"k8s.io/apiserver/pkg/util/flag"
|
||||
"k8s.io/apiserver/pkg/util/logs"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-controller-manager/app"
|
||||
"k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options"
|
||||
_ "k8s.io/kubernetes/pkg/util/reflector/prometheus" // for reflector metric registration
|
||||
_ "k8s.io/kubernetes/pkg/util/workqueue/prometheus" // for workqueue metric registration
|
||||
"k8s.io/kubernetes/pkg/version/verflag"
|
||||
)
|
||||
|
||||
func init() {
|
||||
healthz.DefaultHealthz()
|
||||
}
|
||||
|
||||
func main() {
|
||||
s := options.NewCMServer()
|
||||
s.AddFlags(pflag.CommandLine)
|
||||
|
||||
flag.InitFlags()
|
||||
logs.InitLogs()
|
||||
defer logs.FlushLogs()
|
||||
|
||||
verflag.PrintAndExitIfRequested()
|
||||
|
||||
if err := app.Run(s); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
39
vendor/k8s.io/kubernetes/federation/cmd/genfeddocs/BUILD
generated
vendored
Normal file
39
vendor/k8s.io/kubernetes/federation/cmd/genfeddocs/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_binary",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "genfeddocs",
|
||||
library = ":go_default_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["gen_fed_docs.go"],
|
||||
deps = [
|
||||
"//cmd/genutils:go_default_library",
|
||||
"//federation/cmd/federation-apiserver/app:go_default_library",
|
||||
"//federation/cmd/federation-controller-manager/app:go_default_library",
|
||||
"//federation/cmd/kubefed/app:go_default_library",
|
||||
"//federation/pkg/kubefed:go_default_library",
|
||||
"//pkg/kubectl/cmd/util:go_default_library",
|
||||
"//vendor/github.com/spf13/cobra/doc:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
71
vendor/k8s.io/kubernetes/federation/cmd/genfeddocs/gen_fed_docs.go
generated
vendored
Normal file
71
vendor/k8s.io/kubernetes/federation/cmd/genfeddocs/gen_fed_docs.go
generated
vendored
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
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 main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra/doc"
|
||||
"k8s.io/kubernetes/cmd/genutils"
|
||||
fedapiservapp "k8s.io/kubernetes/federation/cmd/federation-apiserver/app"
|
||||
fedcmapp "k8s.io/kubernetes/federation/cmd/federation-controller-manager/app"
|
||||
kubefedapp "k8s.io/kubernetes/federation/cmd/kubefed/app"
|
||||
"k8s.io/kubernetes/federation/pkg/kubefed"
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
)
|
||||
|
||||
// Note: We have a separate binary for generating federation docs and kube docs because of the way api groups are api.Registry.
|
||||
// If we import both kube-apiserver and federation-apiserver in the same binary then api groups from both kube and federation will get registered in both the apiservers
|
||||
// and hence will produce incorrect flag values.
|
||||
// We can potentially merge cmd/kubegendocs and this when we have fixed that problem.
|
||||
func main() {
|
||||
// use os.Args instead of "flags" because "flags" will mess up the man pages!
|
||||
path := ""
|
||||
module := ""
|
||||
if len(os.Args) == 3 {
|
||||
path = os.Args[1]
|
||||
module = os.Args[2]
|
||||
} else {
|
||||
fmt.Fprintf(os.Stderr, "usage: %s [output directory] [module] \n", os.Args[0])
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
outDir, err := genutils.OutDir(path)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "failed to get output directory: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
switch module {
|
||||
case "federation-apiserver":
|
||||
// generate docs for federated-apiserver
|
||||
apiserver := fedapiservapp.NewAPIServerCommand()
|
||||
doc.GenMarkdownTree(apiserver, outDir)
|
||||
case "federation-controller-manager":
|
||||
// generate docs for kube-controller-manager
|
||||
controllermanager := fedcmapp.NewControllerManagerCommand()
|
||||
doc.GenMarkdownTree(controllermanager, outDir)
|
||||
case "kubefed":
|
||||
// generate docs for kubefed
|
||||
kubefed := kubefed.NewKubeFedCommand(cmdutil.NewFactory(nil), os.Stdin, os.Stdout, os.Stderr, kubefedapp.GetDefaultServerImage(), kubefedapp.DefaultEtcdImage)
|
||||
doc.GenMarkdownTree(kubefed, outDir)
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "Module %s is not supported", module)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
34
vendor/k8s.io/kubernetes/federation/cmd/kubefed/BUILD
generated
vendored
Normal file
34
vendor/k8s.io/kubernetes/federation/cmd/kubefed/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_binary",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "kubefed",
|
||||
library = ":go_default_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["kubefed.go"],
|
||||
deps = ["//federation/cmd/kubefed/app:go_default_library"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//federation/cmd/kubefed/app:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
32
vendor/k8s.io/kubernetes/federation/cmd/kubefed/app/BUILD
generated
vendored
Normal file
32
vendor/k8s.io/kubernetes/federation/cmd/kubefed/app/BUILD
generated
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["kubefed.go"],
|
||||
deps = [
|
||||
"//federation/pkg/kubefed:go_default_library",
|
||||
"//pkg/client/metrics/prometheus:go_default_library",
|
||||
"//pkg/kubectl/cmd/util:go_default_library",
|
||||
"//pkg/kubectl/util/logs:go_default_library",
|
||||
"//pkg/version:go_default_library",
|
||||
"//pkg/version/prometheus:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
46
vendor/k8s.io/kubernetes/federation/cmd/kubefed/app/kubefed.go
generated
vendored
Normal file
46
vendor/k8s.io/kubernetes/federation/cmd/kubefed/app/kubefed.go
generated
vendored
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
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 app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"k8s.io/kubernetes/federation/pkg/kubefed"
|
||||
_ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
"k8s.io/kubernetes/pkg/kubectl/util/logs"
|
||||
"k8s.io/kubernetes/pkg/version"
|
||||
_ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration
|
||||
)
|
||||
|
||||
const (
|
||||
hyperkubeImageName = "gcr.io/google_containers/hyperkube-amd64"
|
||||
DefaultEtcdImage = "gcr.io/google_containers/etcd:3.0.17"
|
||||
)
|
||||
|
||||
func GetDefaultServerImage() string {
|
||||
return fmt.Sprintf("%s:%s", hyperkubeImageName, version.Get())
|
||||
}
|
||||
|
||||
func Run() error {
|
||||
logs.InitLogs()
|
||||
defer logs.FlushLogs()
|
||||
|
||||
cmd := kubefed.NewKubeFedCommand(cmdutil.NewFactory(nil), os.Stdin, os.Stdout, os.Stderr, GetDefaultServerImage(), DefaultEtcdImage)
|
||||
return cmd.Execute()
|
||||
}
|
||||
30
vendor/k8s.io/kubernetes/federation/cmd/kubefed/kubefed.go
generated
vendored
Normal file
30
vendor/k8s.io/kubernetes/federation/cmd/kubefed/kubefed.go
generated
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
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 main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"k8s.io/kubernetes/federation/cmd/kubefed/app"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if err := app.Run(); err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
os.Exit(0)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue