refactor(k8s): 🔧 Replace Pod with Deployment for runner instances
Some checks failed
Go Tests / go-tests (push) Failing after 1m2s

Changes the runner infrastructure from single Pods to Deployments for improved reliability and management:

- Adds restart policy configuration
- Improves container and volume naming conventions
- Maintains single replica to ensure one runner instance
- Sets up proper label selectors for deployment management
This commit is contained in:
Daniel Sy 2025-10-20 16:12:07 +02:00
parent 8c4da952e7
commit f92a4a7c06
Signed by: Daniel.Sy
GPG key ID: 1F39A8BBCD2EE3D3

View file

@ -29,11 +29,13 @@ import (
"edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect/config" "edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect/config"
"edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect/internal/spec" "edp.buildth.ing/DevFW-CICD/garm-provider-edge-connect/internal/spec"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
execution "github.com/cloudbase/garm-provider-common/execution/v0.1.0" execution "github.com/cloudbase/garm-provider-common/execution/v0.1.0"
"github.com/cloudbase/garm-provider-common/params" "github.com/cloudbase/garm-provider-common/params"
"k8s.io/utils/ptr"
) )
var Version = "v0.0.0-unknown" var Version = "v0.0.0-unknown"
@ -90,42 +92,54 @@ func (a *edgeConnectProvider) CreateInstance(ctx context.Context, bootstrapParam
envs := spec.GetRunnerEnvs(gitHubScopeDetails, bootstrapParams) envs := spec.GetRunnerEnvs(gitHubScopeDetails, bootstrapParams)
podv1 := corev1.Pod{ deployment := appsv1.Deployment{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "Pod", Kind: "Deployment",
APIVersion: "v1", APIVersion: "apps/v1",
}, },
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: instancename, Name: instancename,
Labels: map[string]string{"run": instancename}, Labels: map[string]string{"app": instancename},
}, },
Spec: corev1.PodSpec{ Spec: appsv1.DeploymentSpec{
Containers: []corev1.Container{ Replicas: ptr.To(int32(1)),
corev1.Container{ Selector: &metav1.LabelSelector{
Name: "mganter-test", MatchLabels: map[string]string{"app": instancename},
Image: "edp.buildth.ing/devfw-cicd/garm-act-runner:1", },
ImagePullPolicy: "Always", Template: corev1.PodTemplateSpec{
Env: envs, ObjectMeta: metav1.ObjectMeta{
VolumeMounts: []corev1.VolumeMount{ Labels: map[string]string{"app": instancename},
corev1.VolumeMount{ },
MountPath: "/runner", Spec: corev1.PodSpec{
Name: "cache-volume", RestartPolicy: corev1.RestartPolicyNever,
Containers: []corev1.Container{
{
Name: "runner",
Image: "edp.buildth.ing/devfw-cicd/garm-act-runner:1",
ImagePullPolicy: "Always",
Env: envs,
VolumeMounts: []corev1.VolumeMount{
{
Name: "runner-dir",
MountPath: "/runner",
},
},
}, },
}, },
}, Volumes: []corev1.Volume{
}, {
Volumes: []corev1.Volume{ Name: "runner-dir",
corev1.Volume{ VolumeSource: corev1.VolumeSource{
Name: "cache-volume", EmptyDir: &corev1.EmptyDirVolumeSource{},
VolumeSource: corev1.VolumeSource{ },
EmptyDir: &corev1.EmptyDirVolumeSource{}, },
}, },
}, },
}, },
}, },
} }
podjson, err := json.Marshal(podv1) manifest, err := json.Marshal(deployment)
if err != nil { if err != nil {
return params.ProviderInstance{}, err return params.ProviderInstance{}, err
} }
@ -156,7 +170,7 @@ func (a *edgeConnectProvider) CreateInstance(ctx context.Context, bootstrapParam
Name: "EU.small", Name: "EU.small",
}, },
DeploymentGenerator: "kubernetes-basic", DeploymentGenerator: "kubernetes-basic",
DeploymentManifest: string(podjson), DeploymentManifest: string(manifest),
RequiredOutboundConnections: []edgeconnect.SecurityRule{ RequiredOutboundConnections: []edgeconnect.SecurityRule{
edgeconnect.SecurityRule{ edgeconnect.SecurityRule{
PortRangeMax: 65535, PortRangeMax: 65535,