You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/patterns/hybrid-mesh-platform/getting-started.md
+18-14Lines changed: 18 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -91,7 +91,7 @@ Use cluster names **`hub`**, **`east`**, and **`west`**. Namespace **`stackrox`*
91
91
| Operator / feature | Requirement |
92
92
| --- | --- |
93
93
|**OpenShift AI (RHOAI)**| Required for MaaS / vLLM inference. Needs Node Feature Discovery and GPU operator **only** if you enable GPU-accelerated models. CPU-based inference (Qwen3 / Granite on CPU) works without GPU. |
94
-
|**GPU (optional)**| NVIDIA or AMD GPU node for accelerated vLLM. Without GPU, enable `modelServing.cpuOnly: true` in `values-hub.yaml`. |
94
+
|**GPU (optional)**| NVIDIA or AMD GPU node for accelerated vLLM. Without GPU, enable `modelServing.cpuOnly: true` in `charts/region/hub/values.yaml`. |
95
95
|**OpenShift Lightspeed**| Requires `OLSConfig` CRD and an OpenAI-compatible endpoint (MaaS on hub or external). |
96
96
|**Vault**| HashiCorp Vault is deployed by the pattern operator as the secrets backend. |
97
97
@@ -127,16 +127,19 @@ See [Cluster sizing](cluster-sizing) for metadata-driven minimum and recommended
127
127
## Repository layout
128
128
129
129
```
130
-
charts/all/ → component Helm charts (hub and spoke apps)
131
-
values-global.yaml → pattern name and shared Git URL
Spokes **pull** their `clusterGroup` from Git via ACM labels (`clusterGroup=east` / `clusterGroup=west`) — no hub-push ApplicationSet to spoke Argo CD.
140
+
The pattern uses a **dual GitOps strategy**:
141
+
-**PUSH** — hub `ApplicationSet` (`fleet-spoke-push`) deploys `charts/all/spoke-meta-push` to each spoke cluster via ACM placement
142
+
-**PULL** — each spoke's local Argo CD syncs its own `charts/region/east/` or `charts/region/west/` from Git autonomously
140
143
141
144
## Step 1: Fork the repository
142
145
@@ -186,7 +189,7 @@ From the hub cluster (logged in with `oc`):
186
189
./pattern.sh install
187
190
```
188
191
189
-
The Pattern operator (or utility container) deploys the root `clustergroup` Application on the hub. ACM `managedClusterGroups` in `values-hub.yaml` register east and west spokes once they join the fleet.
192
+
The Pattern operator (or utility container) deploys the root `clustergroup` Application on the hub. ACM `managedClusterGroups` in `charts/region/hub/values.yaml` register east and west spokes once they join the fleet.
190
193
191
194
## Step 4: Import managed clusters in ACM
192
195
@@ -271,12 +274,13 @@ Associates Argo CD (`openshift-gitops`) with clusters chosen by placement — br
271
274
272
275
### ApplicationSet with clusterDecisionResource
273
276
274
-
For each cluster in the PlacementDecision, the ApplicationSet creates an Application that:
277
+
For each cluster in the PlacementDecision, the hub ApplicationSet (`fleet-spoke-push`) creates an Application that:
275
278
276
-
- Uses repository path `east/` or `west/` (from `{{name}}`)
279
+
- Uses repository path `charts/all/spoke-meta-push` (the PUSH meta chart) deployed to the spoke cluster
280
+
- The spoke's local Argo CD then pulls its own `charts/region/east/` or `charts/region/west/` from Git autonomously
277
281
- Deploys to remote cluster `{{name}}` via hub-stored cluster credentials
278
282
279
-
Adding a spoke with correct labels and a new folder (for example `south/`) automatically generates a new Application when the Placement matches.
283
+
Adding a spoke with correct labels and a new `charts/region/south/` folder automatically generates a new Application when the Placement matches.
280
284
281
285
### Troubleshooting: no spoke Applications
282
286
@@ -288,7 +292,7 @@ Adding a spoke with correct labels and a new folder (for example `south/`) autom
288
292
| PlacementDecision | Decisions list `east`, `west`|
289
293
| GitOpsCluster |`hub-spoke-gitops` reconciled; clusters visible in Argo CD UI |
290
294
| RBAC | Role `applicationset-placementdecisions` for ApplicationSet controller |
291
-
| Spoke charts |`east/` and `west/` valid Helm charts with `Chart.yaml`|
295
+
| Spoke charts |`charts/region/east/` and `charts/region/west/` valid Helm charts with `Chart.yaml`|
Each directory (`east/`, `west/`) is an independent Helm chart with its own `Chart.yaml`, `values.yaml`, and `templates/`. The hub uses the repository root (`.`) as its chart.
26
+
Each `charts/region/<role>/` directory is an independent Helm chart with its own `Chart.yaml` and `values.yaml`. Component charts under `charts/all/` are referenced by hub and spoke clusterGroup Applications.
|`charts/all/`| Shared component charts referenced by all clusters|
35
37
36
-
The ACM ApplicationSet (`components/acm-hub-spoke`) uses a **`clusterDecisionResource`** generator:
38
+
The pattern uses **dual GitOps**. The hub ApplicationSet (`charts/all/acm-hub-spoke`) uses a `clusterDecisionResource` generator for the PUSH leg:
37
39
38
40
```yaml
39
-
#Conceptual — see pattern repo for full template
41
+
#Hub ApplicationSet (fleet-spoke-push) — actual path in the pattern repo
40
42
source:
41
-
path: '{{name}}'# east/ or west/
43
+
path: charts/all/spoke-meta-push# PUSH: meta chart deploys to spoke cluster
42
44
destination:
43
-
name: '{{name}}'# remote cluster via Argo CD secret
45
+
name: '{{name}}'# east or west, via hub Argo CD cluster secret
44
46
```
45
47
46
-
Each spoke chart generates **child Application CRs** that the spoke's own Argo CD syncs locally — the hub does not apply spoke workloads directly.
48
+
The spoke's local Argo CD then autonomously **PULL**s from `charts/region/east/` or `charts/region/west/` — the hub does not apply spoke workloads directly.
47
49
48
50
## Adding a new spoke cluster
49
51
50
52
1. Provision OpenShift and import the cluster into ACM.
7. Confirm Placement selects the cluster and ApplicationSet creates `south-spoke-components`.
57
59
58
60
## Minimal profiles
@@ -69,7 +71,7 @@ Disables heavy subscriptions while preserving GitOps bootstrap and ApplicationSe
69
71
70
72
| Area | Customization |
71
73
| --- | --- |
72
-
| Regions | Add spokes beyond east/west — new folder + ACM labels + hub gateway weights |
74
+
| Regions | Add spokes beyond east/west — new `charts/region/<name>/` folder + ACM labels + hub gateway weights |
73
75
| Gateway weights | `gateway.weights.east` / `west` for canary or active-active front traffic |
74
76
| API affinity | `gateway.apiWeights` when Socket.IO can span spokes |
75
77
| Circuit breaking | Tune `gateway.circuitBreaking` per environment (see [Hub Gateway](hub-gateway)) |
@@ -91,7 +93,7 @@ The current spokes require full OpenShift clusters (3 workers, cloud or bare-met
91
93
92
94
1. Provision a RHEL device with MicroShift installed (`rpm-ostree install microshift`).
93
95
2. Import the device into ACM as a `ManagedCluster` with labels `region=far-edge`.
94
-
3. Add a new folder (for example `far-edge/`) in the pattern repo with a lightweight values profile — omit Kafka 3-replica and DevSpaces; keep MQTT bridge, Camel K lite, and Skupper.
96
+
3. Add `charts/region/far-edge/` in the pattern repo with a lightweight values profile — omit Kafka 3-replica and DevSpaces; keep MQTT bridge, Camel K lite, and Skupper.
95
97
4. Register a Skupper `AccessToken` on the device (same outbound-only mTLS as cloud spokes).
96
98
5. Hub Grafana aggregates metrics from the far-edge site the same way it does from east/west.
0 commit comments