Service Deployment Patterns
Purpose: For platform engineers and cluster operators, explains how cluster repositories should deploy services either directly from the community repo openCenter-gitops-base or through the private enterprise repo opencenter-gitops-enterprise (private), while keeping cluster-specific data in the cluster repo. Detailed examples live in the deployment-model-specific onboarding guides.
Index
-
#prerequisites[Prerequisites]
-
#overview[Overview]
-
#quick-comparison[Quick Comparison]
-
#repository-roles[Repository Roles]
-
#decision-rule[Decision Rule]
-
#shared-concepts[Shared Concepts]
-
#service-installation-models[Service Installation Models]
-
#choose-by-deployment-model[Choose By Deployment Model]
-
#community-deployment[Community Deployment]
-
#enterprise-deployment[Enterprise Deployment]
-
#references[References]
Prerequisites
Before using either pattern, make sure:
-
Flux is installed in the target cluster
-
You have access to update the cluster overlay repo
-
For enterprise deployments, the cluster repo also provides the required Git and registry credentials
Overview
There are two supported service deployment patterns:
-
Direct community deployment The cluster repo points Flux directly at
openCenter-gitops-base//applications/base/services/<service>. -
Enterprise deployment The cluster repo points Flux at
opencenter-gitops-enterprise//applications/enterprise/services/<service>/overlays/install, and that enterprise overlay imports the base service.
In both cases:
-
The reusable service definition starts in
openCenter-gitops-base -
The cluster repo owns cluster-specific overrides, secrets, and extra manifests
-
Flux objects in the cluster repo control what gets deployed
Operationally, platform engineers should make service configuration changes in the cluster overlay repo. They are not expected to edit openCenter-gitops-base or opencenter-gitops-enterprise directly as part of normal service operations.
Quick Comparison
| Scenario | Source repo | Flux path | Typical use |
| --- | --- | --- | --- |
| Community deployment | openCenter-gitops-base | ./applications/base/services/<service> | Public upstream-backed service deployment |
| Enterprise deployment | opencenter-gitops-enterprise | ./applications/enterprise/services/<service>/overlays/install | Private charts, private images, or enterprise-specific deltas |
Repository Roles
The three repositories involved in service deployment have different responsibilities.
| Repository | Responsibility | | --- | --- | | Community repo | Provides reusable base service definitions and shared installation content | | Enterprise repo | Imports community services and applies private chart, image, or enterprise-specific changes | | Cluster overlay repo | Owns cluster-specific activation, overrides, secrets, credentials, and custom resources |
Platform engineers should make routine service changes in the cluster overlay repo.
If a shared baseline change is needed:
-
Raise an issue in the community repo for shared community changes
-
Raise an issue in the enterprise repo for shared enterprise changes
Decision Rule
Use direct community deployment when:
-
The service can run from public upstream artifacts
-
No private chart source rewrite is required
-
No private image rewrite is required
-
No enterprise-only hardening or deltas are required
Use enterprise deployment when:
-
The service must use private chart sources
-
The service must use mirrored or private images
-
Enterprise-specific hardened values must be applied
-
Enterprise-only patches or source changes are required
Shared Concepts
Community Repo
openCenter-gitops-base provides reusable service definitions:
applications/base/services/<service>/
Enterprise Repo
opencenter-gitops-enterprise is a private repository that provides install overlays which import base services and patch them:
applications/enterprise/services/<service>/
├── components/enterprise/
├── enterprise/
└── overlays/install/
The install overlay typically imports:
github.com/opencenter-cloud/openCenter-gitops-base//applications/base/services/<service>?ref=<ref>
and then applies enterprise-specific changes.
Cluster Repo
The cluster repo owns:
-
Flux
GitRepositoryobjects for service sources -
Flux
Kustomizationobjects for installs -
Cluster-local values, secrets, custom resources, and extra manifests
Platform engineers should make service changes in the cluster overlay repo only.
Do not edit the service install content in openCenter-gitops-base or opencenter-gitops-enterprise as part of normal cluster operations.
If you need a change in the shared community or enterprise baseline, raise an issue in the corresponding repository so that change can be reviewed and implemented there.
Sensitive Data
If cluster-local content includes sensitive data, such as passwords in Helm override values or Kubernetes Secret resources, make sure that content is encrypted with SOPS before it is committed.
This applies to examples such as:
-
helm-values/override-values.yamlwhen it contains credentials or tokens -
Secretmanifests for Git access, registry access, OCI access, or application credentials -
Any other cluster-local manifest containing confidential values
For the supported encryption pattern, see ../reference/sops-configuration.md[SOPS Configuration] and manage-secrets.md[Manage Secrets with SOPS].
Reconciliation Order
For both patterns, the expected reconciliation order is:
-
Apply the source object under
services/sources/ -
Apply the service install
Kustomizationunderservices/fluxcd/ -
Apply the cluster-local overlay for service-specific values, secrets, and manifests
If the install Kustomization depends on sources or on a cluster-local overlay, keep those dependsOn relationships explicit.
Service Installation Models
Services in this platform are not all installed the same way.
| Model | What installs the service | Typical cluster overlay responsibility | Examples |
| --- | --- | --- | --- |
| Helm-based | Flux reconciles a HelmRelease from the selected source repo | cluster-local Helm overrides and supporting manifests | cert-manager, harbor, longhorn, metallb, loki |
| OLM-based | Flux applies manifests that include OperatorGroup and Subscription, and OLM installs the operator | cluster-local patches and custom resources after the operator is ready | keycloak operator stage |
| Operator custom resources applied by Kustomize | the operator is installed separately, currently through Helm for services such as Kafka and PostgreSQL operators, and the cluster overlay applies the workload custom resources as normal manifests | custom resources such as database, Kafka, topic, or user definitions plus supporting Secrets | postgresql, Kafka, KafkaTopic, KafkaUser |
Choose By Deployment Model
After selecting the source repo, choose the onboarding guide based on how the service is deployed:
| Deployment model | Use when | Guide |
| --- | --- | --- |
| Helm-based service | The base service is installed with HelmRelease and mainly customized through Helm values and supporting manifests | helm-service-onboarding.md[Helm Service Onboarding] |
| OLM-based service | The base service includes resources such as OperatorGroup and Subscription | olm-service-onboarding.md[OLM Service Onboarding] |
| Operator custom-resource workflow | The operator is installed with Helm and the cluster overlay needs to create workload custom resources such as Kafka or postgresql | operator-cr-service-onboarding.md[Operator CR Service Onboarding] |
Examples in this repo:
-
Helm-based:
cert-manager,harbor,longhorn,metallb,loki,tempo -
OLM-based:
keycloak -
Operator custom-resource workflow:
postgresql,Kafka,KafkaTopic,KafkaUser
Use this page for source selection, ownership boundaries, and cluster overlay responsibilities. Use the deployment-model-specific guides for the actual onboarding steps.
Enterprise Deployment
Use this when private charts, private images, or enterprise deltas are required.
The enterprise repo also requires cluster-specific access credentials when private Git, OCI charts, or private images are involved.
References
-
helm-service-onboarding.md[Helm Service Onboarding]
-
olm-service-onboarding.md[OLM Service Onboarding]
-
operator-cr-service-onboarding.md[Operator CR Service Onboarding]
-
../concepts/enterprise-components.md[Enterprise Components Pattern]
-
../reference/directory-structure.md[Directory Structure Reference]