Kubernetes Executor - support for Huge Pages resource limits
What does this MR do?
Adds the required resources
-> limits
support for Huge Pages on Kubernetes pods, specifically build, helper and service containers.
Support added in Kubernetes 1.22 - https://kubernetes.io/docs/tasks/manage-hugepages/scheduling-hugepages/
Designed to be used in conjunction with something like this in the config.toml
snippet:
[[runners]]
[runners.kubernetes]
...
# We need these so that Huge Page support works properly, probably a safe thing to have anyway
hugepages_2mi_limit = "64Mi"
memory_limit = "1Gi"
memory_request = "512Mi"
helper_hugepages_2mi_limit = "32Mi"
helper_memory_limit = "512Gi"
helper_memory_request = "256Mi"
service_hugepages_2mi_limit = "256Mi"
service_memory_limit = "1Gi"
service_memory_request = "512Mi"
[[runners.kubernetes.volumes.empty_dir]]
name = "hugepage-2mi"
mount_path = "/hugepages-2Mi"
medium = "HugePages-2Mi"
Why was this MR needed?
To expose the additional Kubernetes pod spec attributes required for Huge Pages to work.
Without this, if you try and start runner pods with an empty_dir
volume mount using the HugePages
or HugePages-2Mi
medium, you get something like:
Warning FailedMount 21s (x7 over 52s) kubelet MountVolume.SetUp failed for volume "hugepage-2mi" : medium HugePages-2Mi: hugePages storage requested, but there is no resource request for huge pages
What's the best way to test this MR?
TBD