Skip to content

Commit

Permalink
Merge pull request #122529 from neolit123/1.30-v1beta4-timeouts
Browse files Browse the repository at this point in the history
kubeadm: add a Timeouts struct to v1beta4
  • Loading branch information
k8s-ci-robot committed Jan 15, 2024
2 parents 789e029 + 5f876b9 commit 8ba2997
Show file tree
Hide file tree
Showing 43 changed files with 1,187 additions and 552 deletions.
8 changes: 5 additions & 3 deletions cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import (

bootstraptokenv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1"
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
)

// Funcs returns the fuzzer functions for the kubeadm apis.
Expand Down Expand Up @@ -65,6 +64,7 @@ func fuzzInitConfiguration(obj *kubeadm.InitConfiguration, c fuzz.Continue) {
obj.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
obj.Patches = nil
obj.DryRun = false
kubeadm.SetDefaultTimeouts(&obj.Timeouts)
}

func fuzzNodeRegistration(obj *kubeadm.NodeRegistrationOptions, c fuzz.Continue) {
Expand All @@ -85,7 +85,7 @@ func fuzzClusterConfiguration(obj *kubeadm.ClusterConfiguration, c fuzz.Continue
obj.KubernetesVersion = "qux"
obj.CIKubernetesVersion = "" // This fields doesn't exists in public API >> using default to get the roundtrip test pass
obj.APIServer.TimeoutForControlPlane = &metav1.Duration{
Duration: constants.DefaultControlPlaneTimeout,
Duration: 0,
}
obj.ControllerManager.ExtraEnvs = []kubeadm.EnvVar{}
obj.APIServer.ExtraEnvs = []kubeadm.EnvVar{}
Expand Down Expand Up @@ -128,12 +128,13 @@ func fuzzJoinConfiguration(obj *kubeadm.JoinConfiguration, c fuzz.Continue) {
obj.Discovery = kubeadm.Discovery{
BootstrapToken: &kubeadm.BootstrapTokenDiscovery{Token: "baz"},
TLSBootstrapToken: "qux",
Timeout: &metav1.Duration{Duration: 1234},
Timeout: &metav1.Duration{},
}
obj.SkipPhases = nil
obj.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
obj.Patches = nil
obj.DryRun = false
kubeadm.SetDefaultTimeouts(&obj.Timeouts)
}

func fuzzJoinControlPlane(obj *kubeadm.JoinControlPlane, c fuzz.Continue) {
Expand All @@ -145,4 +146,5 @@ func fuzzResetConfiguration(obj *kubeadm.ResetConfiguration, c fuzz.Continue) {

// Pinning values for fields that get defaults if fuzz value is empty string or nil (thus making the round trip test fail)
obj.CertificatesDir = "/tmp"
kubeadm.SetDefaultTimeouts(&obj.Timeouts)
}
59 changes: 59 additions & 0 deletions cmd/kubeadm/app/apis/kubeadm/timeoututils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
Copyright 2023 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package kubeadm

import (
"sync"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
)

// SetDefaultTimeouts sets an internal Timeouts struct to its default values.
func SetDefaultTimeouts(t **Timeouts) {
*t = &Timeouts{
ControlPlaneComponentHealthCheck: &metav1.Duration{Duration: constants.ControlPlaneComponentHealthCheckTimeout},
KubeletHealthCheck: &metav1.Duration{Duration: constants.KubeletHealthCheckTimeout},
KubernetesAPICall: &metav1.Duration{Duration: constants.KubernetesAPICallTimeout},
EtcdAPICall: &metav1.Duration{Duration: constants.EtcdAPICallTimeout},
TLSBootstrap: &metav1.Duration{Duration: constants.TLSBootstrapTimeout},
Discovery: &metav1.Duration{Duration: constants.DiscoveryTimeout},
}
}

var (
activeTimeouts *Timeouts = nil
timeoutMutex = &sync.RWMutex{}
)

func init() {
SetDefaultTimeouts(&activeTimeouts)
}

// GetActiveTimeouts gets the active timeouts structure.
func GetActiveTimeouts() *Timeouts {
timeoutMutex.RLock()
defer timeoutMutex.RUnlock()
return activeTimeouts
}

// SetActiveTimeouts sets the active timeouts structure.
func SetActiveTimeouts(timeouts *Timeouts) {
timeoutMutex.Lock()
activeTimeouts = timeouts.DeepCopy()
timeoutMutex.Unlock()
}
36 changes: 36 additions & 0 deletions cmd/kubeadm/app/apis/kubeadm/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ type InitConfiguration struct {
// Patches contains options related to applying patches to components deployed by kubeadm during
// "kubeadm init".
Patches *Patches

// Timeouts holds various timeouts that apply to kubeadm commands.
Timeouts *Timeouts
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
Expand Down Expand Up @@ -343,6 +346,9 @@ type JoinConfiguration struct {
// Patches contains options related to applying patches to components deployed by kubeadm during
// "kubeadm join".
Patches *Patches

// Timeouts holds various timeouts that apply to kubeadm commands.
Timeouts *Timeouts
}

// JoinControlPlane contains elements describing an additional control plane instance to be deployed on the joining node.
Expand Down Expand Up @@ -527,6 +533,9 @@ type ResetConfiguration struct {
// directories during "reset". A flag can be one of: MNT_FORCE, MNT_DETACH, MNT_EXPIRE, UMOUNT_NOFOLLOW.
// By default this list is empty.
UnmountFlags []string

// Timeouts holds various timeouts that apply to kubeadm commands.
Timeouts *Timeouts
}

const (
Expand Down Expand Up @@ -563,3 +572,30 @@ const (
// EncryptionAlgorithmRSA defines the RSA encryption algorithm type.
EncryptionAlgorithmRSA EncryptionAlgorithmType = "RSA"
)

// Timeouts holds various timeouts that apply to kubeadm commands.
type Timeouts struct {
// ControlPlaneComponentHealthCheck is the amount of time to wait for a control plane
// component, such as the API server, to be healthy during "kubeadm init" and "kubeadm join".
ControlPlaneComponentHealthCheck *metav1.Duration

// KubeletHealthCheck is the amount of time to wait for the kubelet to be healthy
// during "kubeadm init" and "kubeadm join".
KubeletHealthCheck *metav1.Duration

// KubernetesAPICall is the amount of time to wait for the kubeadm client to complete a request to
// the API server. This applies to all types of methods (GET, POST, etc).
KubernetesAPICall *metav1.Duration

// EtcdAPICall is the amount of time to wait for the kubeadm etcd client to complete a request to
// the etcd cluster.
EtcdAPICall *metav1.Duration

// TLSBootstrap is the amount of time to wait for the kubelet to complete TLS bootstrap
// for a joining node.
TLSBootstrap *metav1.Duration

// Discovery is the amount of time to wait for kubeadm to validate the API server identity
// for a joining node.
Discovery *metav1.Duration
}
23 changes: 18 additions & 5 deletions cmd/kubeadm/app/apis/kubeadm/v1beta3/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,6 @@ func Convert_kubeadm_InitConfiguration_To_v1beta3_InitConfiguration(in *kubeadm.
return autoConvert_kubeadm_InitConfiguration_To_v1beta3_InitConfiguration(in, out, s)
}

// Convert_kubeadm_JoinConfiguration_To_v1beta3_JoinConfiguration converts a private JoinConfiguration to public JoinConfiguration.
func Convert_kubeadm_JoinConfiguration_To_v1beta3_JoinConfiguration(in *kubeadm.JoinConfiguration, out *JoinConfiguration, s conversion.Scope) error {
return autoConvert_kubeadm_JoinConfiguration_To_v1beta3_JoinConfiguration(in, out, s)
}

// Convert_v1beta3_InitConfiguration_To_kubeadm_InitConfiguration converts a public InitConfiguration to private InitConfiguration.
func Convert_v1beta3_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConfiguration, out *kubeadm.InitConfiguration, s conversion.Scope) error {
err := autoConvert_v1beta3_InitConfiguration_To_kubeadm_InitConfiguration(in, out, s)
Expand All @@ -45,9 +40,22 @@ func Convert_v1beta3_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConf
// If we call Convert_v1beta3_ClusterConfiguration_To_kubeadm_ClusterConfiguration() it will receive
// a default value, thus here we need to reset it back to "".
out.EncryptionAlgorithm = ""
// Set default timeouts.
kubeadm.SetDefaultTimeouts(&out.Timeouts)
return err
}

// Convert_kubeadm_JoinConfiguration_To_v1beta3_JoinConfiguration converts a private JoinConfiguration to public JoinConfiguration.
func Convert_kubeadm_JoinConfiguration_To_v1beta3_JoinConfiguration(in *kubeadm.JoinConfiguration, out *JoinConfiguration, s conversion.Scope) error {
return autoConvert_kubeadm_JoinConfiguration_To_v1beta3_JoinConfiguration(in, out, s)
}

// Convert_v1beta3_JoinConfiguration_To_kubeadm_JoinConfiguration converts a public JoinConfiguration to a private JoinConfiguration.
func Convert_v1beta3_JoinConfiguration_To_kubeadm_JoinConfiguration(in *JoinConfiguration, out *kubeadm.JoinConfiguration, s conversion.Scope) error {
kubeadm.SetDefaultTimeouts(&out.Timeouts)
return autoConvert_v1beta3_JoinConfiguration_To_kubeadm_JoinConfiguration(in, out, s)
}

// Convert_kubeadm_ClusterConfiguration_To_v1beta3_ClusterConfiguration is required due to missing EncryptionAlgorithm in v1beta3.
func Convert_kubeadm_ClusterConfiguration_To_v1beta3_ClusterConfiguration(in *kubeadm.ClusterConfiguration, out *ClusterConfiguration, s conversion.Scope) error {
return autoConvert_kubeadm_ClusterConfiguration_To_v1beta3_ClusterConfiguration(in, out, s)
Expand Down Expand Up @@ -135,3 +143,8 @@ func convertFromArgs(in []kubeadm.Arg) map[string]string {
}
return args
}

// Convert_v1beta3_APIServer_To_kubeadm_APIServer is required due to missing APIServer.TimeoutForControlPlane in v1beta4.
func Convert_v1beta3_APIServer_To_kubeadm_APIServer(in *APIServer, out *kubeadm.APIServer, s conversion.Scope) error {
return autoConvert_v1beta3_APIServer_To_kubeadm_APIServer(in, out, s)
}
2 changes: 1 addition & 1 deletion cmd/kubeadm/app/apis/kubeadm/v1beta3/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func SetDefaults_ClusterConfiguration(obj *ClusterConfiguration) {
func SetDefaults_APIServer(obj *APIServer) {
if obj.TimeoutForControlPlane == nil {
obj.TimeoutForControlPlane = &metav1.Duration{
Duration: constants.DefaultControlPlaneTimeout,
Duration: constants.ControlPlaneComponentHealthCheckTimeout,
}
}
}
Expand Down
32 changes: 12 additions & 20 deletions cmd/kubeadm/app/apis/kubeadm/v1beta3/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions cmd/kubeadm/app/apis/kubeadm/v1beta4/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package v1beta4

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/conversion"

"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
Expand All @@ -34,5 +35,35 @@ func Convert_v1beta4_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConf
return err
}
err = Convert_v1beta4_ClusterConfiguration_To_kubeadm_ClusterConfiguration(&ClusterConfiguration{}, &out.ClusterConfiguration, s)
out.ClusterConfiguration.APIServer.TimeoutForControlPlane = nil
return err
}

// Convert_kubeadm_APIServer_To_v1beta4_APIServer is required due to missing APIServer.TimeoutForControlPlane in v1beta4.
func Convert_kubeadm_APIServer_To_v1beta4_APIServer(in *kubeadm.APIServer, out *APIServer, s conversion.Scope) error {
return autoConvert_kubeadm_APIServer_To_v1beta4_APIServer(in, out, s)
}

// Convert_v1beta4_ClusterConfiguration_To_kubeadm_ClusterConfiguration is required due to missing TimeoutForControlPlane in v1beta4
func Convert_v1beta4_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in *ClusterConfiguration, out *kubeadm.ClusterConfiguration, s conversion.Scope) error {
out.APIServer.TimeoutForControlPlane = &metav1.Duration{}
return autoConvert_v1beta4_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in, out, s)
}

// Convert_v1beta4_JoinConfiguration_To_kubeadm_JoinConfiguration converts a public JoinConfiguration to a private JoinConfiguration.
func Convert_v1beta4_JoinConfiguration_To_kubeadm_JoinConfiguration(in *JoinConfiguration, out *kubeadm.JoinConfiguration, s conversion.Scope) error {
err := autoConvert_v1beta4_JoinConfiguration_To_kubeadm_JoinConfiguration(in, out, s)
return err
}

// Convert_kubeadm_Discovery_To_v1beta4_Discovery is required because there is no Discovery.Timeout in v1beta4
func Convert_kubeadm_Discovery_To_v1beta4_Discovery(in *kubeadm.Discovery, out *Discovery, s conversion.Scope) error {
return autoConvert_kubeadm_Discovery_To_v1beta4_Discovery(in, out, s)
}

// Convert_v1beta4_Discovery_To_kubeadm_Discovery is required because there is no Discovery.Timeout in v1beta4
func Convert_v1beta4_Discovery_To_kubeadm_Discovery(in *Discovery, out *kubeadm.Discovery, s conversion.Scope) error {
err := autoConvert_v1beta4_Discovery_To_kubeadm_Discovery(in, out, s)
out.Timeout = &metav1.Duration{}
return err
}

0 comments on commit 8ba2997

Please sign in to comment.