From 3f1a6a636d773ac3cbd54ad74bd3159780445b4a Mon Sep 17 00:00:00 2001 From: rawmind0 Date: Mon, 16 Aug 2021 14:41:46 +0200 Subject: [PATCH] Updated nginx ingress addon to remove admission batch jobs if they exist --- cluster/addons.go | 20 +++++++++++++++++++- k8s/job.go | 7 +++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/cluster/addons.go b/cluster/addons.go index 83f1a87b..d9bed5c2 100644 --- a/cluster/addons.go +++ b/cluster/addons.go @@ -53,11 +53,15 @@ const ( Nodelocal = "nodelocal" NginxIngressAddonAppName = "ingress-nginx" + NginxIngressAddonAppNamespace = "ingress-nginx" NginxIngressAddonDefaultBackendName = "default-http-backend" NginxIngressAddonDefaultBackendNamespace = "ingress-nginx" ) -var DNSProviders = []string{KubeDNSProvider, CoreDNSProvider} +var ( + DNSProviders = []string{KubeDNSProvider, CoreDNSProvider} + NginxIngressAddonJobNames = []string{"ingress-nginx-admission-create", "ingress-nginx-admission-patch"} +) type ingressOptions struct { RBACConfig string @@ -613,6 +617,20 @@ func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{} if version < "0.16.0" { ingressConfig.AlpineImage = c.SystemImages.Alpine } + // since nginx ingress controller 0.40.0, admission batch jobs are deployed. + // Before deployment of the new ingress controller based on the update strategy, remove admission batch jobs if they exist. + if version > "0.40.0" { + log.Infof(ctx, "[ingress] removing admission batch jobs if they exist") + kubeClient, err := k8s.NewClient(c.LocalKubeConfigPath, c.K8sWrapTransport) + if err != nil { + return err + } + for _, jobName := range NginxIngressAddonJobNames { + if err = k8s.DeleteK8sJobIfExists(kubeClient, jobName, NginxIngressAddonAppNamespace); err != nil { + return err + } + } + } } tmplt, err := templates.GetVersionedTemplates(kdm.NginxIngress, data, c.Version) if err != nil { diff --git a/k8s/job.go b/k8s/job.go index d5298b1e..b7956fe1 100644 --- a/k8s/job.go +++ b/k8s/job.go @@ -71,6 +71,13 @@ func DeleteK8sSystemJob(jobYaml string, k8sClient *kubernetes.Clientset, timeout return nil } +func DeleteK8sJobIfExists(k8sClient *kubernetes.Clientset, name, namespace string) error { + if err := deleteK8sJob(k8sClient, name, namespace); err != nil && !apierrors.IsNotFound(err) { + return err + } + return nil +} + func ensureJobCompleted(k8sClient *kubernetes.Clientset, j interface{}) error { job := j.(v1.Job)