# openshift/managed-upgrade-operator architecture

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

- Interactive diagram: https://gitdiagram.com/openshift/managed-upgrade-operator
- Repository: https://github.com/openshift/managed-upgrade-operator

## Overview

Managed Upgrade Operator orchestrates OpenShift in-place upgrades; OpenShift itself performs the upgrade. The documented workflow begins when an UpgradeConfig is watched, checks upgrade history and readiness, then runs ordered steps and records progress in status history. Supporting branches manage provider-supplied configuration, node draining and worker progress, health checks, capacity scaling, Alertmanager silences, notifications, and metrics. Some step wiring is inferred from documented capabilities and package roles; unsampled implementation details are not expanded.

Main entry points: [`pkg/upgraders/upgrader.go`](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/upgrader.go) (Cluster upgrader), [`controllers/upgradeconfig/upgradeconfig_controller.go`](https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/upgradeconfig/upgradeconfig_controller.go) (UpgradeConfig controller), [`pkg/eventmanager/eventmanager.go`](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/eventmanager/eventmanager.go) (Event manager), [`api/v1alpha1/upgradeconfig_types.go`](https://github.com/openshift/managed-upgrade-operator/blob/master/api/v1alpha1/upgradeconfig_types.go) (UpgradeConfig)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Upgrade control"]
  node_upgradeconfig["UpgradeConfig"]
  node_upgrade_controller["UpgradeConfig controller"]
  node_uc_manager["UpgradeConfig manager"]
  node_spec_provider["Spec provider<br/>[specprovider.go]"]
  node_validation["Upgrade validation<br/>[validation.go]"]
  node_scheduler["Upgrade scheduler<br/>[scheduler.go]"]
end

subgraph group_steps["Upgrade steps"]
  node_upgrader["Cluster upgrader<br/>[upgrader.go]"]
  node_healthchecks["Health checks<br/>[healthcheckstep.go]"]
  node_availability["Availability checks"]
  node_maintenance_step["Maintenance step<br/>[maintenancestep.go]"]
  node_scaling["Worker scaling<br/>[scalerstep.go]"]
end

subgraph group_node["Node operations"]
  node_machine_scaler["MachineSet scaler"]
  node_node_controller["Node keeper controller"]
  node_machinery["Upgrade machinery<br/>[machinery.go]"]
  node_drain["Node drain strategies"]
  node_mcp_controller["MachineConfigPool controller"]
end

subgraph group_integrations["External integrations"]
  node_maintenance["Alert silences"]
  node_alertmanager["Alertmanager"]
  node_openshift["OpenShift cluster"]
  node_notifier["Upgrade notifications<br/>[notifier.go]"]
end

subgraph group_telemetry["Status and telemetry"]
  node_event_manager["Event manager<br/>[eventmanager.go]"]
  node_metrics["Metrics<br/>[metrics.go]"]
end

node_admin(("Cluster operator"))

node_admin -->|"creates or edits"| node_upgradeconfig
node_upgradeconfig -->|"watched by"| node_upgrade_controller
node_upgrade_controller -->|"refreshes config"| node_uc_manager
node_uc_manager -->|"gets specs"| node_spec_provider
node_upgrade_controller -->|"validates"| node_validation
node_upgrade_controller -->|"checks readiness"| node_scheduler
node_upgrade_controller -->|"starts or maintains"| node_upgrader
node_upgrader -->|"runs steps"| node_healthchecks
node_upgrader -->|"runs checks"| node_availability
node_upgrader -->|"runs steps"| node_maintenance_step
node_maintenance_step -->|"manages silences"| node_maintenance
node_maintenance -->|"creates and updates"| node_alertmanager
node_upgrader -->|"runs steps"| node_scaling
node_scaling -->|"scales capacity"| node_machine_scaler
node_upgrader -->|"invokes cluster upgrade"| node_openshift
node_node_controller -->|"checks upgrade state"| node_machinery
node_node_controller -->|"executes drain"| node_drain
node_mcp_controller -->|"reads upgrade history"| node_uc_manager
node_mcp_controller -->|"writes progress"| node_upgradeconfig
node_upgrade_controller -->|"updates status history"| node_upgradeconfig
node_upgrader -->|"reports events"| node_event_manager
node_event_manager -->|"reads config"| node_uc_manager
node_event_manager -->|"checks sent state"| node_metrics
node_event_manager -->|"sends notifications"| node_notifier

click node_upgradeconfig "https://github.com/openshift/managed-upgrade-operator/blob/master/api/v1alpha1/upgradeconfig_types.go"
click node_upgrade_controller "https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/upgradeconfig/upgradeconfig_controller.go"
click node_uc_manager "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgradeconfigmanager/upgradeconfigmanager.go"
click node_spec_provider "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/specprovider/specprovider.go"
click node_validation "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/validation/validation.go"
click node_scheduler "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/scheduler/scheduler.go"
click node_upgrader "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/upgrader.go"
click node_healthchecks "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/healthcheckstep.go"
click node_availability "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/availabilitychecks/availabilitychecks.go"
click node_maintenance_step "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/maintenancestep.go"
click node_maintenance "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/maintenance/alertmanagerMaintenance.go"
click node_scaling "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/scalerstep.go"
click node_machine_scaler "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/scaler/machineSetScaler.go"
click node_node_controller "https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/nodekeeper/nodekeeper_controller.go"
click node_machinery "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/machinery/machinery.go"
click node_drain "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/drain/nodeDrainStrategy.go"
click node_mcp_controller "https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/machineconfigpool/machineconfigpool_controller.go"
click node_notifier "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/notifier/notifier.go"
click node_event_manager "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/eventmanager/eventmanager.go"
click node_metrics "https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/metrics/metrics.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_upgradeconfig,node_upgrade_controller,node_uc_manager,node_spec_provider,node_validation,node_scheduler toneBlue
class node_upgrader,node_healthchecks,node_availability,node_maintenance_step,node_scaling toneAmber
class node_machine_scaler,node_node_controller,node_machinery,node_drain,node_mcp_controller toneMint
class node_maintenance,node_alertmanager,node_openshift,node_notifier toneRose
class node_event_manager,node_metrics,node_admin toneIndigo
```

## Components

### Upgrade control

- [UpgradeConfig](https://github.com/openshift/managed-upgrade-operator/blob/master/api/v1alpha1/upgradeconfig_types.go): `api/v1alpha1/upgradeconfig_types.go`
- [UpgradeConfig controller](https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/upgradeconfig/upgradeconfig_controller.go): `controllers/upgradeconfig/upgradeconfig_controller.go`
- [UpgradeConfig manager](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgradeconfigmanager/upgradeconfigmanager.go): `pkg/upgradeconfigmanager/upgradeconfigmanager.go`
- [Spec provider](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/specprovider/specprovider.go): `pkg/specprovider/specprovider.go`
- [Upgrade validation](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/validation/validation.go): `pkg/validation/validation.go`
- [Upgrade scheduler](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/scheduler/scheduler.go): `pkg/scheduler/scheduler.go`

### Upgrade steps

- [Cluster upgrader](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/upgrader.go): `pkg/upgraders/upgrader.go`
- [Health checks](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/healthcheckstep.go): `pkg/upgraders/healthcheckstep.go`
- [Availability checks](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/availabilitychecks/availabilitychecks.go): `pkg/availabilitychecks/availabilitychecks.go`
- [Maintenance step](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/maintenancestep.go): `pkg/upgraders/maintenancestep.go`
- [Worker scaling](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/upgraders/scalerstep.go): `pkg/upgraders/scalerstep.go`

### Node operations

- [MachineSet scaler](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/scaler/machineSetScaler.go): `pkg/scaler/machineSetScaler.go`
- [Node keeper controller](https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/nodekeeper/nodekeeper_controller.go): `controllers/nodekeeper/nodekeeper_controller.go`
- [Upgrade machinery](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/machinery/machinery.go): `pkg/machinery/machinery.go`
- [Node drain strategies](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/drain/nodeDrainStrategy.go): `pkg/drain/nodeDrainStrategy.go`
- [MachineConfigPool controller](https://github.com/openshift/managed-upgrade-operator/blob/master/controllers/machineconfigpool/machineconfigpool_controller.go): `controllers/machineconfigpool/machineconfigpool_controller.go`

### External integrations

- [Alert silences](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/maintenance/alertmanagerMaintenance.go): `pkg/maintenance/alertmanagerMaintenance.go`
- **Alertmanager**
- **OpenShift cluster**
- [Upgrade notifications](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/notifier/notifier.go): `pkg/notifier/notifier.go`

### Status and telemetry

- [Event manager](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/eventmanager/eventmanager.go): `pkg/eventmanager/eventmanager.go`
- [Metrics](https://github.com/openshift/managed-upgrade-operator/blob/master/pkg/metrics/metrics.go): `pkg/metrics/metrics.go`

### Other components

- **Cluster operator**

## Connections

- Cluster operator → UpgradeConfig: creates or edits
- UpgradeConfig → UpgradeConfig controller: watched by
- UpgradeConfig controller → UpgradeConfig manager: refreshes config
- UpgradeConfig manager → Spec provider: gets specs
- UpgradeConfig controller → Upgrade validation: validates
- UpgradeConfig controller → Upgrade scheduler: checks readiness
- UpgradeConfig controller → Cluster upgrader: starts or maintains
- Cluster upgrader → Health checks: runs steps
- Cluster upgrader → Availability checks: runs checks
- Cluster upgrader → Maintenance step: runs steps
- Maintenance step → Alert silences: manages silences
- Alert silences → Alertmanager: creates and updates
- Cluster upgrader → Worker scaling: runs steps
- Worker scaling → MachineSet scaler: scales capacity
- Cluster upgrader → OpenShift cluster: invokes cluster upgrade
- Node keeper controller → Upgrade machinery: checks upgrade state
- Node keeper controller → Node drain strategies: executes drain
- MachineConfigPool controller → UpgradeConfig manager: reads upgrade history
- MachineConfigPool controller → UpgradeConfig: writes progress
- UpgradeConfig controller → UpgradeConfig: updates status history
- Cluster upgrader → Event manager: reports events
- Event manager → UpgradeConfig manager: reads config
- Event manager → Metrics: checks sent state
- Event manager → Upgrade notifications: sends notifications
