mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	Merge pull request #618 from MichalAugustyn/handle-resources
feat: add resources handling to kubernetes driver
This commit is contained in:
		| @@ -125,6 +125,10 @@ Passes additional driver-specific options. Details for each driver: | ||||
|     - `image=IMAGE` - Sets the container image to be used for running buildkit. | ||||
|     - `namespace=NS` - Sets the Kubernetes namespace. Defaults to the current namespace. | ||||
|     - `replicas=N` - Sets the number of `Pod` replicas. Defaults to 1. | ||||
|     - `requests.cpu` - Sets the request CPU value specified in units of Kubernetes CPU. Example `requests.cpu=100m`, `requests.cpu=2` | ||||
|     - `requests.memory` - Sets the request memory value specified in bytes or with a valid suffix. Example `requests.memory=500Mi`, `requests.memory=4G` | ||||
|     - `limits.cpu` - Sets the limit CPU value specified in units of Kubernetes CPU. Example `limits.cpu=100m`, `limits.cpu=2` | ||||
|     - `limits.memory` - Sets the limit memory value specified in bytes or with a valid suffix. Example `limits.memory=500Mi`, `limits.memory=4G` | ||||
|     - `nodeselector="label1=value1,label2=value2"` - Sets the kv of `Pod` nodeSelector. No Defaults. Example `nodeselector=kubernetes.io/arch=arm64` | ||||
|     - `rootless=(true|false)` - Run the container as a non-root user without `securityContext.privileged`. [Using Ubuntu host kernel is recommended](https://github.com/moby/buildkit/blob/master/docs/rootless.md). Defaults to false. | ||||
|     - `loadbalance=(sticky|random)` - Load-balancing strategy. If set to "sticky", the pod is chosen using the hash of the context path. Defaults to "sticky" | ||||
|   | ||||
| @@ -85,6 +85,14 @@ func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 		case "requests.cpu": | ||||
| 			deploymentOpt.RequestsCPU = v | ||||
| 		case "requests.memory": | ||||
| 			deploymentOpt.RequestsMemory = v | ||||
| 		case "limits.cpu": | ||||
| 			deploymentOpt.LimitsCPU = v | ||||
| 		case "limits.memory": | ||||
| 			deploymentOpt.LimitsMemory = v | ||||
| 		case "rootless": | ||||
| 			deploymentOpt.Rootless, err = strconv.ParseBool(v) | ||||
| 			if err != nil { | ||||
|   | ||||
| @@ -7,18 +7,23 @@ import ( | ||||
| 	v1 "github.com/opencontainers/image-spec/specs-go/v1" | ||||
| 	appsv1 "k8s.io/api/apps/v1" | ||||
| 	corev1 "k8s.io/api/core/v1" | ||||
| 	"k8s.io/apimachinery/pkg/api/resource" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
|  | ||||
| type DeploymentOpt struct { | ||||
| 	Namespace     string | ||||
| 	Name          string | ||||
| 	Image         string | ||||
| 	Replicas      int | ||||
| 	BuildkitFlags []string | ||||
| 	Rootless      bool | ||||
| 	NodeSelector  map[string]string | ||||
| 	Platforms     []v1.Platform | ||||
| 	Namespace      string | ||||
| 	Name           string | ||||
| 	Image          string | ||||
| 	Replicas       int | ||||
| 	BuildkitFlags  []string | ||||
| 	Rootless       bool | ||||
| 	NodeSelector   map[string]string | ||||
| 	RequestsCPU    string | ||||
| 	RequestsMemory string | ||||
| 	LimitsCPU      string | ||||
| 	LimitsMemory   string | ||||
| 	Platforms      []v1.Platform | ||||
| } | ||||
|  | ||||
| const ( | ||||
| @@ -76,6 +81,10 @@ func NewDeployment(opt *DeploymentOpt) (*appsv1.Deployment, error) { | ||||
| 									}, | ||||
| 								}, | ||||
| 							}, | ||||
| 							Resources: corev1.ResourceRequirements{ | ||||
| 								Requests: corev1.ResourceList{}, | ||||
| 								Limits:   corev1.ResourceList{}, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, | ||||
| @@ -92,6 +101,38 @@ func NewDeployment(opt *DeploymentOpt) (*appsv1.Deployment, error) { | ||||
| 		d.Spec.Template.Spec.NodeSelector = opt.NodeSelector | ||||
| 	} | ||||
|  | ||||
| 	if opt.RequestsCPU != "" { | ||||
| 		reqCPU, err := resource.ParseQuantity(opt.RequestsCPU) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		d.Spec.Template.Spec.Containers[0].Resources.Requests[corev1.ResourceCPU] = reqCPU | ||||
| 	} | ||||
|  | ||||
| 	if opt.RequestsMemory != "" { | ||||
| 		reqMemory, err := resource.ParseQuantity(opt.RequestsMemory) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		d.Spec.Template.Spec.Containers[0].Resources.Requests[corev1.ResourceMemory] = reqMemory | ||||
| 	} | ||||
|  | ||||
| 	if opt.LimitsCPU != "" { | ||||
| 		limCPU, err := resource.ParseQuantity(opt.LimitsCPU) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		d.Spec.Template.Spec.Containers[0].Resources.Limits[corev1.ResourceCPU] = limCPU | ||||
| 	} | ||||
|  | ||||
| 	if opt.LimitsMemory != "" { | ||||
| 		limMemory, err := resource.ParseQuantity(opt.LimitsMemory) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		d.Spec.Template.Spec.Containers[0].Resources.Limits[corev1.ResourceMemory] = limMemory | ||||
| 	} | ||||
|  | ||||
| 	return d, nil | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tõnis Tiigi
					Tõnis Tiigi