Control Plane — Deployment (June 2026)¶
Archived 2026-10-09
This June-2026 narrative page was superseded by the rewritten page at planes/control/deployment.md (design plan P1). The sixteen-service, two-namespace shape on Azure Service Bus is not current direction; the 2026 design ships one modular host over the MessagingModel port. It is kept for provenance.
Historical — archived
This page is kept for provenance. Its dates, targets and technology statements are not current direction. See the linked replacement page.
The Control Plane was to run as a fleet of independently deployable containerized .NET 10 / ASP.NET Core services on Azure, provisioned with Pulumi and delivered through the factory's own DevOps & GitOps pipelines. Each microservice was a separately versioned, separately scaled deployment unit with its own database.
Runtime Model (June 2026)¶
| Concern | Choice |
|---|---|
| Orchestration | AKS (core services & sagas) + Azure Container Apps (workers, bursty consumers). |
| Packaging | OCI containers built from ConnectSoft.MicroserviceTemplate / ConnectSoft.WorkerTemplate. |
| Messaging | Azure Service Bus (MassTransit transport). |
| Data | Azure SQL / Azure Database for PostgreSQL (per service), Azure Cache for Redis. |
| Identity | OpenIddict authorization server; workload identity via Azure AD-managed identities. |
| Ingress | ConnectSoft.ApiGatewayTemplate fronts public APIs; internal/gRPC traffic stays in-cluster. |
| IaC | Pulumi (clusters, namespaces, data stores, Service Bus, Key Vault, DNS, autoscaling). |
| Secrets | Azure Key Vault via CSI driver + workload identity. |
Deployment Topology (June 2026)¶
flowchart TB
Gateway["API Gateway<br/>(ConnectSoft.ApiGatewayTemplate)"] --> CoreNs
subgraph AKS["AKS Cluster"]
subgraph CoreNs["Namespace: control-plane-core"]
WfOrch["WorkflowOrchestrator (sagas)"]
TaskSvc["TaskAssignmentService"]
Policy["PolicyEngineService"]
Tenant["TenantService"]
Identity["IdentityService / AuthorizationService"]
end
subgraph SvcNs["Namespace: control-plane-services"]
Project["Project / Blueprint / Agent services"]
Approval["ApprovalService / AuditService"]
Cost["CostUsageService"]
Integration["IntegrationService"]
end
end
subgraph ACA["Azure Container Apps"]
Workers["Workers<br/>(timeout, assignment, projection,<br/>quota, rollup, audit-export, validation,<br/>dependency, replay)"]
end
CoreNs --> ServiceBus["Azure Service Bus"]
SvcNs --> ServiceBus
Workers --> ServiceBus
CoreNs --> SQL["Azure SQL (per service)"]
SvcNs --> PG["PostgreSQL (per service)"]
CoreNs --> Redis["Azure Cache for Redis"]
CoreNs --> KeyVault["Azure Key Vault"]
SvcNs --> KeyVault
Workers --> KeyVault
Scaling (June 2026)¶
| Workload class | Scaling signal | Strategy |
|---|---|---|
| API services | CPU + request rate | Horizontal Pod Autoscaler (AKS); min 2 replicas for HA. |
Saga core (WorkflowOrchestrator) |
Saga throughput + queue depth | Scale by partitioned correlation. |
| Workers (event-driven) | Service Bus queue depth (KEDA) | Scale-to-many on backlog, scale-to-zero when idle (ACA). |
Read models (ProcessStateService) |
Read QPS | Scale out replicas; Redis hot cache absorbs spikes. |
| Hot-path gRPC (Policy, Quota, TaskAssignment) | RPS + latency SLO | Over-provision; circuit breakers protect dependents. |
Configuration, Secrets, Health (June 2026)¶
- Layered config:
appsettings.json→ environment overrides → Key Vault secrets → runtime feature flags (FeatureFlagService), bound throughConnectSoft.Extensions.Options. - Per-environment Pulumi stacks (
dev,test,staging,prod); editions select shared vs dedicated data isolation. - Connection strings, OpenIddict keys and integration credentials in Key Vault via workload identity;
IntegrationConnectionaggregates store only aconfigRef. - Standard probes (
/health/live,/health/ready,/health/startup) aggregated byConnectSoft.HealthChecksAggregatorTemplate; probes gate rollouts.
Deployment Pipeline & Resilience (June 2026)¶
GitOps delivery through environments; zero-downtime rolling updates with expand/contract migrations; retries, circuit breakers, timeouts; Service Bus dead-letter queues preserving the full envelope; multi-zone deployment; OpenTelemetry traces keyed on traceId.
Related¶
- Replacement: Control Plane — Deployment · Deployment profiles
- Archived siblings: Microservices · Storage · Workers · Workflows · Overview