Skip to content

Commit fd94133

Browse files
committed
3-nodes-gitops scenario
- Add ArgoCD Applications for OpenStack deployment - Create Kustomize manifests with SNO-specific patches - Add GitOps workflow test stage - Update documentation for new GitOps architecture Assisted-By: Claude (claude-4.5-sonnet) Signed-off-by: Harald Jensås <hjensas@redhat.com>
1 parent 66c4c0c commit fd94133

30 files changed

Lines changed: 929 additions & 52 deletions

scenarios/3-nodes-gitops/README.md

Lines changed: 69 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,64 @@
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.
5067
ansible-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
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
apiVersion: argoproj.io/v1alpha1
3+
kind: Application
4+
metadata:
5+
name: openstack-controlplane
6+
namespace: openshift-gitops
7+
annotations:
8+
argocd.argoproj.io/sync-wave: "30"
9+
spec:
10+
destination:
11+
server: https://kubernetes.default.svc
12+
project: default
13+
source:
14+
repoURL: git://controller-0.openstack.lab/openstack-deployment
15+
targetRevision: main
16+
path: manifests/controlplane
17+
syncPolicy:
18+
automated:
19+
prune: true
20+
selfHeal: true
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
apiVersion: argoproj.io/v1alpha1
3+
kind: Application
4+
metadata:
5+
name: openstack-dataplane
6+
namespace: openshift-gitops
7+
annotations:
8+
argocd.argoproj.io/sync-wave: "40"
9+
spec:
10+
destination:
11+
server: https://kubernetes.default.svc
12+
project: default
13+
source:
14+
repoURL: git://controller-0.openstack.lab/openstack-deployment
15+
targetRevision: main
16+
path: manifests/dataplane
17+
syncPolicy:
18+
automated:
19+
prune: true
20+
selfHeal: true
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
apiVersion: argoproj.io/v1alpha1
3+
kind: Application
4+
metadata:
5+
name: openstack-network
6+
namespace: openshift-gitops
7+
annotations:
8+
argocd.argoproj.io/sync-wave: "20"
9+
spec:
10+
destination:
11+
server: https://kubernetes.default.svc
12+
project: default
13+
source:
14+
repoURL: git://controller-0.openstack.lab/openstack-deployment
15+
targetRevision: main
16+
path: manifests/network
17+
syncPolicy:
18+
automated:
19+
prune: true
20+
selfHeal: true
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
apiVersion: argoproj.io/v1alpha1
3+
kind: Application
4+
metadata:
5+
name: openstack-operators
6+
namespace: openshift-gitops
7+
annotations:
8+
argocd.argoproj.io/sync-wave: "10"
9+
spec:
10+
destination:
11+
server: https://kubernetes.default.svc
12+
project: default
13+
source:
14+
repoURL: git://controller-0.openstack.lab/openstack-deployment
15+
targetRevision: main
16+
path: manifests/operators
17+
syncPolicy:
18+
automated:
19+
prune: true
20+
selfHeal: true
21+
syncOptions:
22+
- CreateNamespace=true
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
apiVersion: argoproj.io/v1alpha1
3+
kind: Application
4+
metadata:
5+
name: openstack-secrets
6+
namespace: openshift-gitops
7+
annotations:
8+
argocd.argoproj.io/sync-wave: "15"
9+
spec:
10+
destination:
11+
server: https://kubernetes.default.svc
12+
project: default
13+
source:
14+
repoURL: git://controller-0.openstack.lab/openstack-deployment
15+
targetRevision: main
16+
path: manifests/secrets
17+
syncPolicy:
18+
automated:
19+
prune: true
20+
selfHeal: true

0 commit comments

Comments
 (0)