# ot-container-kit/redis-operator architecture

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

- Interactive diagram: https://gitdiagram.com/ot-container-kit/redis-operator
- Repository: https://github.com/ot-container-kit/redis-operator

## Overview

Redis Operator manages standalone, cluster, replication, and Sentinel Redis deployments on Kubernetes. Users submit Redis custom resources; the manager registers controllers, which reconcile those resources into Kubernetes workloads and services and maintain distributed Redis topology. The repo also includes a bootstrap agent for Redis/Sentinel configuration and monitoring support. The README documents failover/recovery, TLS, authentication, IP-family support, and exporter-based monitoring; source excerpts show several controller-to-Kubernetes actions, but not every implementation detail.

Main entry points: [`internal/cmd/manager/cmd.go`](https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/manager/cmd.go) (Manager), [`internal/controller/redisreplication/redisreplication_controller.go`](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redisreplication/redisreplication_controller.go) (Replication reconciler), [`internal/controller/redis/redis_controller.go`](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redis/redis_controller.go) (Standalone reconciler), [`internal/controller/rediscluster/rediscluster_controller.go`](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/rediscluster/rediscluster_controller.go) (Cluster reconciler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Operator runtime"]
  node_manager["Manager<br/>[cmd.go]"]
  node_agentcmd["Agent command<br/>[cmd.go]"]
  node_bootstrapcmd["Bootstrap command<br/>[cmd.go]"]
end

subgraph group_api["Resource APIs"]
  node_standaloneapi["Standalone API<br/>[redis_webhook.go]"]
  node_clusterapi["Cluster API"]
  node_replicationapi["Replication API"]
  node_sentinelapi["Sentinel API"]
end

subgraph group_reconcile["Redis reconciliation"]
  node_standalone["Standalone reconciler"]
  node_cluster["Cluster reconciler"]
  node_replication["Replication reconciler"]
  node_sentinel["Sentinel reconciler"]
  node_k8sutils["Kubernetes resources<br/>[services.go]"]
  node_redisclient["Redis client<br/>[client.go]"]
end

subgraph group_support["Bootstrap and monitoring"]
  node_redisconfig["Redis bootstrap config<br/>[config.go]"]
  node_sentinelconfig["Sentinel bootstrap config<br/>[config.go]"]
  node_task["Bootstrap task<br/>[task.go]"]
  node_monitoring["Metrics"]
end

node_user(("Cluster operator"))
node_kubeapi[("Kubernetes API")]
node_prometheus(("Prometheus"))

node_user -->|"submits resources"| node_kubeapi
node_manager -->|"registers"| node_standalone
node_manager -->|"registers"| node_cluster
node_manager -->|"registers"| node_replication
node_manager -->|"registers"| node_sentinel
node_manager -->|"registers metrics"| node_monitoring
node_agentcmd -->|"dispatches"| node_bootstrapcmd
node_bootstrapcmd -->|"runs"| node_task
node_task -->|"generates config"| node_redisconfig
node_task -->|"generates config"| node_sentinelconfig
node_standalone -->|"creates workloads"| node_k8sutils
node_cluster -->|"creates cluster resources"| node_k8sutils
node_replication -->|"configures replication"| node_k8sutils
node_replication -->|"connects to Redis"| node_redisclient
node_sentinel -->|"reconciles services"| node_k8sutils
node_monitoring -.->|"exposes metrics"| node_prometheus
node_standaloneapi -.->|"defines resource"| node_standalone
node_clusterapi -.->|"defines resource"| node_cluster
node_replicationapi -.->|"defines resource"| node_replication
node_sentinelapi -.->|"defines resource"| node_sentinel
node_kubeapi -.->|"watches resources"| node_standalone
node_kubeapi -.->|"watches resources"| node_cluster
node_kubeapi -.->|"watches resources"| node_replication
node_kubeapi -.->|"watches resources"| node_sentinel

click node_manager "https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/manager/cmd.go"
click node_agentcmd "https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/agent/cmd.go"
click node_bootstrapcmd "https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/agent/bootstrap/cmd.go"
click node_standaloneapi "https://github.com/ot-container-kit/redis-operator/blob/main/api/redis/v1beta2/redis_webhook.go"
click node_clusterapi "https://github.com/ot-container-kit/redis-operator/blob/main/api/rediscluster/v1beta2/rediscluster_webhook.go"
click node_replicationapi "https://github.com/ot-container-kit/redis-operator/blob/main/api/redisreplication/v1beta2/redisreplication_webhook.go"
click node_sentinelapi "https://github.com/ot-container-kit/redis-operator/blob/main/api/redissentinel/v1beta2/redissentinel_webhook.go"
click node_standalone "https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redis/redis_controller.go"
click node_cluster "https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/rediscluster/rediscluster_controller.go"
click node_replication "https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redisreplication/redisreplication_controller.go"
click node_sentinel "https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redissentinel/redissentinel_controller.go"
click node_k8sutils "https://github.com/ot-container-kit/redis-operator/blob/main/internal/k8sutils/services.go"
click node_redisclient "https://github.com/ot-container-kit/redis-operator/blob/main/internal/service/redis/client.go"
click node_redisconfig "https://github.com/ot-container-kit/redis-operator/blob/main/internal/agent/bootstrap/redis/config.go"
click node_sentinelconfig "https://github.com/ot-container-kit/redis-operator/blob/main/internal/agent/bootstrap/sentinel/config.go"
click node_task "https://github.com/ot-container-kit/redis-operator/blob/main/internal/agent/bootstrap/task.go"
click node_monitoring "https://github.com/ot-container-kit/redis-operator/tree/main/internal/monitoring"

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_manager,node_agentcmd,node_bootstrapcmd toneBlue
class node_standaloneapi,node_clusterapi,node_replicationapi,node_sentinelapi,node_kubeapi toneAmber
class node_standalone,node_cluster,node_replication,node_sentinel,node_k8sutils,node_redisclient toneMint
class node_redisconfig,node_sentinelconfig,node_task,node_monitoring toneRose
class node_user,node_prometheus toneIndigo
```

## Components

### Operator runtime

- [Manager](https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/manager/cmd.go): `internal/cmd/manager/cmd.go`
- [Agent command](https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/agent/cmd.go): `internal/cmd/agent/cmd.go`
- [Bootstrap command](https://github.com/ot-container-kit/redis-operator/blob/main/internal/cmd/agent/bootstrap/cmd.go): `internal/cmd/agent/bootstrap/cmd.go`

### Resource APIs

- [Standalone API](https://github.com/ot-container-kit/redis-operator/blob/main/api/redis/v1beta2/redis_webhook.go): `api/redis/v1beta2/redis_webhook.go`
- [Cluster API](https://github.com/ot-container-kit/redis-operator/blob/main/api/rediscluster/v1beta2/rediscluster_webhook.go): `api/rediscluster/v1beta2/rediscluster_webhook.go`
- [Replication API](https://github.com/ot-container-kit/redis-operator/blob/main/api/redisreplication/v1beta2/redisreplication_webhook.go): `api/redisreplication/v1beta2/redisreplication_webhook.go`
- [Sentinel API](https://github.com/ot-container-kit/redis-operator/blob/main/api/redissentinel/v1beta2/redissentinel_webhook.go): `api/redissentinel/v1beta2/redissentinel_webhook.go`

### Redis reconciliation

- [Standalone reconciler](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redis/redis_controller.go): `internal/controller/redis/redis_controller.go`
- [Cluster reconciler](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/rediscluster/rediscluster_controller.go): `internal/controller/rediscluster/rediscluster_controller.go`
- [Replication reconciler](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redisreplication/redisreplication_controller.go): `internal/controller/redisreplication/redisreplication_controller.go`
- [Sentinel reconciler](https://github.com/ot-container-kit/redis-operator/blob/main/internal/controller/redissentinel/redissentinel_controller.go): `internal/controller/redissentinel/redissentinel_controller.go`
- [Kubernetes resources](https://github.com/ot-container-kit/redis-operator/blob/main/internal/k8sutils/services.go): `internal/k8sutils/services.go`
- [Redis client](https://github.com/ot-container-kit/redis-operator/blob/main/internal/service/redis/client.go): `internal/service/redis/client.go`

### Bootstrap and monitoring

- [Redis bootstrap config](https://github.com/ot-container-kit/redis-operator/blob/main/internal/agent/bootstrap/redis/config.go): `internal/agent/bootstrap/redis/config.go`
- [Sentinel bootstrap config](https://github.com/ot-container-kit/redis-operator/blob/main/internal/agent/bootstrap/sentinel/config.go): `internal/agent/bootstrap/sentinel/config.go`
- [Bootstrap task](https://github.com/ot-container-kit/redis-operator/blob/main/internal/agent/bootstrap/task.go): `internal/agent/bootstrap/task.go`
- [Metrics](https://github.com/ot-container-kit/redis-operator/tree/main/internal/monitoring): `internal/monitoring`

### Other components

- **Cluster operator**
- **Kubernetes API**
- **Prometheus**

## Connections

- Cluster operator → Kubernetes API: submits resources (evidence: `README.md`)
- Manager → Standalone reconciler: registers (evidence: `internal/cmd/manager/cmd.go`)
- Manager → Cluster reconciler: registers (evidence: `internal/cmd/manager/cmd.go`)
- Manager → Replication reconciler: registers (evidence: `internal/cmd/manager/cmd.go`)
- Manager → Sentinel reconciler: registers (evidence: `internal/cmd/manager/cmd.go`)
- Manager → Metrics: registers metrics (evidence: `internal/cmd/manager/cmd.go`)
- Agent command → Bootstrap command: dispatches
- Bootstrap command → Bootstrap task: runs (evidence: `internal/cmd/agent/bootstrap/cmd.go`)
- Bootstrap task → Redis bootstrap config: generates config (evidence: `internal/agent/bootstrap/task.go`)
- Bootstrap task → Sentinel bootstrap config: generates config (evidence: `internal/agent/bootstrap/task.go`)
- Standalone reconciler → Kubernetes resources: creates workloads (evidence: `internal/controller/redis/redis_controller.go`)
- Cluster reconciler → Kubernetes resources: creates cluster resources (evidence: `internal/controller/rediscluster/rediscluster_controller.go`)
- Replication reconciler → Kubernetes resources: configures replication (evidence: `internal/controller/redisreplication/redisreplication_controller.go`)
- Replication reconciler → Redis client: connects to Redis (evidence: `internal/controller/redisreplication/redisreplication_controller.go`)
- Sentinel reconciler → Kubernetes resources: reconciles services (evidence: `internal/controller/redissentinel/redissentinel_controller.go`)
- Metrics → Prometheus: exposes metrics (evidence: `README.md`)
- Standalone API → Standalone reconciler: defines resource
- Cluster API → Cluster reconciler: defines resource
- Replication API → Replication reconciler: defines resource
- Sentinel API → Sentinel reconciler: defines resource
- Kubernetes API → Standalone reconciler: watches resources
- Kubernetes API → Cluster reconciler: watches resources
- Kubernetes API → Replication reconciler: watches resources
- Kubernetes API → Sentinel reconciler: watches resources
