diff --git a/driver/kubernetes/factory.go b/driver/kubernetes/factory.go index b25abb899..7b21017aa 100644 --- a/driver/kubernetes/factory.go +++ b/driver/kubernetes/factory.go @@ -286,6 +286,10 @@ func (f *factory) processDriverOpts(deploymentName string, namespace string, cfg if v != "" { deploymentOpt.Qemu.Image = v } + case "buildkit-root-volume-memory": + if v != "" { + deploymentOpt.BuildKitRootVolumeMemory = v + } case "default-load": defaultLoad, err = strconv.ParseBool(v) if err != nil { diff --git a/driver/kubernetes/manifest/manifest.go b/driver/kubernetes/manifest/manifest.go index dfc51bbd9..416476e73 100644 --- a/driver/kubernetes/manifest/manifest.go +++ b/driver/kubernetes/manifest/manifest.go @@ -32,6 +32,7 @@ type DeploymentOpt struct { // files mounted at /etc/buildkitd ConfigFiles map[string][]byte + BuildKitRootVolumeMemory string Rootless bool NodeSelector map[string]string CustomAnnotations map[string]string @@ -50,6 +51,8 @@ const ( containerName = "buildkitd" AnnotationPlatform = "buildx.docker.com/platform" LabelApp = "app" + rootVolumeName = "buildkit-memory" + rootVolumePath = "/var/lib/buildkit" ) type ErrReservedAnnotationPlatform struct{} @@ -247,6 +250,26 @@ func NewDeployment(opt *DeploymentOpt) (d *appsv1.Deployment, c []*corev1.Config d.Spec.Template.Spec.Containers[0].Resources.Limits[corev1.ResourceEphemeralStorage] = limEphemeralStorage } + if opt.BuildKitRootVolumeMemory != "" { + buildKitRootVolumeMemory, err := resource.ParseQuantity(opt.BuildKitRootVolumeMemory) + if err != nil { + return nil, nil, err + } + d.Spec.Template.Spec.Volumes = append(d.Spec.Template.Spec.Volumes, corev1.Volume{ + Name: rootVolumeName, + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{ + Medium: "Memory", + SizeLimit: &buildKitRootVolumeMemory, + }, + }, + }) + d.Spec.Template.Spec.Containers[0].VolumeMounts = append(d.Spec.Template.Spec.Containers[0].VolumeMounts, corev1.VolumeMount{ + Name: rootVolumeName, + MountPath: rootVolumePath, + }) + } + return }