From 1a5537f4ba3fc19aea67cbe9b618b0e2df3ed8b1 Mon Sep 17 00:00:00 2001 From: Ta-Ching Chen Date: Sun, 24 Nov 2019 05:17:56 +0800 Subject: [PATCH] Ability to pull builder image from private registry (#1431) --- pkg/buildermgr/envwatcher.go | 3 +-- pkg/executor/newdeploy/newdeploy.go | 6 +----- pkg/executor/poolmgr/gp.go | 6 +----- pkg/executor/util/util.go | 25 ++++++++++--------------- 4 files changed, 13 insertions(+), 27 deletions(-) diff --git a/pkg/buildermgr/envwatcher.go b/pkg/buildermgr/envwatcher.go index 737efa88..26671fa2 100644 --- a/pkg/buildermgr/envwatcher.go +++ b/pkg/buildermgr/envwatcher.go @@ -495,7 +495,6 @@ func (envw *environmentWatcher) createBuilderDeployment(env *fv1.Environment, ns } finalPodSpec, err := util.MergePodSpec(&podSpec, env.Spec.Builder.PodSpec) - if err != nil { return nil, err } @@ -516,7 +515,7 @@ func (envw *environmentWatcher) createBuilderDeployment(env *fv1.Environment, ns Labels: sel, Annotations: podAnnotations, }, - Spec: *finalPodSpec, + Spec: *(util.ApplyImagePullSecret(env.Spec.ImagePullSecret, *finalPodSpec)), }, }, } diff --git a/pkg/executor/newdeploy/newdeploy.go b/pkg/executor/newdeploy/newdeploy.go index de7a42d0..8220577f 100644 --- a/pkg/executor/newdeploy/newdeploy.go +++ b/pkg/executor/newdeploy/newdeploy.go @@ -239,11 +239,7 @@ func (deploy *NewDeploy) getDeploymentSpec(fn *fv1.Function, env *fv1.Environmen }, } - podspec, err := util.ApplyImagePullSecret(deploy.kubernetesClient, env.Spec.ImagePullSecret, deployNamespace, pod.Spec) - if err != nil { - return nil, errors.Wrapf(err, "failed to apply image pull secret for env '%v'", env.Metadata.Name) - } - pod.Spec = *podspec + pod.Spec = *(util.ApplyImagePullSecret(env.Spec.ImagePullSecret, pod.Spec)) deployment := &appsv1.Deployment{ ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/executor/poolmgr/gp.go b/pkg/executor/poolmgr/gp.go index 5e0a7f22..46160e34 100644 --- a/pkg/executor/poolmgr/gp.go +++ b/pkg/executor/poolmgr/gp.go @@ -404,11 +404,7 @@ func (gp *GenericPool) createPool() error { }, } - podspec, err := util.ApplyImagePullSecret(gp.kubernetesClient, gp.env.Spec.ImagePullSecret, gp.namespace, pod.Spec) - if err != nil { - return errors.Wrapf(err, "failed to apply image pull secret for env '%v'", gp.env.Metadata.Name) - } - pod.Spec = *podspec + pod.Spec = *(util.ApplyImagePullSecret(gp.env.Spec.ImagePullSecret, pod.Spec)) deployment := &appsv1.Deployment{ ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/executor/util/util.go b/pkg/executor/util/util.go index 418d3973..40d92eee 100644 --- a/pkg/executor/util/util.go +++ b/pkg/executor/util/util.go @@ -17,22 +17,17 @@ limitations under the License. package util import ( - "github.com/pkg/errors" apiv1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" ) -// ApplyImagePullSecret applies image pull secret to the give pod spec. An error will be returned if failed to get secret. -func ApplyImagePullSecret(client *kubernetes.Clientset, secret string, secretNS string, podspec apiv1.PodSpec) (*apiv1.PodSpec, error) { - if len(secret) > 0 && client != nil { - _, err := client.CoreV1().Secrets(secretNS).Get(secret, metav1.GetOptions{}) - if err != nil { - err = errors.Wrapf(err, "unable to get image pull secret '%v' under namespace '%v'", - secret, secretNS) - return nil, err - } - podspec.ImagePullSecrets = []apiv1.LocalObjectReference{{Name: secret}} - } - return &podspec, nil +// ApplyImagePullSecret applies image pull secret to the give pod spec. +// It's intentional not to check the existence of secret here. +// First, Kubernetes will set Pod status to "ImagePullBackOff" once +// kubelet failed to pull image so that users will know what's happening. +// Second, Fission no longer need to handle "secret not found" error +// when creating the environment deployment since kubelet will retry to +// pull image until successes. +func ApplyImagePullSecret(secret string, podspec apiv1.PodSpec) *apiv1.PodSpec { + podspec.ImagePullSecrets = []apiv1.LocalObjectReference{{Name: secret}} + return &podspec }