kubeadm: Deduplicate kube-proxy image logic
Until now, kube-proxy image was handled in two separate places: - In images.go along with the pre-pull code and without having the image override capabilities (via UnifiedControlPlaneImage) - In the kube-proxy manifest, where image override was possible. This duplicates the kube-proxy image logic and makes it prone to errors. Therefore, this change aims to deduplicate it and make it more straightforward. This is achieved in the following ways: - GetKubeControlPlaneImage is used for kube-proxy image fetching, thus allowing for the image to be overriden by UnifiedControlPlaneImage. - Remove duplicated logic from the manifest and use GetKubeControlPlaneImage to generate the image for the manifest. Additionally, GetKubeControlPlaneImageNoOverride is removed as the only use case for the function is now invalid. Signed-off-by: Rostislav M. Georgiev <rostislavg@vmware.com>
This commit is contained in:
parent
83f6efcec0
commit
dedf139288
@ -36,19 +36,14 @@ func GetGenericArchImage(prefix, image, tag string) string {
|
|||||||
return fmt.Sprintf("%s/%s-%s:%s", prefix, image, runtime.GOARCH, tag)
|
return fmt.Sprintf("%s/%s-%s:%s", prefix, image, runtime.GOARCH, tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetKubeControlPlaneImageNoOverride generates and returns the image for the core Kubernetes components ignoring the unified control plane image
|
|
||||||
func GetKubeControlPlaneImageNoOverride(image string, cfg *kubeadmapi.InitConfiguration) string {
|
|
||||||
repoPrefix := cfg.GetControlPlaneImageRepository()
|
|
||||||
kubernetesImageTag := kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion)
|
|
||||||
return GetGenericArchImage(repoPrefix, image, kubernetesImageTag)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetKubeControlPlaneImage generates and returns the image for the core Kubernetes components or returns the unified control plane image if specified
|
// GetKubeControlPlaneImage generates and returns the image for the core Kubernetes components or returns the unified control plane image if specified
|
||||||
func GetKubeControlPlaneImage(image string, cfg *kubeadmapi.InitConfiguration) string {
|
func GetKubeControlPlaneImage(image string, cfg *kubeadmapi.InitConfiguration) string {
|
||||||
if cfg.UnifiedControlPlaneImage != "" {
|
if cfg.UnifiedControlPlaneImage != "" {
|
||||||
return cfg.UnifiedControlPlaneImage
|
return cfg.UnifiedControlPlaneImage
|
||||||
}
|
}
|
||||||
return GetKubeControlPlaneImageNoOverride(image, cfg)
|
repoPrefix := cfg.GetControlPlaneImageRepository()
|
||||||
|
kubernetesImageTag := kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion)
|
||||||
|
return GetGenericArchImage(repoPrefix, image, kubernetesImageTag)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEtcdImage generates and returns the image for etcd or returns cfg.Etcd.Local.Image if specified
|
// GetEtcdImage generates and returns the image for etcd or returns cfg.Etcd.Local.Image if specified
|
||||||
@ -70,7 +65,7 @@ func GetAllImages(cfg *kubeadmapi.InitConfiguration) []string {
|
|||||||
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeAPIServer, cfg))
|
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeAPIServer, cfg))
|
||||||
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeControllerManager, cfg))
|
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeControllerManager, cfg))
|
||||||
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeScheduler, cfg))
|
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeScheduler, cfg))
|
||||||
imgs = append(imgs, GetKubeControlPlaneImageNoOverride(constants.KubeProxy, cfg))
|
imgs = append(imgs, GetKubeControlPlaneImage(constants.KubeProxy, cfg))
|
||||||
|
|
||||||
// pause, etcd and kube-dns are not available on the ci image repository so use the default image repository.
|
// pause, etcd and kube-dns are not available on the ci image repository so use the default image repository.
|
||||||
imgs = append(imgs, GetGenericImage(cfg.ImageRepository, "pause", "3.1"))
|
imgs = append(imgs, GetGenericImage(cfg.ImageRepository, "pause", "3.1"))
|
||||||
|
@ -45,59 +45,6 @@ func TestGetGenericArchImage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetKubeControlPlaneImageNoOverride(t *testing.T) {
|
|
||||||
var tests = []struct {
|
|
||||||
image string
|
|
||||||
expected string
|
|
||||||
cfg *kubeadmapi.InitConfiguration
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
// UnifiedControlPlaneImage should be ignored by GetKubeImage
|
|
||||||
image: constants.KubeAPIServer,
|
|
||||||
expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected),
|
|
||||||
cfg: &kubeadmapi.InitConfiguration{
|
|
||||||
UnifiedControlPlaneImage: "nooverride",
|
|
||||||
ImageRepository: gcrPrefix,
|
|
||||||
KubernetesVersion: testversion,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
image: constants.KubeAPIServer,
|
|
||||||
expected: GetGenericArchImage(gcrPrefix, "kube-apiserver", expected),
|
|
||||||
cfg: &kubeadmapi.InitConfiguration{
|
|
||||||
ImageRepository: gcrPrefix,
|
|
||||||
KubernetesVersion: testversion,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
image: constants.KubeControllerManager,
|
|
||||||
expected: GetGenericArchImage(gcrPrefix, "kube-controller-manager", expected),
|
|
||||||
cfg: &kubeadmapi.InitConfiguration{
|
|
||||||
ImageRepository: gcrPrefix,
|
|
||||||
KubernetesVersion: testversion,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
image: constants.KubeScheduler,
|
|
||||||
expected: GetGenericArchImage(gcrPrefix, "kube-scheduler", expected),
|
|
||||||
cfg: &kubeadmapi.InitConfiguration{
|
|
||||||
ImageRepository: gcrPrefix,
|
|
||||||
KubernetesVersion: testversion,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
for _, rt := range tests {
|
|
||||||
actual := GetKubeControlPlaneImageNoOverride(rt.image, rt.cfg)
|
|
||||||
if actual != rt.expected {
|
|
||||||
t.Errorf(
|
|
||||||
"failed GetKubeControlPlaneImageNoOverride:\n\texpected: %s\n\t actual: %s",
|
|
||||||
rt.expected,
|
|
||||||
actual,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetKubeControlPlaneImage(t *testing.T) {
|
func TestGetKubeControlPlaneImage(t *testing.T) {
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
image string
|
image string
|
||||||
|
@ -35,6 +35,8 @@ go_library(
|
|||||||
deps = [
|
deps = [
|
||||||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
||||||
"//cmd/kubeadm/app/componentconfigs:go_default_library",
|
"//cmd/kubeadm/app/componentconfigs:go_default_library",
|
||||||
|
"//cmd/kubeadm/app/constants:go_default_library",
|
||||||
|
"//cmd/kubeadm/app/images:go_default_library",
|
||||||
"//cmd/kubeadm/app/util:go_default_library",
|
"//cmd/kubeadm/app/util:go_default_library",
|
||||||
"//cmd/kubeadm/app/util/apiclient:go_default_library",
|
"//cmd/kubeadm/app/util/apiclient:go_default_library",
|
||||||
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
||||||
|
@ -75,7 +75,7 @@ spec:
|
|||||||
priorityClassName: system-node-critical
|
priorityClassName: system-node-critical
|
||||||
containers:
|
containers:
|
||||||
- name: kube-proxy
|
- name: kube-proxy
|
||||||
image: {{ if .ImageOverride }}{{ .ImageOverride }}{{ else }}{{ .ImageRepository }}/kube-proxy-{{ .Arch }}:{{ .Version }}{{ end }}
|
image: {{ .Image }}
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- /usr/local/bin/kube-proxy
|
- /usr/local/bin/kube-proxy
|
||||||
|
@ -30,6 +30,8 @@ import (
|
|||||||
clientsetscheme "k8s.io/client-go/kubernetes/scheme"
|
clientsetscheme "k8s.io/client-go/kubernetes/scheme"
|
||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs"
|
"k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
|
"k8s.io/kubernetes/cmd/kubeadm/app/images"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient"
|
"k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient"
|
||||||
)
|
)
|
||||||
@ -73,11 +75,9 @@ func EnsureProxyAddon(cfg *kubeadmapi.InitConfiguration, client clientset.Interf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error when parsing kube-proxy configmap template: %v", err)
|
return fmt.Errorf("error when parsing kube-proxy configmap template: %v", err)
|
||||||
}
|
}
|
||||||
proxyDaemonSetBytes, err = kubeadmutil.ParseTemplate(KubeProxyDaemonSet19, struct{ ImageRepository, Arch, Version, ImageOverride string }{
|
proxyDaemonSetBytes, err = kubeadmutil.ParseTemplate(KubeProxyDaemonSet19, struct{ Image, Arch string }{
|
||||||
ImageRepository: cfg.GetControlPlaneImageRepository(),
|
Image: images.GetKubeControlPlaneImage(constants.KubeProxy, cfg),
|
||||||
Arch: runtime.GOARCH,
|
Arch: runtime.GOARCH,
|
||||||
Version: kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion),
|
|
||||||
ImageOverride: cfg.UnifiedControlPlaneImage,
|
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error when parsing kube-proxy daemonset template: %v", err)
|
return fmt.Errorf("error when parsing kube-proxy daemonset template: %v", err)
|
||||||
|
@ -108,13 +108,9 @@ func TestCompileManifests(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
manifest: KubeProxyDaemonSet19,
|
manifest: KubeProxyDaemonSet19,
|
||||||
data: struct{ ImageRepository, Arch, Version, ImageOverride, MasterTaintKey, CloudTaintKey string }{
|
data: struct{ Image, Arch string }{
|
||||||
ImageRepository: "foo",
|
Image: "foo",
|
||||||
Arch: "foo",
|
Arch: "foo",
|
||||||
Version: "foo",
|
|
||||||
ImageOverride: "foo",
|
|
||||||
MasterTaintKey: "foo",
|
|
||||||
CloudTaintKey: "foo",
|
|
||||||
},
|
},
|
||||||
expected: true,
|
expected: true,
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user