Skip to content

arc: honour a values file's required node exclusions in placement with burst and in the measured ceiling #145

Open

Description

@Mearman

A values file can keep runner pods off some nodes with a required node affinity, for example template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution: {nodeSelectorTerms: [{matchExpressions: [{key: node-role.kubernetes.io/control-plane, operator: DoesNotExist}]}]} to keep CI jobs off control-plane nodes. The role does not know about it in two places.

arc_measured_max_runners counts every node matching the eligibility label and the profile's node_selector, so a node the required term excludes still adds to maxRunners. The scale set then creates runner pods that can only sit Pending until a slot on another node frees.

With burst set, arc_runner_placement writes its own requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms (eligible node or burst node), and the overlay's recursive combine replaces the values file's list, so the exclusion is dropped without a message. This is the required-term twin of #143.

Repro for the first: an eligible node labelled node-role.kubernetes.io/control-plane=true with room for one runner, and the values file above. The measured ceiling includes that node's runner.

A profile key such as node_exclusions: [<label key>, ...] (or required match expressions in general) that arc_runner_placement adds to every required term it writes, and that arc_measured_max_runners applies when it picks the nodes it counts, would cover both.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions