Sets node critical priority for codex and geth nodes

This commit is contained in:
benbierens 2023-11-23 14:50:54 +01:00
parent ff52e8e841
commit 3761e236a3
No known key found for this signature in database
GPG Key ID: FE44815D96D0A1AA
5 changed files with 23 additions and 2 deletions

View File

@ -335,6 +335,7 @@ namespace KubernetesWorkflow
}, },
Spec = new V1PodSpec Spec = new V1PodSpec
{ {
PriorityClassName = GetPriorityClassName(containerRecipes),
Affinity = CreatePodAffinity(containerRecipes), Affinity = CreatePodAffinity(containerRecipes),
NodeSelector = CreateNodeSelector(location), NodeSelector = CreateNodeSelector(location),
Containers = CreateDeploymentContainers(containerRecipes), Containers = CreateDeploymentContainers(containerRecipes),
@ -410,6 +411,15 @@ namespace KubernetesWorkflow
return l.NodeLabel; return l.NodeLabel;
} }
private string GetPriorityClassName(ContainerRecipe[] containerRecipes)
{
if (containerRecipes.Any(c => c.SetCriticalPriority))
{
return "system-node-critical";
}
return null!;
}
private IDictionary<string, string> GetSelector(ContainerRecipe[] containerRecipes) private IDictionary<string, string> GetSelector(ContainerRecipe[] containerRecipes)
{ {
return containerRecipes.First().PodLabels.GetLabels(); return containerRecipes.First().PodLabels.GetLabels();

View File

@ -2,13 +2,14 @@
{ {
public class ContainerRecipe public class ContainerRecipe
{ {
public ContainerRecipe(int number, string? nameOverride, string image, ContainerResources resources, SchedulingAffinity schedulingAffinity, Port[] exposedPorts, Port[] internalPorts, EnvVar[] envVars, PodLabels podLabels, PodAnnotations podAnnotations, VolumeMount[] volumes, ContainerAdditionals additionals) public ContainerRecipe(int number, string? nameOverride, string image, ContainerResources resources, SchedulingAffinity schedulingAffinity, bool setCriticalPriority, Port[] exposedPorts, Port[] internalPorts, EnvVar[] envVars, PodLabels podLabels, PodAnnotations podAnnotations, VolumeMount[] volumes, ContainerAdditionals additionals)
{ {
Number = number; Number = number;
NameOverride = nameOverride; NameOverride = nameOverride;
Image = image; Image = image;
Resources = resources; Resources = resources;
SchedulingAffinity = schedulingAffinity; SchedulingAffinity = schedulingAffinity;
SetCriticalPriority = setCriticalPriority;
ExposedPorts = exposedPorts; ExposedPorts = exposedPorts;
InternalPorts = internalPorts; InternalPorts = internalPorts;
EnvVars = envVars; EnvVars = envVars;
@ -34,6 +35,7 @@
public string? NameOverride { get; } public string? NameOverride { get; }
public ContainerResources Resources { get; } public ContainerResources Resources { get; }
public SchedulingAffinity SchedulingAffinity { get; } public SchedulingAffinity SchedulingAffinity { get; }
public bool SetCriticalPriority { get; }
public string Image { get; } public string Image { get; }
public Port[] ExposedPorts { get; } public Port[] ExposedPorts { get; }
public Port[] InternalPorts { get; } public Port[] InternalPorts { get; }

View File

@ -14,6 +14,7 @@ namespace KubernetesWorkflow.Recipe
private RecipeComponentFactory factory = null!; private RecipeComponentFactory factory = null!;
private ContainerResources resources = new ContainerResources(); private ContainerResources resources = new ContainerResources();
private SchedulingAffinity schedulingAffinity = new SchedulingAffinity(); private SchedulingAffinity schedulingAffinity = new SchedulingAffinity();
private bool setCriticalPriority;
public ContainerRecipe CreateRecipe(int index, int containerNumber, RecipeComponentFactory factory, StartupConfig config) public ContainerRecipe CreateRecipe(int index, int containerNumber, RecipeComponentFactory factory, StartupConfig config)
{ {
@ -23,7 +24,7 @@ namespace KubernetesWorkflow.Recipe
Initialize(config); Initialize(config);
var recipe = new ContainerRecipe(containerNumber, config.NameOverride, Image, resources, schedulingAffinity, var recipe = new ContainerRecipe(containerNumber, config.NameOverride, Image, resources, schedulingAffinity, setCriticalPriority,
exposedPorts.ToArray(), exposedPorts.ToArray(),
internalPorts.ToArray(), internalPorts.ToArray(),
envVars.ToArray(), envVars.ToArray(),
@ -42,6 +43,7 @@ namespace KubernetesWorkflow.Recipe
this.factory = null!; this.factory = null!;
resources = new ContainerResources(); resources = new ContainerResources();
schedulingAffinity = new SchedulingAffinity(); schedulingAffinity = new SchedulingAffinity();
setCriticalPriority = false;
return recipe; return recipe;
} }
@ -128,6 +130,11 @@ namespace KubernetesWorkflow.Recipe
schedulingAffinity = new SchedulingAffinity(notIn); schedulingAffinity = new SchedulingAffinity(notIn);
} }
protected void SetSystemCriticalPriority()
{
setCriticalPriority = true;
}
// Disabled following a possible bug in the k8s cluster that will throttle containers much more than is // Disabled following a possible bug in the k8s cluster that will throttle containers much more than is
// called for if they have resource limits defined. // called for if they have resource limits defined.
//protected void SetResourceLimits(int milliCPUs, ByteSize memory) //protected void SetResourceLimits(int milliCPUs, ByteSize memory)

View File

@ -30,6 +30,7 @@ namespace CodexPlugin
//SetResourceLimits(milliCPUs: 4000, memory: 12.GB()); //SetResourceLimits(milliCPUs: 4000, memory: 12.GB());
SetSchedulingAffinity(notIn: "tests-runners"); SetSchedulingAffinity(notIn: "tests-runners");
SetSystemCriticalPriority();
var config = startupConfig.Get<CodexStartupConfig>(); var config = startupConfig.Get<CodexStartupConfig>();

View File

@ -25,6 +25,7 @@ namespace GethPlugin
var args = CreateArgs(config); var args = CreateArgs(config);
SetSchedulingAffinity(notIn: "tests-runners"); SetSchedulingAffinity(notIn: "tests-runners");
SetSystemCriticalPriority();
AddEnvVar("GETH_ARGS", args); AddEnvVar("GETH_ARGS", args);
} }