mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 04:33:26 +00:00
kubeadm: statically default ImagePullPolicy in v1beta3
Instead of dynamically defaulting NodeRegistration.ImagePullPolicy, which is common when doing defaulting depending on host state - e.g. hostname, statically default it in v1beta3/defaults.go. - Remove defaulting in checks.go - Add one more unit test in checks_test.go - Adapt v1beta2 conversion and fuzzer / round tripping tests This also results in the default being visible when calling: "kubeadm config print ...".
This commit is contained in:
parent
f37550a470
commit
f01d251e38
@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
|
||||
@ -60,7 +61,7 @@ func fuzzInitConfiguration(obj *kubeadm.InitConfiguration, c fuzz.Continue) {
|
||||
},
|
||||
}
|
||||
obj.SkipPhases = nil
|
||||
obj.NodeRegistration.ImagePullPolicy = ""
|
||||
obj.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
|
||||
obj.Patches = nil
|
||||
}
|
||||
|
||||
@ -123,7 +124,7 @@ func fuzzJoinConfiguration(obj *kubeadm.JoinConfiguration, c fuzz.Continue) {
|
||||
Timeout: &metav1.Duration{Duration: 1234},
|
||||
}
|
||||
obj.SkipPhases = nil
|
||||
obj.NodeRegistration.ImagePullPolicy = ""
|
||||
obj.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
|
||||
obj.Patches = nil
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@ package v1beta2
|
||||
import (
|
||||
kubeadm "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||
)
|
||||
|
||||
@ -31,6 +32,9 @@ func Convert_v1beta2_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConf
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Needed for round-tripping since this field is defaulted in v1beta3
|
||||
out.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
|
||||
|
||||
return Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(&ClusterConfiguration{}, &out.ClusterConfiguration, s)
|
||||
}
|
||||
|
||||
@ -49,3 +53,14 @@ func Convert_kubeadm_JoinConfiguration_To_v1beta2_JoinConfiguration(in *kubeadm.
|
||||
func Convert_kubeadm_NodeRegistrationOptions_To_v1beta2_NodeRegistrationOptions(in *kubeadm.NodeRegistrationOptions, out *NodeRegistrationOptions, s conversion.Scope) error {
|
||||
return autoConvert_kubeadm_NodeRegistrationOptions_To_v1beta2_NodeRegistrationOptions(in, out, s)
|
||||
}
|
||||
|
||||
// Convert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration is required since v1beta2 does not have NodeRegistrationOption.ImagePullPolicy
|
||||
// and to make round-tripping happy.
|
||||
func Convert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(in *JoinConfiguration, out *kubeadm.JoinConfiguration, s conversion.Scope) error {
|
||||
err := autoConvert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(in, out, s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
out.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
|
||||
return nil
|
||||
}
|
||||
|
@ -153,11 +153,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*JoinConfiguration)(nil), (*kubeadm.JoinConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(a.(*JoinConfiguration), b.(*kubeadm.JoinConfiguration), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*JoinControlPlane)(nil), (*kubeadm.JoinControlPlane)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta2_JoinControlPlane_To_kubeadm_JoinControlPlane(a.(*JoinControlPlane), b.(*kubeadm.JoinControlPlane), scope)
|
||||
}); err != nil {
|
||||
@ -218,6 +213,11 @@ func RegisterConversions(s *runtime.Scheme) error {
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddConversionFunc((*JoinConfiguration)(nil), (*kubeadm.JoinConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(a.(*JoinConfiguration), b.(*kubeadm.JoinConfiguration), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -592,11 +592,6 @@ func autoConvert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(in *Join
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration is an autogenerated conversion function.
|
||||
func Convert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(in *JoinConfiguration, out *kubeadm.JoinConfiguration, s conversion.Scope) error {
|
||||
return autoConvert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_kubeadm_JoinConfiguration_To_v1beta2_JoinConfiguration(in *kubeadm.JoinConfiguration, out *JoinConfiguration, s conversion.Scope) error {
|
||||
if err := Convert_kubeadm_NodeRegistrationOptions_To_v1beta2_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil {
|
||||
return err
|
||||
|
@ -20,11 +20,12 @@ import (
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
bootstraptokenv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
bootstraptokenv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -55,6 +56,9 @@ const (
|
||||
DefaultProxyBindAddressv6 = "::"
|
||||
// DefaultDiscoveryTimeout specifies the default discovery timeout for kubeadm (used unless one is specified in the JoinConfiguration)
|
||||
DefaultDiscoveryTimeout = 5 * time.Minute
|
||||
|
||||
// DefaultImagePullPolicy is the default image pull policy in kubeadm
|
||||
DefaultImagePullPolicy = corev1.PullIfNotPresent
|
||||
)
|
||||
|
||||
var (
|
||||
@ -71,6 +75,7 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
|
||||
func SetDefaults_InitConfiguration(obj *InitConfiguration) {
|
||||
SetDefaults_BootstrapTokens(obj)
|
||||
SetDefaults_APIEndpoint(&obj.LocalAPIEndpoint)
|
||||
SetDefaults_NodeRegistration(&obj.NodeRegistration)
|
||||
}
|
||||
|
||||
// SetDefaults_ClusterConfiguration assigns default values for the ClusterConfiguration
|
||||
@ -132,6 +137,7 @@ func SetDefaults_JoinConfiguration(obj *JoinConfiguration) {
|
||||
|
||||
SetDefaults_JoinControlPlane(obj.ControlPlane)
|
||||
SetDefaults_Discovery(&obj.Discovery)
|
||||
SetDefaults_NodeRegistration(&obj.NodeRegistration)
|
||||
}
|
||||
|
||||
func SetDefaults_JoinControlPlane(obj *JoinControlPlane) {
|
||||
@ -206,3 +212,10 @@ func SetDefaults_APIEndpoint(obj *APIEndpoint) {
|
||||
obj.BindPort = DefaultAPIBindPort
|
||||
}
|
||||
}
|
||||
|
||||
// SetDefaults_NodeRegistration sets the defaults for the NodeRegistrationOptions object
|
||||
func SetDefaults_NodeRegistration(obj *NodeRegistrationOptions) {
|
||||
if len(obj.ImagePullPolicy) == 0 {
|
||||
obj.ImagePullPolicy = DefaultImagePullPolicy
|
||||
}
|
||||
}
|
||||
|
@ -835,9 +835,6 @@ func (ImagePullCheck) Name() string {
|
||||
// Check pulls images required by kubeadm. This is a mutating check
|
||||
func (ipc ImagePullCheck) Check() (warnings, errorList []error) {
|
||||
policy := ipc.imagePullPolicy
|
||||
if len(policy) == 0 {
|
||||
policy = v1.PullIfNotPresent // Default behavior if the policy is unset
|
||||
}
|
||||
klog.V(1).Infof("using image pull policy: %s", policy)
|
||||
for _, image := range ipc.imageList {
|
||||
switch policy {
|
||||
|
@ -31,6 +31,7 @@ import (
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/utils/exec"
|
||||
fakeexec "k8s.io/utils/exec/testing"
|
||||
@ -923,7 +924,7 @@ func TestImagePullCheck(t *testing.T) {
|
||||
check := ImagePullCheck{
|
||||
runtime: containerRuntime,
|
||||
imageList: []string{"img1", "img2", "img3"},
|
||||
imagePullPolicy: "", // should be defaulted to v1.PullIfNotPresent
|
||||
imagePullPolicy: corev1.PullIfNotPresent,
|
||||
}
|
||||
warnings, errors := check.Check()
|
||||
if len(warnings) != 0 {
|
||||
@ -940,6 +941,17 @@ func TestImagePullCheck(t *testing.T) {
|
||||
if len(errors) != 2 {
|
||||
t.Fatalf("expected 2 errors but got %d: %q", len(errors), errors)
|
||||
}
|
||||
|
||||
// Test with unknown policy
|
||||
check = ImagePullCheck{
|
||||
runtime: containerRuntime,
|
||||
imageList: []string{"img1", "img2", "img3"},
|
||||
imagePullPolicy: "",
|
||||
}
|
||||
_, errors = check.Check()
|
||||
if len(errors) != 1 {
|
||||
t.Fatalf("expected 1 error but got %d: %q", len(errors), errors)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNumCPUCheck(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user