Skip to content

Commit 86b551a

Browse files
authored
Rename unified chart self-contained profile (#1336)
Rename unified chart self-contained profile
1 parent 73ced18 commit 86b551a

21 files changed

Lines changed: 871 additions & 404 deletions

.github/workflows/helm-chart-lint.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ on:
2525
- 'deployments/charts/**'
2626
- '.github/workflows/helm-chart-lint.yaml'
2727

28+
permissions:
29+
contents: read
30+
2831
concurrency:
2932
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
3033
cancel-in-progress: true
@@ -132,11 +135,8 @@ jobs:
132135
--set-string compute.backendName=test-backend
133136
helm lint deployments/charts/osmo \
134137
--kube-version 1.30.0 \
135-
-f deployments/charts/osmo/profiles/kind-self-contained.yaml \
136-
--set-string compute.backendName=test-backend \
137-
--set embeddedDependencies.postgresql.enabled=false \
138-
--set externalDependencies.postgresql.host=lint-postgresql \
139-
--set secrets.postgresql.existingSecret=lint-postgresql
138+
-f deployments/charts/osmo/profiles/self-contained.yaml \
139+
-f deployments/charts/osmo/tests/self-contained-lint-values.yaml
140140
else
141141
helm lint "deployments/charts/$CHART"
142142
fi
@@ -167,11 +167,11 @@ jobs:
167167
-f deployments/charts/osmo/profiles/split-plane-compute.yaml \
168168
--set-string compute.backendName=test-backend \
169169
>/dev/null
170-
helm template test-kind deployments/charts/osmo \
170+
helm template test-self-contained deployments/charts/osmo \
171171
--kube-version 1.30.0 \
172172
--api-versions postgresql.cnpg.io/v1 \
173-
-f deployments/charts/osmo/profiles/kind-self-contained.yaml \
174-
--set-string compute.backendName=test-backend \
173+
-f deployments/charts/osmo/profiles/self-contained.yaml \
174+
-f deployments/charts/osmo/examples/self-contained-environment-values.yaml \
175175
>/dev/null
176176
fi
177177

deployments/README.md

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ cd scripts
3838
./deploy-osmo-minimal.sh --provider aws
3939
```
4040

41-
For an existing kind cluster with KAI Scheduler already installed, use the
42-
unified chart. CloudNativePG remains a separate prerequisite release:
41+
For a development evaluation, use the unified chart's `quickstart.yaml`
42+
profile. Kind is the recommended local cluster; KAI Scheduler, CloudNativePG,
43+
and a default dynamic StorageClass must already be available:
4344

4445
```bash
4546
helm repo add cnpg https://cloudnative-pg.github.io/charts
@@ -55,15 +56,28 @@ helm dependency build deployments/charts/osmo
5556
helm --kube-context kind-osmo upgrade --install osmo deployments/charts/osmo \
5657
--namespace osmo \
5758
--create-namespace \
58-
--values deployments/charts/osmo/profiles/kind-self-contained.yaml \
59+
--values deployments/charts/osmo/profiles/quickstart.yaml \
5960
--set-string compute.backendName=default \
6061
--wait \
62+
--wait-for-jobs \
6163
--timeout 20m
6264
```
6365

64-
This development profile installs the control and compute planes, PostgreSQL,
65-
Valkey, and RustFS in one OSMO release and creates their required retained
66-
credentials and buckets automatically. See
66+
After the first installation creates the retained master-encryption-key Secret,
67+
remove the one-time bootstrap Job and Secret-creation permission:
68+
69+
```bash
70+
helm --kube-context kind-osmo upgrade osmo deployments/charts/osmo \
71+
--namespace osmo \
72+
--reuse-values \
73+
--set secrets.masterEncryptionKey.bootstrap.enabled=false \
74+
--wait \
75+
--timeout 20m
76+
```
77+
78+
The quick-start profile installs the control and compute planes, PostgreSQL,
79+
Valkey, and RustFS in one development OSMO release and creates its credentials
80+
and buckets automatically. See
6781
[`charts/osmo/README.md`](charts/osmo/README.md) for readiness checks,
6882
port-forwarding, hello-world validation, recovery, and split-plane deployment.
6983
The unified chart owns its listener and worker templates directly. The
@@ -128,11 +142,18 @@ For users who already have Kubernetes infrastructure and want to deploy OSMO dir
128142

129143
📖 **[charts/](charts/)** - Helm chart install guide
130144

131-
The unified kind profile creates its namespace, CloudNativePG database Cluster,
132-
Valkey and RustFS credentials, retained MEK and backend token Secrets, and
133-
object-storage buckets. Production and multi-cluster installs instead provide
134-
external endpoints and Kubernetes Secret references through the control-only
135-
and compute-only profile contracts.
145+
The unified self-contained profile is the production converged path for
146+
hosting OSMO outside a cloud environment. It owns a synchronous three-instance
147+
CloudNativePG Cluster, replicated Valkey, distributed RustFS, retained MEK and
148+
backend-token Secrets, and object-storage buckets. The Kubernetes cluster must
149+
provide KAI Scheduler, the CloudNativePG operator, a default dynamic
150+
StorageClass, a NetworkPolicy-enforcing CNI, IPv4 cluster CIDRs, and a TLS edge
151+
for the ClusterIP gateway. Separately, register an OIDC client with an identity
152+
provider reachable by users and OSMO gateway workloads. The provider may run
153+
inside or outside the cluster; its tokens must emit OSMO role assignments and
154+
bootstrap an administrator. The release creates and retains the workflow
155+
namespace and enables OAuth2, authorization, and network isolation; operators
156+
supply and test backups.
136157

137158
The legacy deployment scripts require existing infrastructure details:
138159

deployments/charts/README.md

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ helm --kube-context kind-osmo upgrade --install osmo deployments/charts/osmo \
3838
--values deployments/charts/osmo/profiles/quickstart.yaml \
3939
--set-string compute.backendName=default \
4040
--wait \
41+
--wait-for-jobs \
42+
--timeout 20m
43+
```
44+
45+
After the first installation bootstraps the retained master-encryption-key
46+
Secret, disable its one-time bootstrap Job and Secret-creation permission:
47+
48+
```bash
49+
helm --kube-context kind-osmo upgrade osmo deployments/charts/osmo \
50+
--namespace osmo \
51+
--reuse-values \
52+
--set secrets.masterEncryptionKey.bootstrap.enabled=false \
53+
--wait \
4154
--timeout 20m
4255
```
4356

@@ -51,7 +64,56 @@ See the [`osmo` quick-start guide](osmo/README.md#quick-start) for prerequisite
5164
installation, browser and CLI access, a hello-world workflow, capacity,
5265
troubleshooting, cleanup, and the profile's non-production limitations.
5366

54-
## Production Shape
67+
## Self-contained production
68+
69+
Use `profiles/self-contained.yaml` to host the control plane, compute plane,
70+
PostgreSQL, Valkey, and object storage in one production Kubernetes cluster.
71+
The cluster must provide KAI Scheduler, the CloudNativePG operator, and a
72+
default dynamic StorageClass. It must also provide a NetworkPolicy-enforcing
73+
CNI, at least four schedulable nodes, the cluster network CIDRs, and a TLS edge
74+
in front of the chart's ClusterIP gateway. The current workflow policy requires
75+
IPv4 pod and Service CIDRs. Separately, register an OIDC client with an identity
76+
provider reachable by users and OSMO gateway workloads. The provider may run
77+
inside or outside Kubernetes. Its tokens must contain an array-valued `roles`
78+
claim and assign `osmo-admin` to an initial operator. The chart creates and
79+
retains the workflow namespace and runs OAuth2 authentication plus OSMO
80+
semantic authorization behind the edge.
81+
82+
```bash
83+
kubectl create namespace osmo
84+
kubectl --namespace osmo create secret generic osmo-oauth2-proxy \
85+
--from-literal=client_secret='<oidc-client-secret>' \
86+
--from-literal=cookie_secret='<32-byte-random-cookie-secret>'
87+
helm dependency build deployments/charts/osmo
88+
cp deployments/charts/osmo/examples/self-contained-environment-values.yaml \
89+
self-contained-environment-values.yaml
90+
# Edit self-contained-environment-values.yaml for the target environment.
91+
helm upgrade --install osmo deployments/charts/osmo \
92+
--namespace osmo \
93+
--values deployments/charts/osmo/profiles/self-contained.yaml \
94+
--values self-contained-environment-values.yaml \
95+
--wait \
96+
--wait-for-jobs \
97+
--timeout 30m
98+
```
99+
100+
After the first installation bootstraps the retained master-encryption-key
101+
Secret, persist `secrets.masterEncryptionKey.bootstrap.enabled: false` in the
102+
environment overlay and apply it. The immediate Helm cleanup transaction is:
103+
104+
```bash
105+
helm upgrade osmo deployments/charts/osmo \
106+
--namespace osmo \
107+
--reuse-values \
108+
--set secrets.masterEncryptionKey.bootstrap.enabled=false \
109+
--wait \
110+
--timeout 30m
111+
```
112+
113+
See the [`osmo` self-contained guide](osmo/README.md#self-contained-production)
114+
for availability, storage, identity, network-isolation, backup, and edge details.
115+
116+
## Other production shapes
55117

56118
For production, use environment-specific unified chart values or the legacy
57119
chart interfaces required by an existing deployment:
@@ -65,5 +127,5 @@ chart interfaces required by an existing deployment:
65127
and compute clusters. Configure the unified chart's
66128
`secrets.backendApiTokens.credentials[].existingSecret.name`
67129
and `compute.authentication.existingSecret` to consume the matching Secret.
68-
Managed backend-token and MEK generation is intended only for single-cluster
69-
development where both planes consume namespace-local Secrets.
130+
The self-contained profile can generate these namespace-local Secrets when
131+
both planes run in one cluster.

0 commit comments

Comments
 (0)