Merge pull request #130844 from danwinship/improved-traffic-distribution

KEP-3015 PreferSameZone/PreferSameNode traffic distribution

Kubernetes-commit: 68ba091fca6927534e187d8b2595882352497f2f
This commit is contained in:
Kubernetes Publisher 2025-03-19 13:00:48 -07:00
commit b0ed7301c5
8 changed files with 139 additions and 3 deletions

View File

@ -22,6 +22,7 @@ package v1
// with apply.
type EndpointHintsApplyConfiguration struct {
ForZones []ForZoneApplyConfiguration `json:"forZones,omitempty"`
ForNodes []ForNodeApplyConfiguration `json:"forNodes,omitempty"`
}
// EndpointHintsApplyConfiguration constructs a declarative configuration of the EndpointHints type for use with
@ -42,3 +43,16 @@ func (b *EndpointHintsApplyConfiguration) WithForZones(values ...*ForZoneApplyCo
}
return b
}
// WithForNodes adds the given value to the ForNodes field in the declarative configuration
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
// If called multiple times, values provided by each call will be appended to the ForNodes field.
func (b *EndpointHintsApplyConfiguration) WithForNodes(values ...*ForNodeApplyConfiguration) *EndpointHintsApplyConfiguration {
for i := range values {
if values[i] == nil {
panic("nil value passed to WithForNodes")
}
b.ForNodes = append(b.ForNodes, *values[i])
}
return b
}

View File

@ -0,0 +1,39 @@
/*
Copyright 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.
*/
// Code generated by applyconfiguration-gen. DO NOT EDIT.
package v1
// ForNodeApplyConfiguration represents a declarative configuration of the ForNode type for use
// with apply.
type ForNodeApplyConfiguration struct {
Name *string `json:"name,omitempty"`
}
// ForNodeApplyConfiguration constructs a declarative configuration of the ForNode type for use with
// apply.
func ForNode() *ForNodeApplyConfiguration {
return &ForNodeApplyConfiguration{}
}
// WithName sets the Name field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Name field is set to the value of the last call.
func (b *ForNodeApplyConfiguration) WithName(value string) *ForNodeApplyConfiguration {
b.Name = &value
return b
}

View File

@ -22,6 +22,7 @@ package v1beta1
// with apply.
type EndpointHintsApplyConfiguration struct {
ForZones []ForZoneApplyConfiguration `json:"forZones,omitempty"`
ForNodes []ForNodeApplyConfiguration `json:"forNodes,omitempty"`
}
// EndpointHintsApplyConfiguration constructs a declarative configuration of the EndpointHints type for use with
@ -42,3 +43,16 @@ func (b *EndpointHintsApplyConfiguration) WithForZones(values ...*ForZoneApplyCo
}
return b
}
// WithForNodes adds the given value to the ForNodes field in the declarative configuration
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
// If called multiple times, values provided by each call will be appended to the ForNodes field.
func (b *EndpointHintsApplyConfiguration) WithForNodes(values ...*ForNodeApplyConfiguration) *EndpointHintsApplyConfiguration {
for i := range values {
if values[i] == nil {
panic("nil value passed to WithForNodes")
}
b.ForNodes = append(b.ForNodes, *values[i])
}
return b
}

View File

@ -0,0 +1,39 @@
/*
Copyright 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.
*/
// Code generated by applyconfiguration-gen. DO NOT EDIT.
package v1beta1
// ForNodeApplyConfiguration represents a declarative configuration of the ForNode type for use
// with apply.
type ForNodeApplyConfiguration struct {
Name *string `json:"name,omitempty"`
}
// ForNodeApplyConfiguration constructs a declarative configuration of the ForNode type for use with
// apply.
func ForNode() *ForNodeApplyConfiguration {
return &ForNodeApplyConfiguration{}
}
// WithName sets the Name field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Name field is set to the value of the last call.
func (b *ForNodeApplyConfiguration) WithName(value string) *ForNodeApplyConfiguration {
b.Name = &value
return b
}

View File

@ -8741,6 +8741,12 @@ var schemaYAML = typed.YAMLObject(`types:
- name: io.k8s.api.discovery.v1.EndpointHints
map:
fields:
- name: forNodes
type:
list:
elementType:
namedType: io.k8s.api.discovery.v1.ForNode
elementRelationship: atomic
- name: forZones
type:
list:
@ -8792,6 +8798,13 @@ var schemaYAML = typed.YAMLObject(`types:
elementType:
namedType: io.k8s.api.discovery.v1.EndpointPort
elementRelationship: atomic
- name: io.k8s.api.discovery.v1.ForNode
map:
fields:
- name: name
type:
scalar: string
default: ""
- name: io.k8s.api.discovery.v1.ForZone
map:
fields:
@ -8844,6 +8857,12 @@ var schemaYAML = typed.YAMLObject(`types:
- name: io.k8s.api.discovery.v1beta1.EndpointHints
map:
fields:
- name: forNodes
type:
list:
elementType:
namedType: io.k8s.api.discovery.v1beta1.ForNode
elementRelationship: atomic
- name: forZones
type:
list:
@ -8894,6 +8913,13 @@ var schemaYAML = typed.YAMLObject(`types:
elementType:
namedType: io.k8s.api.discovery.v1beta1.EndpointPort
elementRelationship: atomic
- name: io.k8s.api.discovery.v1beta1.ForNode
map:
fields:
- name: name
type:
scalar: string
default: ""
- name: io.k8s.api.discovery.v1beta1.ForZone
map:
fields:

View File

@ -1062,6 +1062,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &applyconfigurationsdiscoveryv1.EndpointPortApplyConfiguration{}
case discoveryv1.SchemeGroupVersion.WithKind("EndpointSlice"):
return &applyconfigurationsdiscoveryv1.EndpointSliceApplyConfiguration{}
case discoveryv1.SchemeGroupVersion.WithKind("ForNode"):
return &applyconfigurationsdiscoveryv1.ForNodeApplyConfiguration{}
case discoveryv1.SchemeGroupVersion.WithKind("ForZone"):
return &applyconfigurationsdiscoveryv1.ForZoneApplyConfiguration{}
@ -1076,6 +1078,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &applyconfigurationsdiscoveryv1beta1.EndpointPortApplyConfiguration{}
case discoveryv1beta1.SchemeGroupVersion.WithKind("EndpointSlice"):
return &applyconfigurationsdiscoveryv1beta1.EndpointSliceApplyConfiguration{}
case discoveryv1beta1.SchemeGroupVersion.WithKind("ForNode"):
return &applyconfigurationsdiscoveryv1beta1.ForNodeApplyConfiguration{}
case discoveryv1beta1.SchemeGroupVersion.WithKind("ForZone"):
return &applyconfigurationsdiscoveryv1beta1.ForZoneApplyConfiguration{}

2
go.mod
View File

@ -25,7 +25,7 @@ require (
golang.org/x/time v0.9.0
google.golang.org/protobuf v1.36.5
gopkg.in/evanphx/json-patch.v4 v4.12.0
k8s.io/api v0.0.0-20250319213038-88064fe45fc1
k8s.io/api v0.0.0-20250319213039-6b142a213afd
k8s.io/apimachinery v0.0.0-20250319092800-e8a77bd768fd
k8s.io/klog/v2 v2.130.1
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff

4
go.sum
View File

@ -146,8 +146,8 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/api v0.0.0-20250319213038-88064fe45fc1 h1:UxRrzYpgtXbqwLrgCZnuKutzQM+z75Ag8Xqd0en/IK8=
k8s.io/api v0.0.0-20250319213038-88064fe45fc1/go.mod h1:JO0tyTI0qSXXaGVhLdqwfi3RMbS2g9hcYvzBmZP5wVk=
k8s.io/api v0.0.0-20250319213039-6b142a213afd h1:8c1Va14wUYbWssIqzNjO2/Hi86kD2wOBPbotT2bXbuw=
k8s.io/api v0.0.0-20250319213039-6b142a213afd/go.mod h1:JO0tyTI0qSXXaGVhLdqwfi3RMbS2g9hcYvzBmZP5wVk=
k8s.io/apimachinery v0.0.0-20250319092800-e8a77bd768fd h1:KoXgjwEokLM8o95kMxowg5vp5iQ4v46Kk+zobsqeTgU=
k8s.io/apimachinery v0.0.0-20250319092800-e8a77bd768fd/go.mod h1:D2UW665TVSpInyOuG6C+PMtC1MZheP0KQz65UPQEiI4=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=