Merge pull request #3373 from tonistiigi/kubernetes-env

kubernetes: add env driver opt to kubernetes
This commit is contained in:
Akihiro Suda
2025-08-19 00:38:25 +09:00
committed by GitHub
2 changed files with 36 additions and 29 deletions
+31 -29
View File
@@ -176,38 +176,36 @@ func (f *factory) processDriverOpts(deploymentName string, namespace string, cfg
defaultLoad := false
timeout := defaultTimeout
deploymentOpt.Qemu.Image = bkimage.QemuImage
loadbalance := LoadbalanceSticky
var err error
for k, v := range cfg.DriverOpts {
switch k {
case "image":
switch {
case k == "image":
if v != "" {
deploymentOpt.Image = v
}
case "namespace":
case k == "namespace":
namespace = v
case "replicas":
case k == "replicas":
deploymentOpt.Replicas, err = strconv.Atoi(v)
if err != nil {
return nil, "", "", false, 0, err
}
case "requests.cpu":
case k == "requests.cpu":
deploymentOpt.RequestsCPU = v
case "requests.memory":
case k == "requests.memory":
deploymentOpt.RequestsMemory = v
case "requests.ephemeral-storage":
case k == "requests.ephemeral-storage":
deploymentOpt.RequestsEphemeralStorage = v
case "limits.cpu":
case k == "limits.cpu":
deploymentOpt.LimitsCPU = v
case "limits.memory":
case k == "limits.memory":
deploymentOpt.LimitsMemory = v
case "limits.ephemeral-storage":
case k == "limits.ephemeral-storage":
deploymentOpt.LimitsEphemeralStorage = v
case "rootless":
case k == "rootless":
deploymentOpt.Rootless, err = strconv.ParseBool(v)
if err != nil {
return nil, "", "", false, 0, err
@@ -215,26 +213,26 @@ func (f *factory) processDriverOpts(deploymentName string, namespace string, cfg
if _, isImage := cfg.DriverOpts["image"]; !isImage {
deploymentOpt.Image = bkimage.DefaultRootlessImage
}
case "schedulername":
case k == "schedulername":
deploymentOpt.SchedulerName = v
case "serviceaccount":
case k == "serviceaccount":
deploymentOpt.ServiceAccountName = v
case "nodeselector":
case k == "nodeselector":
deploymentOpt.NodeSelector, err = splitMultiValues(v, ",", "=")
if err != nil {
return nil, "", "", false, 0, errors.Wrap(err, "cannot parse node selector")
}
case "annotations":
case k == "annotations":
deploymentOpt.CustomAnnotations, err = splitMultiValues(v, ",", "=")
if err != nil {
return nil, "", "", false, 0, errors.Wrap(err, "cannot parse annotations")
}
case "labels":
case k == "labels":
deploymentOpt.CustomLabels, err = splitMultiValues(v, ",", "=")
if err != nil {
return nil, "", "", false, 0, errors.Wrap(err, "cannot parse labels")
}
case "tolerations":
case k == "tolerations":
ts := strings.Split(v, ";")
deploymentOpt.Tolerations = []corev1.Toleration{}
for i := range ts {
@@ -269,42 +267,46 @@ func (f *factory) processDriverOpts(deploymentName string, namespace string, cfg
deploymentOpt.Tolerations = append(deploymentOpt.Tolerations, t)
}
case "loadbalance":
case k == "loadbalance":
switch v {
case LoadbalanceSticky:
case LoadbalanceRandom:
case LoadbalanceSticky, LoadbalanceRandom:
loadbalance = v
default:
return nil, "", "", false, 0, errors.Errorf("invalid loadbalance %q", v)
}
loadbalance = v
case "qemu.install":
case k == "qemu.install":
deploymentOpt.Qemu.Install, err = strconv.ParseBool(v)
if err != nil {
return nil, "", "", false, 0, err
}
case "qemu.image":
case k == "qemu.image":
if v != "" {
deploymentOpt.Qemu.Image = v
}
case "buildkit-root-volume-memory":
case k == "buildkit-root-volume-memory":
if v != "" {
deploymentOpt.BuildKitRootVolumeMemory = v
}
case "default-load":
case k == "default-load":
defaultLoad, err = strconv.ParseBool(v)
if err != nil {
return nil, "", "", false, 0, err
}
case "timeout":
case k == "timeout":
timeout, err = time.ParseDuration(v)
if err != nil {
return nil, "", "", false, 0, errors.Wrap(err, "cannot parse timeout")
}
case strings.HasPrefix(k, "env."):
envName := strings.TrimPrefix(k, "env.")
if envName == "" {
return nil, "", "", false, 0, errors.Errorf("invalid env option %q, expecting env.FOO=bar", k)
}
deploymentOpt.Env = append(deploymentOpt.Env, corev1.EnvVar{Name: envName, Value: v})
default:
return nil, "", "", false, 0, errors.Errorf("invalid driver option %s for driver %s", k, DriverName)
}
}
return deploymentOpt, loadbalance, namespace, defaultLoad, timeout, nil
}
+5
View File
@@ -45,6 +45,7 @@ type DeploymentOpt struct {
LimitsMemory string
LimitsEphemeralStorage string
Platforms []ocispecs.Platform
Env []corev1.EnvVar // injected into main buildkitd container
}
const (
@@ -270,6 +271,10 @@ func NewDeployment(opt *DeploymentOpt) (d *appsv1.Deployment, c []*corev1.Config
})
}
if len(opt.Env) > 0 {
d.Spec.Template.Spec.Containers[0].Env = append(d.Spec.Template.Spec.Containers[0].Env, opt.Env...)
}
return
}