From 374105c1f30ce8cc1e54079b432027ff63521463 Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Thu, 25 Mar 2021 10:23:36 +0900 Subject: [PATCH] Fix dindWithinRunnerContainer not to crash-loop runner pods (#419) Apparently #253 broke dindWithinRunnerContainer completely due to the difference in how /runner volume is set up. --- controllers/runner_controller.go | 55 ++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/controllers/runner_controller.go b/controllers/runner_controller.go index 0accd843..e5c4fda0 100644 --- a/controllers/runner_controller.go +++ b/controllers/runner_controller.go @@ -634,45 +634,58 @@ func (r *RunnerReconciler) newPod(runner v1alpha1.Runner) (corev1.Pod, error) { }...) } - if !dockerdInRunner && dockerEnabled { - runnerVolumeName := "runner" - runnerVolumeMountPath := "/runner" + // + // /runner must be generated on runtime from /runnertmp embedded in the container image. + // + // When you're NOT using dindWithinRunner=true, + // it must also be shared with the dind container as it seems like required to run docker steps. + // - pod.Spec.Volumes = []corev1.Volume{ - { + runnerVolumeName := "runner" + runnerVolumeMountPath := "/runner" + + pod.Spec.Volumes = append(pod.Spec.Volumes, + corev1.Volume{ + Name: runnerVolumeName, + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{}, + }, + }, + ) + + pod.Spec.Containers[0].VolumeMounts = append(pod.Spec.Containers[0].VolumeMounts, + corev1.VolumeMount{ + Name: runnerVolumeName, + MountPath: runnerVolumeMountPath, + }, + ) + + if !dockerdInRunner && dockerEnabled { + pod.Spec.Volumes = append(pod.Spec.Volumes, + corev1.Volume{ Name: "work", VolumeSource: corev1.VolumeSource{ EmptyDir: &corev1.EmptyDirVolumeSource{}, }, }, - { - Name: runnerVolumeName, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{}, - }, - }, - { + corev1.Volume{ Name: "certs-client", VolumeSource: corev1.VolumeSource{ EmptyDir: &corev1.EmptyDirVolumeSource{}, }, }, - } - pod.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{ - { + ) + pod.Spec.Containers[0].VolumeMounts = append(pod.Spec.Containers[0].VolumeMounts, + corev1.VolumeMount{ Name: "work", MountPath: workDir, }, - { - Name: runnerVolumeName, - MountPath: runnerVolumeMountPath, - }, - { + corev1.VolumeMount{ Name: "certs-client", MountPath: "/certs/client", ReadOnly: true, }, - } + ) pod.Spec.Containers[0].Env = append(pod.Spec.Containers[0].Env, []corev1.EnvVar{ { Name: "DOCKER_HOST",