Skip to content

Add support for Huge Pages resource limits to the Kubernetes Executor

Romuald Atchadé requested to merge k8s-add-hugepages-memory-limits into main

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"

This MR continues the work started in !3190 (closed)

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

What are the relevant issue numbers?

#28580

Edited by Romuald Atchadé

Merge request reports