mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +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/apis/kubeadm"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ func fuzzInitConfiguration(obj *kubeadm.InitConfiguration, c fuzz.Continue) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
obj.SkipPhases = nil
|
obj.SkipPhases = nil
|
||||||
obj.NodeRegistration.ImagePullPolicy = ""
|
obj.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
|
||||||
obj.Patches = nil
|
obj.Patches = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +124,7 @@ func fuzzJoinConfiguration(obj *kubeadm.JoinConfiguration, c fuzz.Continue) {
|
|||||||
Timeout: &metav1.Duration{Duration: 1234},
|
Timeout: &metav1.Duration{Duration: 1234},
|
||||||
}
|
}
|
||||||
obj.SkipPhases = nil
|
obj.SkipPhases = nil
|
||||||
obj.NodeRegistration.ImagePullPolicy = ""
|
obj.NodeRegistration.ImagePullPolicy = corev1.PullIfNotPresent
|
||||||
obj.Patches = nil
|
obj.Patches = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ package v1beta2
|
|||||||
import (
|
import (
|
||||||
kubeadm "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadm "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
conversion "k8s.io/apimachinery/pkg/conversion"
|
conversion "k8s.io/apimachinery/pkg/conversion"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,6 +32,9 @@ func Convert_v1beta2_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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)
|
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 {
|
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)
|
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 {
|
}); err != nil {
|
||||||
return err
|
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 {
|
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)
|
return Convert_v1beta2_JoinControlPlane_To_kubeadm_JoinControlPlane(a.(*JoinControlPlane), b.(*kubeadm.JoinControlPlane), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -218,6 +213,11 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,11 +592,6 @@ func autoConvert_v1beta2_JoinConfiguration_To_kubeadm_JoinConfiguration(in *Join
|
|||||||
return nil
|
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 {
|
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 {
|
if err := Convert_kubeadm_NodeRegistrationOptions_To_v1beta2_NodeRegistrationOptions(&in.NodeRegistration, &out.NodeRegistration, s); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -20,11 +20,12 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
bootstraptokenv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
bootstraptokenv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -55,6 +56,9 @@ const (
|
|||||||
DefaultProxyBindAddressv6 = "::"
|
DefaultProxyBindAddressv6 = "::"
|
||||||
// DefaultDiscoveryTimeout specifies the default discovery timeout for kubeadm (used unless one is specified in the JoinConfiguration)
|
// DefaultDiscoveryTimeout specifies the default discovery timeout for kubeadm (used unless one is specified in the JoinConfiguration)
|
||||||
DefaultDiscoveryTimeout = 5 * time.Minute
|
DefaultDiscoveryTimeout = 5 * time.Minute
|
||||||
|
|
||||||
|
// DefaultImagePullPolicy is the default image pull policy in kubeadm
|
||||||
|
DefaultImagePullPolicy = corev1.PullIfNotPresent
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -71,6 +75,7 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
|
|||||||
func SetDefaults_InitConfiguration(obj *InitConfiguration) {
|
func SetDefaults_InitConfiguration(obj *InitConfiguration) {
|
||||||
SetDefaults_BootstrapTokens(obj)
|
SetDefaults_BootstrapTokens(obj)
|
||||||
SetDefaults_APIEndpoint(&obj.LocalAPIEndpoint)
|
SetDefaults_APIEndpoint(&obj.LocalAPIEndpoint)
|
||||||
|
SetDefaults_NodeRegistration(&obj.NodeRegistration)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDefaults_ClusterConfiguration assigns default values for the ClusterConfiguration
|
// SetDefaults_ClusterConfiguration assigns default values for the ClusterConfiguration
|
||||||
@ -132,6 +137,7 @@ func SetDefaults_JoinConfiguration(obj *JoinConfiguration) {
|
|||||||
|
|
||||||
SetDefaults_JoinControlPlane(obj.ControlPlane)
|
SetDefaults_JoinControlPlane(obj.ControlPlane)
|
||||||
SetDefaults_Discovery(&obj.Discovery)
|
SetDefaults_Discovery(&obj.Discovery)
|
||||||
|
SetDefaults_NodeRegistration(&obj.NodeRegistration)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetDefaults_JoinControlPlane(obj *JoinControlPlane) {
|
func SetDefaults_JoinControlPlane(obj *JoinControlPlane) {
|
||||||
@ -206,3 +212,10 @@ func SetDefaults_APIEndpoint(obj *APIEndpoint) {
|
|||||||
obj.BindPort = DefaultAPIBindPort
|
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
|
// Check pulls images required by kubeadm. This is a mutating check
|
||||||
func (ipc ImagePullCheck) Check() (warnings, errorList []error) {
|
func (ipc ImagePullCheck) Check() (warnings, errorList []error) {
|
||||||
policy := ipc.imagePullPolicy
|
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)
|
klog.V(1).Infof("using image pull policy: %s", policy)
|
||||||
for _, image := range ipc.imageList {
|
for _, image := range ipc.imageList {
|
||||||
switch policy {
|
switch policy {
|
||||||
|
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
|
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/utils/exec"
|
"k8s.io/utils/exec"
|
||||||
fakeexec "k8s.io/utils/exec/testing"
|
fakeexec "k8s.io/utils/exec/testing"
|
||||||
@ -923,7 +924,7 @@ func TestImagePullCheck(t *testing.T) {
|
|||||||
check := ImagePullCheck{
|
check := ImagePullCheck{
|
||||||
runtime: containerRuntime,
|
runtime: containerRuntime,
|
||||||
imageList: []string{"img1", "img2", "img3"},
|
imageList: []string{"img1", "img2", "img3"},
|
||||||
imagePullPolicy: "", // should be defaulted to v1.PullIfNotPresent
|
imagePullPolicy: corev1.PullIfNotPresent,
|
||||||
}
|
}
|
||||||
warnings, errors := check.Check()
|
warnings, errors := check.Check()
|
||||||
if len(warnings) != 0 {
|
if len(warnings) != 0 {
|
||||||
@ -940,6 +941,17 @@ func TestImagePullCheck(t *testing.T) {
|
|||||||
if len(errors) != 2 {
|
if len(errors) != 2 {
|
||||||
t.Fatalf("expected 2 errors but got %d: %q", len(errors), errors)
|
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) {
|
func TestNumCPUCheck(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user