Skip to content

Commit

Permalink
Promoting EndpointSlices to beta
Browse files Browse the repository at this point in the history
  • Loading branch information
robscott committed Nov 13, 2019
1 parent c466fd9 commit a7e589a
Show file tree
Hide file tree
Showing 116 changed files with 4,294 additions and 203 deletions.
138 changes: 74 additions & 64 deletions api/openapi-spec/swagger.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions build/kazel_generated.bzl
Expand Up @@ -60,6 +60,7 @@ tags_values_pkgs = {"openapi-gen": {
"staging/src/k8s.io/api/coordination/v1beta1",
"staging/src/k8s.io/api/core/v1",
"staging/src/k8s.io/api/discovery/v1alpha1",
"staging/src/k8s.io/api/discovery/v1beta1",
"staging/src/k8s.io/api/events/v1beta1",
"staging/src/k8s.io/api/extensions/v1beta1",
"staging/src/k8s.io/api/flowcontrol/v1alpha1",
Expand Down Expand Up @@ -143,6 +144,7 @@ tags_pkgs_values = {"openapi-gen": {
"true",
],
"staging/src/k8s.io/api/discovery/v1alpha1": ["true"],
"staging/src/k8s.io/api/discovery/v1beta1": ["true"],
"staging/src/k8s.io/api/events/v1beta1": ["true"],
"staging/src/k8s.io/api/extensions/v1beta1": ["true"],
"staging/src/k8s.io/api/flowcontrol/v1alpha1": ["true"],
Expand Down
1 change: 1 addition & 0 deletions cmd/kube-apiserver/app/aggregator.go
Expand Up @@ -285,6 +285,7 @@ var apiVersionPriorities = map[schema.GroupVersion]priority{
{Group: "auditregistration.k8s.io", Version: "v1alpha1"}: {group: 16400, version: 1},
{Group: "node.k8s.io", Version: "v1alpha1"}: {group: 16300, version: 1},
{Group: "node.k8s.io", Version: "v1beta1"}: {group: 16300, version: 9},
{Group: "discovery.k8s.io", Version: "v1beta1"}: {group: 16200, version: 12},
{Group: "discovery.k8s.io", Version: "v1alpha1"}: {group: 16200, version: 9},
// Append a new group to the end of the list if unsure.
// You can use min(existing group)-100 as the initial value for a group.
Expand Down
1 change: 0 additions & 1 deletion cmd/kube-controller-manager/app/BUILD
Expand Up @@ -109,7 +109,6 @@ go_library(
"//pkg/volume/util:go_default_library",
"//pkg/volume/vsphere_volume:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/discovery/v1alpha1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
Expand Down
1 change: 0 additions & 1 deletion cmd/kube-controller-manager/app/controllermanager.go
Expand Up @@ -360,7 +360,6 @@ func KnownControllers() []string {
// ControllersDisabledByDefault is the set of controllers which is disabled by default
var ControllersDisabledByDefault = sets.NewString(
"bootstrapsigner",
"endpointslice",
"tokencleaner",
)

Expand Down
9 changes: 1 addition & 8 deletions cmd/kube-controller-manager/app/discovery.go
Expand Up @@ -23,22 +23,15 @@ package app
import (
"net/http"

discoveryv1alpha1 "k8s.io/api/discovery/v1alpha1"
"k8s.io/klog"
endpointslicecontroller "k8s.io/kubernetes/pkg/controller/endpointslice"
)

func startEndpointSliceController(ctx ControllerContext) (http.Handler, bool, error) {
if !ctx.AvailableResources[discoveryv1alpha1.SchemeGroupVersion.WithResource("endpointslices")] {
klog.Warningf("Not starting endpointslice-controller, discovery.k8s.io/v1alpha1 resources are not available")
return nil, false, nil
}

go endpointslicecontroller.NewController(
ctx.InformerFactory.Core().V1().Pods(),
ctx.InformerFactory.Core().V1().Services(),
ctx.InformerFactory.Core().V1().Nodes(),
ctx.InformerFactory.Discovery().V1alpha1().EndpointSlices(),
ctx.InformerFactory.Discovery().V1beta1().EndpointSlices(),
ctx.ComponentConfig.EndpointSliceController.MaxEndpointsPerSlice,
ctx.ClientBuilder.ClientOrDie("endpointslice-controller"),
).Run(int(ctx.ComponentConfig.EndpointSliceController.ConcurrentServiceEndpointSyncs), ctx.Stop)
Expand Down
2 changes: 1 addition & 1 deletion cmd/kube-proxy/app/server.go
Expand Up @@ -677,7 +677,7 @@ func (s *ProxyServer) Run() error {
go serviceConfig.Run(wait.NeverStop)

if utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice) {
endpointSliceConfig := config.NewEndpointSliceConfig(informerFactory.Discovery().V1alpha1().EndpointSlices(), s.ConfigSyncPeriod)
endpointSliceConfig := config.NewEndpointSliceConfig(informerFactory.Discovery().V1beta1().EndpointSlices(), s.ConfigSyncPeriod)
endpointSliceConfig.RegisterEventHandler(s.Proxier)
go endpointSliceConfig.Run(wait.NeverStop)
} else {
Expand Down
1 change: 1 addition & 0 deletions hack/.golint_failures
Expand Up @@ -31,6 +31,7 @@ pkg/apis/core/v1/helper/qos
pkg/apis/core/v1/validation
pkg/apis/core/validation
pkg/apis/discovery/v1alpha1
pkg/apis/discovery/v1beta1
pkg/apis/events/v1beta1
pkg/apis/extensions
pkg/apis/extensions/v1beta1
Expand Down
1 change: 1 addition & 0 deletions hack/.import-aliases
Expand Up @@ -19,6 +19,7 @@
"k8s.io/api/coordination/v1beta1": "coordinationv1beta1",
"k8s.io/api/core/v1": "v1",
"k8s.io/api/discovery/v1alpha1": "discoveryv1alpha1",
"k8s.io/api/discovery/v1beta1": "discoveryv1beta1",
"k8s.io/api/events/v1beta1": "eventsv1beta1",
"k8s.io/api/extensions/v1beta1": "extensionsv1beta1",
"k8s.io/api/imagepolicy/v1alpha1": "imagepolicyv1alpha1",
Expand Down
1 change: 1 addition & 0 deletions hack/lib/init.sh
Expand Up @@ -85,6 +85,7 @@ certificates.k8s.io/v1beta1 \
coordination.k8s.io/v1beta1 \
coordination.k8s.io/v1 \
discovery.k8s.io/v1alpha1 \
discovery.k8s.io/v1beta1 \
extensions/v1beta1 \
events.k8s.io/v1beta1 \
imagepolicy.k8s.io/v1alpha1 \
Expand Down
2 changes: 2 additions & 0 deletions pkg/api/testing/defaulting_test.go
Expand Up @@ -91,6 +91,8 @@ func TestDefaulting(t *testing.T) {
{Group: "certificates.k8s.io", Version: "v1beta1", Kind: "CertificateSigningRequestList"}: {},
{Group: "discovery.k8s.io", Version: "v1alpha1", Kind: "EndpointSlice"}: {},
{Group: "discovery.k8s.io", Version: "v1alpha1", Kind: "EndpointSliceList"}: {},
{Group: "discovery.k8s.io", Version: "v1beta1", Kind: "EndpointSlice"}: {},
{Group: "discovery.k8s.io", Version: "v1beta1", Kind: "EndpointSliceList"}: {},
{Group: "kubeadm.k8s.io", Version: "v1alpha1", Kind: "MasterConfiguration"}: {},
// This object contains only int fields which currently breaks the defaulting test because
// it's pretty stupid. Once we add non integer fields, we should uncomment this.
Expand Down
1 change: 1 addition & 0 deletions pkg/apis/discovery/BUILD
Expand Up @@ -32,6 +32,7 @@ filegroup(
"//pkg/apis/discovery/fuzzer:all-srcs",
"//pkg/apis/discovery/install:all-srcs",
"//pkg/apis/discovery/v1alpha1:all-srcs",
"//pkg/apis/discovery/v1beta1:all-srcs",
"//pkg/apis/discovery/validation:all-srcs",
],
tags = ["automanaged"],
Expand Down
1 change: 1 addition & 0 deletions pkg/apis/discovery/install/BUILD
Expand Up @@ -9,6 +9,7 @@ go_library(
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/discovery:go_default_library",
"//pkg/apis/discovery/v1alpha1:go_default_library",
"//pkg/apis/discovery/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
],
Expand Down
4 changes: 3 additions & 1 deletion pkg/apis/discovery/install/install.go
Expand Up @@ -24,6 +24,7 @@ import (
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/apis/discovery"
"k8s.io/kubernetes/pkg/apis/discovery/v1alpha1"
"k8s.io/kubernetes/pkg/apis/discovery/v1beta1"
)

func init() {
Expand All @@ -34,5 +35,6 @@ func init() {
func Install(scheme *runtime.Scheme) {
utilruntime.Must(discovery.AddToScheme(scheme))
utilruntime.Must(v1alpha1.AddToScheme(scheme))
utilruntime.Must(scheme.SetVersionPriority(v1alpha1.SchemeGroupVersion))
utilruntime.Must(v1beta1.AddToScheme(scheme))
utilruntime.Must(scheme.SetVersionPriority(v1beta1.SchemeGroupVersion, v1alpha1.SchemeGroupVersion))
}
52 changes: 52 additions & 0 deletions pkg/apis/discovery/v1beta1/BUILD
@@ -0,0 +1,52 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")

go_library(
name = "go_default_library",
srcs = [
"defaults.go",
"doc.go",
"register.go",
"zz_generated.conversion.go",
"zz_generated.defaults.go",
],
importpath = "k8s.io/kubernetes/pkg/apis/discovery/v1beta1",
visibility = ["//visibility:public"],
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/discovery:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/discovery/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
],
)

go_test(
name = "go_default_test",
srcs = ["defaults_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/discovery/install:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/discovery/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//vendor/github.com/google/go-cmp/cmp:go_default_library",
"//vendor/k8s.io/utils/pointer:go_default_library",
],
)

filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)

filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
42 changes: 42 additions & 0 deletions pkg/apis/discovery/v1beta1/defaults.go
@@ -0,0 +1,42 @@
/*
Copyright 2019 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 v1beta1

import (
v1 "k8s.io/api/core/v1"
discoveryv1beta1 "k8s.io/api/discovery/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
)

var (
defaultPortName = ""
defaultProtocol = v1.ProtocolTCP
)

func addDefaultingFuncs(scheme *runtime.Scheme) error {
return RegisterDefaults(scheme)
}

func SetDefaults_EndpointPort(obj *discoveryv1beta1.EndpointPort) {
if obj.Name == nil {
obj.Name = &defaultPortName
}

if obj.Protocol == nil {
obj.Protocol = &defaultProtocol
}
}
77 changes: 77 additions & 0 deletions pkg/apis/discovery/v1beta1/defaults_test.go
@@ -0,0 +1,77 @@
/*
Copyright 2019 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 v1beta1_test

import (
"testing"

"github.com/google/go-cmp/cmp"
v1 "k8s.io/api/core/v1"
discovery "k8s.io/api/discovery/v1beta1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
"k8s.io/kubernetes/pkg/api/legacyscheme"
_ "k8s.io/kubernetes/pkg/apis/discovery/install"
utilpointer "k8s.io/utils/pointer"
)

func TestSetDefaultEndpointPort(t *testing.T) {
emptyStr := ""
fooStr := "foo"
protoTCP := v1.ProtocolTCP
protoUDP := v1.ProtocolUDP

tests := map[string]struct {
original *discovery.EndpointSlice
expected *discovery.EndpointSlice
}{
"should set appropriate defaults": {
original: &discovery.EndpointSlice{Ports: []discovery.EndpointPort{{
Port: utilpointer.Int32Ptr(80),
}}},
expected: &discovery.EndpointSlice{
Ports: []discovery.EndpointPort{{
Name: &emptyStr,
Protocol: &protoTCP,
Port: utilpointer.Int32Ptr(80),
}},
},
},
"should not overwrite values with defaults when set": {
original: &discovery.EndpointSlice{
Ports: []discovery.EndpointPort{{
Name: &fooStr,
Protocol: &protoUDP,
}},
},
expected: &discovery.EndpointSlice{
Ports: []discovery.EndpointPort{{
Name: &fooStr,
Protocol: &protoUDP,
}},
},
},
}

for _, test := range tests {
actual := test.original
expected := test.expected
legacyscheme.Scheme.Default(actual)
if !apiequality.Semantic.DeepEqual(actual, expected) {
t.Error(cmp.Diff(expected, actual))
}
}
}
22 changes: 22 additions & 0 deletions pkg/apis/discovery/v1beta1/doc.go
@@ -0,0 +1,22 @@
/*
Copyright 2019 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.
*/

// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/discovery
// +k8s:conversion-gen-external-types=k8s.io/api/discovery/v1beta1
// +k8s:defaulter-gen=TypeMeta
// +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/discovery/v1beta1

package v1beta1 // import "k8s.io/kubernetes/pkg/apis/discovery/v1beta1"
45 changes: 45 additions & 0 deletions pkg/apis/discovery/v1beta1/register.go
@@ -0,0 +1,45 @@
/*
Copyright 2019 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 v1beta1

import (
discoveryv1beta1 "k8s.io/api/discovery/v1beta1"
"k8s.io/apimachinery/pkg/runtime/schema"
)

// GroupName is the group name used in this package
const GroupName = "discovery.k8s.io"

// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"}

// Resource takes an unqualified resource and returns a Group qualified GroupResource
func Resource(resource string) schema.GroupResource {
return SchemeGroupVersion.WithResource(resource).GroupResource()
}

var (
localSchemeBuilder = &discoveryv1beta1.SchemeBuilder
AddToScheme = localSchemeBuilder.AddToScheme
)

func init() {
// We only register manually written functions here. The registration of the
// generated functions takes place in the generated files. The separation
// makes the code compile even when the generated files are missing.
localSchemeBuilder.Register(addDefaultingFuncs)
}

0 comments on commit a7e589a

Please sign in to comment.