Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit 9d86922

Browse files
authored
Merge pull request #1811 from tylerslaton/protect-acorn-components
Add CPU/Memory request/limits and PriorityClasses for system components
2 parents 4a2e878 + 9f13d2b commit 9d86922

File tree

6 files changed

+94
-2
lines changed

6 files changed

+94
-2
lines changed

pkg/imagesystem/buildertemplate.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func BuilderObjects(name, namespace, forNamespace, buildKitImage, pub, privKey,
4242
Labels: labels.ManagedByApp(namespace, name, "app", name),
4343
},
4444
Spec: corev1.PodSpec{
45+
PriorityClassName: system.AcornPriorityClass,
4546
ServiceAccountName: "acorn-builder",
4647
EnableServiceLinks: new(bool),
4748
Containers: []corev1.Container{
@@ -54,6 +55,7 @@ func BuilderObjects(name, namespace, forNamespace, buildKitImage, pub, privKey,
5455
"--addr",
5556
"unix:///run/buildkit/buildkitd.sock",
5657
},
58+
Resources: system.BuildkitdResources(),
5759
LivenessProbe: &corev1.Probe{
5860
ProbeHandler: corev1.ProbeHandler{
5961
Exec: &corev1.ExecAction{
@@ -138,6 +140,7 @@ func BuilderObjects(name, namespace, forNamespace, buildKitImage, pub, privKey,
138140
Args: []string{
139141
"build-server",
140142
},
143+
Resources: system.BuildkitdServiceResources(),
141144
ReadinessProbe: &corev1.Probe{
142145
ProbeHandler: corev1.ProbeHandler{
143146
HTTPGet: &corev1.HTTPGetAction{

pkg/imagesystem/registrytemplate.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func registryDeployment(namespace, registryImage string) []client.Object {
5858
},
5959
},
6060
Spec: corev1.PodSpec{
61+
PriorityClassName: system.AcornPriorityClass,
6162
EnableServiceLinks: new(bool),
6263
Containers: []corev1.Container{
6364
{
@@ -68,8 +69,9 @@ func registryDeployment(namespace, registryImage string) []client.Object {
6869
Value: "true",
6970
},
7071
},
71-
Image: registryImage,
72-
Command: []string{"/usr/local/bin/registry", "serve", "/etc/docker/registry/config.yml"},
72+
Resources: system.RegistryResources(),
73+
Image: registryImage,
74+
Command: []string{"/usr/local/bin/registry", "serve", "/etc/docker/registry/config.yml"},
7375
LivenessProbe: &corev1.Probe{
7476
ProbeHandler: corev1.ProbeHandler{
7577
TCPSocket: &corev1.TCPSocketAction{

pkg/install/apiserver.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ spec:
6666
- containerPort: 7443
6767
securityContext:
6868
runAsUser: 1000
69+
resources:
70+
requests:
71+
cpu: 50m
72+
memory: 100Mi
73+
priorityClassName: system-cluster-critical
6974
serviceAccountName: acorn-system
7075
tolerations:
7176
- key: node-role.kubernetes.io/control-plane

pkg/install/controller.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ spec:
3131
httpGet:
3232
path: /healthz
3333
port: 8888
34+
resources:
35+
requests:
36+
cpu: 150m
37+
memory: 200Mi
38+
priorityClassName: system-cluster-critical
3439
serviceAccountName: acorn-system
3540
tolerations:
3641
- key: node-role.kubernetes.io/control-plane

pkg/system/constants.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ const (
1313
CustomCABundleSecretVolumeName
1414
CustomCABundleDir = "/etc/ssl/certs"
1515
CustomCABundleCertName = "ca-certificates.crt"
16+
17+
AcornPriorityClass = "system-cluster-critical"
1618
)
1719

1820
var (

pkg/system/resources.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package system
2+
3+
import (
4+
"os"
5+
6+
corev1 "k8s.io/api/core/v1"
7+
"k8s.io/apimachinery/pkg/api/resource"
8+
)
9+
10+
// Values will likely need to be tweaked as we get more usage data. They are currently based
11+
// on metrics we have collected from internal use. You can override these values by setting
12+
// the corresponding environment variable.
13+
var (
14+
mi = int64(1_048_576) // 1 MiB in bytes
15+
16+
registryMemoryRequest = *resource.NewQuantity(40*mi, resource.BinarySI) // REGISTRY_MEMORY_REQUEST
17+
registryMemoryLimit = *resource.NewQuantity(80*mi, resource.BinarySI) // REGISTRY_MEMORY_LIMIT
18+
registryCPURequest = *resource.NewMilliQuantity(50, resource.DecimalSI) // REGISTRY_CPU_REQUEST
19+
20+
buildkitdMemoryRequest = *resource.NewQuantity(100*mi, resource.BinarySI) // BUILDKITD_MEMORY_REQUEST
21+
buildkitdMemoryLimit = *resource.NewQuantity(200*mi, resource.BinarySI) // BUILDKITD_MEMORY_LIMIT
22+
buildkitdCPURequest = *resource.NewMilliQuantity(50, resource.DecimalSI) // BUILDKITD_CPU_REQUEST
23+
24+
buildkitdServiceMemoryRequest = *resource.NewQuantity(70*mi, resource.BinarySI) // BUILDKITD_SERVICE_MEMORY_REQUEST
25+
buildkitdServiceMemoryLimit = *resource.NewQuantity(140*mi, resource.BinarySI) // BUILDKITD_SERVICE_MEMORY_LIMIT
26+
buildkitdServiceCPURequest = *resource.NewMilliQuantity(50, resource.DecimalSI) // BUILDKITD_SERVICE_CPU_REQUEST
27+
)
28+
29+
func RegistryResources() corev1.ResourceRequirements {
30+
return corev1.ResourceRequirements{
31+
Requests: corev1.ResourceList{
32+
corev1.ResourceMemory: envOrDefault("REGISTRY_MEMORY_REQUEST", registryMemoryRequest),
33+
corev1.ResourceCPU: envOrDefault("REGISTRY_CPU_REQUEST", registryCPURequest),
34+
},
35+
Limits: corev1.ResourceList{
36+
corev1.ResourceMemory: envOrDefault("REGISTRY_MEMORY_LIMIT", registryMemoryLimit),
37+
},
38+
}
39+
}
40+
41+
func BuildkitdResources() corev1.ResourceRequirements {
42+
return corev1.ResourceRequirements{
43+
Requests: corev1.ResourceList{
44+
corev1.ResourceMemory: envOrDefault("BUILDKITD_MEMORY_REQUEST", buildkitdMemoryRequest),
45+
corev1.ResourceCPU: envOrDefault("BUILDKITD_CPU_REQUEST", buildkitdCPURequest),
46+
},
47+
Limits: corev1.ResourceList{
48+
corev1.ResourceMemory: envOrDefault("BUILDKITD_MEMORY_LIMIT", buildkitdMemoryLimit),
49+
},
50+
}
51+
}
52+
53+
func BuildkitdServiceResources() corev1.ResourceRequirements {
54+
return corev1.ResourceRequirements{
55+
Requests: corev1.ResourceList{
56+
corev1.ResourceMemory: envOrDefault("BUILDKITD_SERVICE_MEMORY_REQUEST", buildkitdServiceMemoryRequest),
57+
corev1.ResourceCPU: envOrDefault("BUILDKITD_SERVICE_CPU_REQUEST", buildkitdServiceCPURequest),
58+
},
59+
Limits: corev1.ResourceList{
60+
corev1.ResourceMemory: envOrDefault("BUILDKITD_SERVICE_MEMORY_LIMIT", buildkitdServiceMemoryLimit),
61+
},
62+
}
63+
}
64+
65+
func envOrDefault(env string, def resource.Quantity) resource.Quantity {
66+
if env = os.Getenv(env); env == "" {
67+
return def
68+
}
69+
70+
quantity, err := resource.ParseQuantity(env)
71+
if err == nil {
72+
return quantity
73+
}
74+
return def
75+
}

0 commit comments

Comments
 (0)