11# 3-Nodes GitOps Scenario
22
3- ## Overview
3+ Deploys OpenStack on Single Node OpenShift (SNO) with one EDPM compute node using GitOps workflow. This scenario demonstrates true GitOps deployment where git commits drive cluster state changes.
44
5- A minimal OpenStack deployment scenario with 3 nodes: 1 controller, 1
6- OpenShift master, and 1 compute node. Sets up OpenShift cluster with GitOps
7- operator for future RHOSO (Red Hat OpenStack Services on OpenShift) deployment.
5+ ## GitOps Workflow
86
9- ## Architecture
7+ This scenario implements incremental GitOps deployment using a local git repository on the controller node:
108
11- - ** Controller** : DNS, load balancing, and orchestration
12- - ** OpenShift Master** : Single-node cluster running OpenStack control plane
13- - ** Compute Node** : EDPM compute node for workloads
14- - ** GitOps Operator** : Ready for OpenStack service deployment
15-
16- ## Networks
17-
18- - ** machine-net** : 192.168.32.0/24 (OpenShift cluster)
19- - ** ctlplane-net** : 192.168.122.0/24 (Control plane)
20- - ** internal-api-net** : 172.17.0.0/24 (OpenStack internal)
21- - ** storage-net** : 172.18.0.0/24 (Storage backend)
22- - ** tenant-net** : 172.19.0.0/24 (Tenant traffic)
23- - ** octavia-net** : 172.23.0.0/24 (Load balancing)
9+ ```
10+ ┌─────────────────────────────────────────────────────────────────┐
11+ │ Controller Node: ~/git/openstack-deployment │
12+ │ • Git repository with manifests │
13+ │ • git-daemon serving on port 9418 │
14+ │ • Source manifests in ~/gitops-manifests/ │
15+ └────────────────────────┬────────────────────────────────────────┘
16+ │ git:// protocol
17+ ↓
18+ ┌─────────────────────────────────────────────────────────────────┐
19+ │ ArgoCD (on OpenShift) │
20+ │ • Polls git repo every 3 minutes │
21+ │ • Detects changes and syncs automatically │
22+ │ • Applies manifests to cluster │
23+ └────────────────────────┬────────────────────────────────────────┘
24+ │ kubectl apply
25+ ↓
26+ ┌─────────────────────────────────────────────────────────────────┐
27+ │ OpenShift Cluster │
28+ │ • OpenStack operators, networking, control plane, data plane │
29+ └─────────────────────────────────────────────────────────────────┘
30+ ```
2431
25- ** Configuration:** Fixed MAC addresses assigned to all interfaces for
26- consistent networking.
32+ ## Deployment Flow
2733
28- ## Node Configuration
34+ The automation deploys OpenStack incrementally through git commits:
2935
30- ** Controller:**
36+ 1 . ** Apply ArgoCD Applications** - Create all Application CRs (watch empty git repo)
37+ 2 . ** Commit operators** → ArgoCD deploys OpenStack operator
38+ 3 . ** Commit secrets** → ArgoCD deploys secrets
39+ 4 . ** Commit network** → ArgoCD deploys networking
40+ 5 . ** Commit controlplane** → ArgoCD deploys control plane services
41+ 6 . ** Commit dataplane** → ArgoCD deploys compute node
3142
32- - ** Machine Net** : 192.168.32.3
33- - ** MAC** : fa:16:9e:81:f6:05
43+ Each git commit triggers ArgoCD to detect and deploy the next component automatically.
3444
35- ** Master0: **
45+ ## ArgoCD Applications
3646
37- - ** Machine Net** : 192.168.34.10
38- - ** Control Plane** : 192.168.122.10
39- - ** MACs** : fa:16:9e:81:f6:10 (machine), fa:16:9e:81:f6:11 (ctlplane)
47+ Five applications deployed in sync-wave order:
4048
41- ** Compute0:**
49+ ```
50+ ┌─────────────────────────────────────────────────────────────┐
51+ │ ArgoCD Applications │
52+ ├─────────────────────────────────────────────────────────────┤
53+ │ Wave 10: openstack-operators → manifests/operators/ │
54+ │ Wave 15: openstack-secrets → manifests/secrets/ │
55+ │ Wave 20: openstack-network → manifests/network/ │
56+ │ Wave 30: openstack-controlplane → manifests/controlplane/ │
57+ │ Wave 40: openstack-dataplane → manifests/dataplane/ │
58+ └─────────────────────────────────────────────────────────────┘
59+ ```
4260
43- - ** Control Plane** : 192.168.122.100
44- - ** MAC** : fa:16:9e:81:f6:20 (ctlplane)
61+ Each application references kustomize manifests that combine upstream components from ` openstack-k8s-operators/gitops ` with SNO-specific patches.
4562
4663## Usage
4764
@@ -50,31 +67,31 @@ consistent networking.
5067ansible-playbook -i inventory.yml bootstrap.yml \
5168 -e @scenarios/3-nodes-gitops/bootstrap_vars.yml \
5269 -e @~/cloud-secrets.yaml
53-
54- # Deploy using snapset images
55- ansible-playbook -i inventory.yml bootstrap.yml \
56- -e @scenarios/3-nodes-gitops/bootstrap_vars.yml \
57- -e @~/cloud-secrets.yaml \
58- -e hotstack_revive_snapshot=true
5970```
6071
61- > ** NOTE** : Snapset deployment requires snapset images to be available in your
62- > OpenStack cloud. See [ Hotstack SnapSet documentation] ( ../../docs/hotstack_snapset.md )
63- > for details.
72+ ## Testing GitOps
6473
65- ## Deployment Process
74+ To manually test GitOps reconciliation:
75+
76+ ``` bash
77+ # On controller node
78+ cd ~ /git/openstack-deployment
79+ # Edit a manifest
80+ vi manifests/operators/openstack-cr.yaml
81+ git add manifests/
82+ git commit -m " Update OpenStack configuration"
83+ # ArgoCD detects and syncs automatically (within 3 minutes)
84+ ```
6685
67- 1 . ** Infrastructure** : Heat template deploys infrastructure
68- 2 . ** OpenShift** : Single-node cluster installation
69- 3 . ** GitOps Operator** : Install and configure GitOps operator
86+ ## Architecture Details
7087
71- ## Requirements
88+ - ** Controller** : DNS, load balancing, git-daemon
89+ - ** OpenShift Master** : Single-node cluster (SNO)
90+ - ** Compute Node** : EDPM compute node
91+ - ** Storage** : TopoLVM for dynamic local storage
92+ - ** Networking** : MetalLB, NMState, fixed MAC addresses
7293
73- - ** Instances** : 3 total (1 controller, 1 master, 1 compute)
74- - ** Flavors** : hotstack.small, hotstack.large, hotstack.xxlarge
75- - ** Images** : hotstack-controller, ipxe-boot-usb
76- - ** Features** : Multi-network setup, TopoLVM storage, fixed MAC addresses
94+ ## Upstream Components
7795
78- This scenario provides the foundation for GitOps-based RHOSO deployments.
79- OpenStack service deployment would be handled separately via GitOps
80- configurations.
96+ Kustomize manifests reference components from:
97+ - https://github.com/openstack-k8s-operators/gitops
0 commit comments