# slinkyproject/slurm-bridge architecture

> Architecture diagram of the GitHub repository slinkyproject/slurm-bridge, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/slinkyproject/slurm-bridge
- Repository: https://github.com/slinkyproject/slurm-bridge

## Overview

Slurm Bridge accepts Kubernetes workloads, admits and translates them into representative Slurm jobs, then uses Slurm allocations to place their pods on Kubernetes nodes. Its scheduler plugin is the main scheduling entry point; controllers reconcile pods and nodes, while DRA profiles and inventory support device-aware resource mapping. The README documents workload types and Slurm scheduling capabilities, but sampled excerpts do not show most scheduler, sync, or runnable implementations, so those links follow documented behavior and omit uncertain internal call chains.

Main entry points: [`internal/scheduler/plugins/slurmbridge/slurmbridge.go`](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/scheduler/plugins/slurmbridge/slurmbridge.go) (Slurm scheduler plugin), [`cmd/controllers/main.go`](https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/controllers/main.go) (Controller manager), [`internal/controller/pod/pod_controller.go`](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/controller/pod/pod_controller.go) (Pod reconciler), [`internal/controller/node/node_controller.go`](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/controller/node/node_controller.go) (Node reconciler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Admission"]
  node_admission_cmd["Admission service<br/>[main.go]"]
  node_admission["Pod admission<br/>[admission.go]"]
end

subgraph group_sched["Scheduling"]
  node_scheduler_cmd["Scheduler process<br/>[main.go]"]
  node_plugin["Slurm scheduler plugin<br/>[slurmbridge.go]"]
  node_job_ir["Workload translation<br/>[slurmjobir.go]"]
  node_dra_registry["DRA profiles<br/>[registry.go]"]
  node_inventory["Node device inventory<br/>[inventory.go]"]
end

subgraph group_reconcile["Reconciliation"]
  node_controllers_cmd["Controller manager<br/>[main.go]"]
  node_pod_controller["Pod reconciler<br/>[pod_controller.go]"]
  node_node_controller["Node reconciler<br/>[node_controller.go]"]
end

subgraph group_slurm["Slurm integration"]
  node_slurm_job_runnable["Slurm job sync"]
  node_slurm_node_runnable["Slurm node sync"]
end

node_k8s_user(("Kubernetes submitter"))
node_k8s_api[("Kubernetes API")]
node_slurm_client["Slurm REST service"]
node_slurm_controller["Slurm controller"]
node_kubelet["Kubelet"]
node_native_slurm(("Slurm submitter"))

node_k8s_user -->|"submits workload"| node_k8s_api
node_admission_cmd -->|"registers webhook"| node_admission
node_admission -->|"validates and defaults"| node_k8s_api
node_k8s_api -->|"provides pending pods"| node_scheduler_cmd
node_scheduler_cmd -->|"registers plugin"| node_plugin
node_plugin -->|"translates workload"| node_job_ir
node_plugin -->|"matches device profiles"| node_dra_registry
node_plugin -->|"uses device inventory"| node_inventory
node_plugin -->|"submits representative job"| node_slurm_client
node_slurm_client -->|"requests scheduling"| node_slurm_controller
node_slurm_controller -->|"returns allocation"| node_slurm_client
node_controllers_cmd -->|"starts reconciler"| node_pod_controller
node_controllers_cmd -->|"starts reconciler"| node_node_controller
node_pod_controller -->|"reads job allocation"| node_slurm_client
node_pod_controller -->|"binds and updates pods"| node_k8s_api
node_k8s_api -->|"provides bound pods"| node_kubelet
node_node_controller -->|"reads Slurm node state"| node_slurm_client
node_node_controller -->|"updates node state"| node_k8s_api
node_controllers_cmd -->|"starts job sync"| node_slurm_job_runnable
node_controllers_cmd -->|"starts node sync"| node_slurm_node_runnable
node_native_slurm -->|"submits native jobs"| node_slurm_controller

click node_admission_cmd "https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/admission/main.go"
click node_admission "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/admission/admission.go"
click node_scheduler_cmd "https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/scheduler/main.go"
click node_plugin "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/scheduler/plugins/slurmbridge/slurmbridge.go"
click node_job_ir "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/utils/slurmjobir/slurmjobir.go"
click node_dra_registry "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/dra/registry.go"
click node_inventory "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/dra/inventory.go"
click node_controllers_cmd "https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/controllers/main.go"
click node_pod_controller "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/controller/pod/pod_controller.go"
click node_node_controller "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/controller/node/node_controller.go"
click node_slurm_job_runnable "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/runnable/slurmjob/slurmjob_runnable.go"
click node_slurm_node_runnable "https://github.com/slinkyproject/slurm-bridge/blob/main/internal/runnable/slurmnode/slurmnode_runnable.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_admission_cmd,node_admission toneBlue
class node_scheduler_cmd,node_plugin,node_job_ir,node_dra_registry,node_inventory,node_k8s_api toneAmber
class node_controllers_cmd,node_pod_controller,node_node_controller toneMint
class node_slurm_job_runnable,node_slurm_node_runnable toneRose
class node_k8s_user,node_slurm_client,node_slurm_controller,node_kubelet,node_native_slurm toneIndigo
```

## Components

### Admission

- [Admission service](https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/admission/main.go): `cmd/admission/main.go`
- [Pod admission](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/admission/admission.go): `internal/admission/admission.go`

### Scheduling

- [Scheduler process](https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/scheduler/main.go): `cmd/scheduler/main.go`
- [Slurm scheduler plugin](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/scheduler/plugins/slurmbridge/slurmbridge.go): `internal/scheduler/plugins/slurmbridge/slurmbridge.go`
- [Workload translation](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/utils/slurmjobir/slurmjobir.go): `internal/utils/slurmjobir/slurmjobir.go`
- [DRA profiles](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/dra/registry.go): `internal/dra/registry.go`
- [Node device inventory](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/dra/inventory.go): `internal/dra/inventory.go`

### Reconciliation

- [Controller manager](https://github.com/slinkyproject/slurm-bridge/blob/main/cmd/controllers/main.go): `cmd/controllers/main.go`
- [Pod reconciler](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/controller/pod/pod_controller.go): `internal/controller/pod/pod_controller.go`
- [Node reconciler](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/controller/node/node_controller.go): `internal/controller/node/node_controller.go`

### Slurm integration

- [Slurm job sync](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/runnable/slurmjob/slurmjob_runnable.go): `internal/runnable/slurmjob/slurmjob_runnable.go`
- [Slurm node sync](https://github.com/slinkyproject/slurm-bridge/blob/main/internal/runnable/slurmnode/slurmnode_runnable.go): `internal/runnable/slurmnode/slurmnode_runnable.go`

### Other components

- **Kubernetes submitter**
- **Kubernetes API**
- **Slurm REST service**
- **Slurm controller**
- **Kubelet**
- **Slurm submitter**

## Connections

- Kubernetes submitter → Kubernetes API: submits workload
- Admission service → Pod admission: registers webhook
- Pod admission → Kubernetes API: validates and defaults
- Kubernetes API → Scheduler process: provides pending pods
- Scheduler process → Slurm scheduler plugin: registers plugin
- Slurm scheduler plugin → Workload translation: translates workload
- Slurm scheduler plugin → DRA profiles: matches device profiles
- Slurm scheduler plugin → Node device inventory: uses device inventory
- Slurm scheduler plugin → Slurm REST service: submits representative job
- Slurm REST service → Slurm controller: requests scheduling
- Slurm controller → Slurm REST service: returns allocation
- Controller manager → Pod reconciler: starts reconciler
- Controller manager → Node reconciler: starts reconciler
- Pod reconciler → Slurm REST service: reads job allocation
- Pod reconciler → Kubernetes API: binds and updates pods
- Kubernetes API → Kubelet: provides bound pods
- Node reconciler → Slurm REST service: reads Slurm node state
- Node reconciler → Kubernetes API: updates node state
- Controller manager → Slurm job sync: starts job sync
- Controller manager → Slurm node sync: starts node sync
- Slurm submitter → Slurm controller: submits native jobs
