You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2019/12/18 12:34:58 UTC

[camel-k] 13/13: chore(build): Isolate builder volume from Kaniko cache volume

This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit f4928bf7c49c88f994d4ce73074ccc5582f41155
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Wed Dec 18 11:35:07 2019 +0100

    chore(build): Isolate builder volume from Kaniko cache volume
---
 pkg/builder/kaniko/kaniko.go                       |  4 +--
 pkg/controller/integrationplatform/kaniko_cache.go | 14 ++++----
 pkg/trait/builder.go                               | 39 +++++++++++++---------
 3 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/pkg/builder/kaniko/kaniko.go b/pkg/builder/kaniko/kaniko.go
index efc0291..b61638d 100644
--- a/pkg/builder/kaniko/kaniko.go
+++ b/pkg/builder/kaniko/kaniko.go
@@ -42,5 +42,5 @@ var KanikoSteps = []builder.Step{
 	Steps.Publisher,
 }
 
-// BuildDir is the directory where to build artifacts (shared with the Kaniko pod)
-var BuildDir = "/workspace"
+// CacheDir is the cache directory for Kaniko builds (mounted into the Kaniko pod)
+const CacheDir = "/kaniko/cache"
diff --git a/pkg/controller/integrationplatform/kaniko_cache.go b/pkg/controller/integrationplatform/kaniko_cache.go
index 2d5674d..195090e 100644
--- a/pkg/controller/integrationplatform/kaniko_cache.go
+++ b/pkg/controller/integrationplatform/kaniko_cache.go
@@ -58,13 +58,13 @@ func createKanikoCacheWarmerPod(ctx context.Context, client client.Client, platf
 					Name:  "warm-kaniko-cache",
 					Image: fmt.Sprintf("gcr.io/kaniko-project/warmer:v%s", defaults.KanikoVersion),
 					Args: []string{
-						"--cache-dir=/workspace/cache",
+						"--cache-dir=" + kaniko.CacheDir,
 						"--image=" + platform.Status.Build.BaseImage,
 					},
 					VolumeMounts: []corev1.VolumeMount{
 						{
-							Name:      "camel-k-builder",
-							MountPath: kaniko.BuildDir,
+							Name:      "kaniko-cache",
+							MountPath: kaniko.CacheDir,
 						},
 					},
 				},
@@ -76,11 +76,11 @@ func createKanikoCacheWarmerPod(ctx context.Context, client client.Client, platf
 					Image:           "busybox",
 					ImagePullPolicy: corev1.PullIfNotPresent,
 					Command:         []string{"/bin/sh", "-c"},
-					Args:            []string{"mkdir -p /workspace/cache && chmod -R a+rwx /workspace"},
+					Args:            []string{"mkdir -p " + kaniko.CacheDir + "&& chmod -R a+rwx " + kaniko.CacheDir},
 					VolumeMounts: []corev1.VolumeMount{
 						{
-							Name:      "camel-k-builder",
-							MountPath: kaniko.BuildDir,
+							Name:      "kaniko-cache",
+							MountPath: kaniko.CacheDir,
 						},
 					},
 				},
@@ -88,7 +88,7 @@ func createKanikoCacheWarmerPod(ctx context.Context, client client.Client, platf
 			RestartPolicy: corev1.RestartPolicyOnFailure,
 			Volumes: []corev1.Volume{
 				{
-					Name: "camel-k-builder",
+					Name: "kaniko-cache",
 					VolumeSource: corev1.VolumeSource{
 						PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
 							ClaimName: platform.Status.Build.PersistentVolumeClaim,
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index a81f841..e008c8f 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -37,6 +37,8 @@ import (
 	"github.com/apache/camel-k/pkg/util/defaults"
 )
 
+const builderDir = "/builder"
+
 // The builder trait is internally used to determine the best strategy to
 // build and configure IntegrationKits.
 //
@@ -68,10 +70,19 @@ func (t *builderTrait) Apply(e *Environment) error {
 		if err != nil {
 			return err
 		}
-		mount := corev1.VolumeMount{Name: "camel-k-builder", MountPath: kaniko.BuildDir}
+
+		mount := corev1.VolumeMount{Name: "camel-k-builder", MountPath: builderDir}
 		builderTask.VolumeMounts = append(builderTask.VolumeMounts, mount)
 		kanikoTask.VolumeMounts = append(kanikoTask.VolumeMounts, mount)
 
+		// Use an emptyDir volume to coordinate the Camel Maven build and the Kaniko image build
+		builderTask.Volumes = append(builderTask.Volumes, corev1.Volume{
+			Name: "camel-k-builder",
+			VolumeSource: corev1.VolumeSource{
+				EmptyDir: &corev1.EmptyDirVolumeSource{},
+			},
+		})
+
 		if e.Platform.Status.Build.IsKanikoCacheEnabled() {
 			// Co-locate with the Kaniko warmer pod for sharing the host path volume as the current
 			// persistent volume claim uses the default storage class which is likely relying
@@ -113,22 +124,18 @@ func (t *builderTrait) Apply(e *Environment) error {
 					},
 				},
 			}
-			// Use the PVC used to warm the Kaniko cache to coordinate the Camel Maven build and the Kaniko image build
-			builderTask.Volumes = append(builderTask.Volumes, corev1.Volume{
-				Name: "camel-k-builder",
+			// Mount the PV used to warm the Kaniko cache into the Kaniko image build
+			kanikoTask.Volumes = append(kanikoTask.Volumes, corev1.Volume{
+				Name: "kaniko-cache",
 				VolumeSource: corev1.VolumeSource{
 					PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
 						ClaimName: e.Platform.Status.Build.PersistentVolumeClaim,
 					},
 				},
 			})
-		} else {
-			// Use an emptyDir volume to coordinate the Camel Maven build and the Kaniko image build
-			builderTask.Volumes = append(builderTask.Volumes, corev1.Volume{
-				Name: "camel-k-builder",
-				VolumeSource: corev1.VolumeSource{
-					EmptyDir: &corev1.EmptyDirVolumeSource{},
-				},
+			kanikoTask.VolumeMounts = append(kanikoTask.VolumeMounts, corev1.VolumeMount{
+				Name:      "kaniko-cache",
+				MountPath: kaniko.CacheDir,
 			})
 		}
 
@@ -158,8 +165,8 @@ func (t *builderTrait) builderTask(e *Environment) *v1alpha1.BuilderTask {
 		CamelVersion:    e.CamelCatalog.Version,
 		RuntimeVersion:  e.CamelCatalog.RuntimeVersion,
 		RuntimeProvider: e.CamelCatalog.RuntimeProvider,
-		//Sources:		 e.Integration.Spec.Sources,
-		//Resources:     e.Integration.Spec.Resources,
+		//Sources:         e.Integration.Spec.Sources,
+		//Resources:       e.Integration.Spec.Resources,
 		Dependencies: e.IntegrationKit.Spec.Dependencies,
 		//TODO: sort steps for easier read
 		Steps:      builder.StepIDsFor(builder.DefaultSteps...),
@@ -172,7 +179,7 @@ func (t *builderTrait) builderTask(e *Environment) *v1alpha1.BuilderTask {
 		task.Steps = append(task.Steps, builder.StepIDsFor(s2i.S2iSteps...)...)
 	} else if platform.SupportsKanikoPublishStrategy(e.Platform) {
 		task.Steps = append(task.Steps, builder.StepIDsFor(kaniko.KanikoSteps...)...)
-		task.BuildDir = path.Join(kaniko.BuildDir, e.IntegrationKit.Name)
+		task.BuildDir = path.Join(builderDir, e.IntegrationKit.Name)
 	}
 
 	quarkus := e.Catalog.GetTrait("quarkus").(*quarkusTrait)
@@ -197,10 +204,10 @@ func (t *builderTrait) kanikoTask(e *Environment) (*v1alpha1.KanikoTask, error)
 	env := make([]corev1.EnvVar, 0)
 	baseArgs := []string{
 		"--dockerfile=Dockerfile",
-		"--context=" + path.Join(kaniko.BuildDir, e.IntegrationKit.Name, "package", "context"),
+		"--context=" + path.Join(builderDir, e.IntegrationKit.Name, "package", "context"),
 		"--destination=" + image,
 		"--cache=" + strconv.FormatBool(e.Platform.Status.Build.IsKanikoCacheEnabled()),
-		"--cache-dir=" + path.Join(kaniko.BuildDir, "cache"),
+		"--cache-dir=" + kaniko.CacheDir,
 	}
 
 	args := make([]string, 0, len(baseArgs))