- Overview
- Architecture
- Quick Start
- Repository Structure
- Cluster Management
- Components & Features
- Development Environment
- ArgoCD Plugins
- Troubleshooting
- Contributing
- Resources
This repository provides a production-ready, declarative approach to managing multiple OpenShift clusters using GitOps principles with ArgoCD. It enables:
β
Multi-cluster orchestration with Red Hat Advanced Cluster Management (ACM)
β
Consistent configuration across development, staging, and production environments
β
Automated deployments and synchronization using ArgoCD
β
Secure secret management with External Secrets Operator and 1Password
β
Infrastructure as Code with Helm charts and Kustomize overlays
β
Policy-based governance and compliance automation
π‘ This setup follows the GitOps Standards Repository Template from Red Hat Communities of Practice.
graph TB
subgraph "Management Hub Cluster"
ACM[Red Hat ACM]
ArgoCD[ArgoCD GitOps]
Vault[HashiCorp Vault]
ESO[External Secrets Operator]
end
subgraph "Target Clusters"
Proxmox[Proxmox Cluster]
VSphere[vSphere Cluster]
HCP[Hosted Control Planes]
end
subgraph "GitOps Repository"
Components[Components]
Clusters[Cluster Configs]
Helm[Helm Charts]
Policies[ACM Policies]
end
ArgoCD --> Components
ArgoCD --> Clusters
ArgoCD --> Helm
ACM --> Policies
ACM --> Proxmox
ACM --> VSphere
ACM --> HCP
ESO --> Vault
style ACM fill:#e1f5fe
style ArgoCD fill:#f3e5f5
style Vault fill:#fff3e0
- π― ArgoCD: Continuous deployment and GitOps orchestration
- π Red Hat ACM: Multi-cluster management and governance
- π External Secrets: Secure secret injection from external systems
- π Cert Manager: Automated TLS certificate management
- π§ Operators: 50+ OpenShift operators for various capabilities
- π Observability: Integrated monitoring, logging, and alerting
| Tool | Version | Download Link | Purpose |
|---|---|---|---|
| OpenShift Cluster | 4.12+ | - | Target deployment environment with cluster-admin privileges |
| oc CLI | Latest | Download | OpenShift command-line interface |
| openshift-install | Latest | Download | Cluster installation tool |
| Helm | 3.12+ | Download | Package manager for Kubernetes |
| Kustomize | 5.3+ | Download | Configuration management tool |
| Git Access | - | - | Repository access and credentials |
- CPU: 4+ cores per control plane node
- Memory: 16GB+ RAM per control plane node
- Storage: 100GB+ available disk space
- Network: Stable internet connection for image pulls
Step 1: Clone Repository
# Clone the repository
git clone https://github.com/Vikaspogu/openshift-multicluster.git
cd openshift-multiclusterStep 2: Configure Installation Files
a. Update installer/proxmox/install-config.yaml:
- βοΈ Base Domain (e.g.,
cluster.example.com) - π Machine Network CIDR (e.g.,
192.168.1.0/24) - π API and Ingress VIPs
- π Pull secret and SSH Key
b. Update installer/proxmox/agent-config.yaml:
- π‘ Rendezvous IP
- π§ MacAddress, IP, DNS, Interfaces and Hostname for all hosts
Step 3: Generate Installation ISO
./openshift-install agent create image --dir installer/proxmoxStep 4: Deploy to Proxmox
- Upload the generated ISO to your Proxmox storage
- Create VMs using the ISO image
- Start all VMs to begin the installation process
Step 5: Monitor Installation Progress
# Wait for installation to complete
export KUBECONFIG=installer/proxmox/auth/kubeconfig
./openshift-install agent wait-for install-complete --dir installer/proxmox --log-level=debugUpdate repoURL and path in the ArgoCD root application(App of Apps pattern) under components/root-application/
Update Repository URL: Modify the cluster configuration in clusters/<cluster-name>/kustomization.yaml:
helmCharts:
- name: argocd-app-of-apps
valuesInline:
default:
source:
repoURL: https://github.com/YOUR-USERNAME/openshift-multicluster.git
targetRevision: HEAD
destination:
server: https://kubernetes.default.svcCustomize for Your Environment:
- Replace
YOUR-USERNAMEwith your GitHub username
# Step 1: Login to your OpenShift cluster
oc login --server=https://api.cluster.example.com:6443
# Step 2: Bootstrap ArgoCD and initial applications
oc apply -k components/root-application/
# Step 3: Wait for ArgoCD to be ready (may take 2-3 minutes)
oc wait --for=condition=available deployment/openshift-gitops-server -n openshift-gitops --timeout=300s
# Step 4: Verify ArgoCD deployment
oc get applications -n openshift-gitops
# Step 5: Get ArgoCD admin password (optional)
oc extract secret/openshift-gitops-cluster -n openshift-gitops --to=-
β οΈ Note: Initial sync may take 5-10 minutes as operators are installed and configured.
openshift-multicluster/
βββ apps/ # Application-specific configurations
βββ clusters/ # Cluster-specific configurations
β βββ proxmox/ # Proxmox cluster configuration
β βββ vsphere/ # vSphere cluster configuration
βββ components/ # Reusable component definitions
β βββ operators/ # OpenShift operators
β βββ configs/ # Configuration components
β βββ charts/ # Custom Helm charts
βββ groups/ # Common configurations by environment
β βββ all/ # Applied to all clusters
β βββ dev/ # Development environment specific
βββ helm/charts/ # Custom Helm charts
βββ installer/ # Cluster installation files
βββ scripts/ # Utility scripts
- Groups (
groups/) - Environment-wide defaults - Clusters (
clusters/) - Cluster-specific overrides - Components (
components/) - Individual service configurations - Apps (
apps/) - Application deployments
| Platform | Status | Features |
|---|---|---|
| Proxmox | β Production | VM management, storage integration |
| vSphere | β Production | vCenter integration, DRS/HA support |
-
Create cluster directory:
mkdir clusters/new-cluster cp clusters/proxmox/kustomization.yaml clusters/new-cluster/
-
Customize configuration:
# Edit cluster-specific values vim clusters/new-cluster/kustomization.yaml -
Deploy via ArgoCD:
# ArgoCD will automatically detect and sync the new cluster oc get applications -n openshift-gitops
| Component | Purpose | Status |
|---|---|---|
| π OpenShift GitOps | ArgoCD for continuous deployment and application lifecycle management | β Production |
| π Red Hat ACM | Multi-cluster management hub with governance and policy enforcement | β Production |
| π External Secrets | Secure secret injection from external systems (1Password, Vault, AWS) | β Production |
| π Cert Manager | Automated TLS certificate management via Let's Encrypt and DNS providers | β Production |
| π§ Patch Operator | Dynamic cluster configuration updates and resource patching | β Production |
| Component | Purpose | Features |
|---|---|---|
| π‘οΈ Red Hat ACS | Advanced Cluster Security for container and Kubernetes security | Vulnerability scanning, policy enforcement, runtime protection |
| π LDAP Sync | Automated user and group synchronization | Active Directory integration, group mapping |
| π OAuth | External identity provider integration | LDAP, OIDC, GitHub, Google authentication |
| Component | Purpose | Benefits |
|---|---|---|
| ποΈ Developer Hub | Internal developer platform based on Backstage | Service catalog, documentation, templates |
| π» Dev Spaces | Cloud-native development workspaces | VS Code in browser, consistent dev environments |
| π OpenShift Pipelines | Tekton-based CI/CD with Pipeline-as-Code | GitOps workflows, secure builds, multi-arch support |
| π₯οΈ Web Terminal | Browser-based cluster access | No local tools needed, instant access |
| Component | Use Case | Features |
|---|---|---|
| πΎ LVM Storage | Local volume management for persistent storage | Dynamic provisioning, snapshot support |
| π CloudNative-PG | PostgreSQL operator for cloud-native databases | High availability, backup/restore, monitoring |
| π VolSync | Volume replication and backup solutions | Cross-cluster replication, disaster recovery |
| ποΈ Synology CSI | Network-attached storage integration | NFS/iSCSI support, snapshot capabilities |
| Component | Function | Integration |
|---|---|---|
| π Alertmanager | Alert routing, grouping, and management | Slack, email, PagerDuty notifications |
| π OpenShift Logging | Centralized log aggregation and analysis | Elasticsearch, Fluentd, Kibana stack |
| π Log Forwarder | External log shipping configuration | Splunk, external Elasticsearch, S3 |
| Component | Purpose | Environment |
|---|---|---|
| βοΈ MetalLB | Load balancer for bare-metal clusters | On-premises, edge deployments |
| π NMState | Declarative network configuration management | Static IPs, bonding, VLANs |
| βοΈ Cloudflared | Secure tunnel management without VPN | Remote access, zero-trust networking |
This repository includes a pre-configured development environment using OpenShift Dev Spaces:
# devfile.yaml
components:
- name: dev-tools
container:
image: quay.io/rhn_gps_vpogu/devspaces-fedora40-tooling:2.0.0
memoryLimit: 4GiUse the included Task runner for common operations:
# List all available tasks
task --list
# Example tasks (extend as needed)
task volsync:snapshot # Create volume snapshots
task validate # Validate YAML configurations
task test # Run integration testsThe ArgoCD Lovely Plugin enhances Kustomize capabilities:
- Environment Variable Substitution: Replace variables across multiple files
- Dynamic Patching: Apply patches based on cluster context
- Channel Management: Update operator channels dynamically
Operator Channel Patching:
# clusters/proxmox/cert-manager.yaml
spec:
source:
plugin:
parameters:
- name: channel
value: "stable-v1.13"Variable Replacement with sed:
parameters:
- name: sed
value: "s/CLUSTER_NAME/proxmox-cluster/g **/*.yaml"YAML Path Updates with yq:
parameters:
- name: yq
value: '.spec.domain = "apps.cluster.example.com" ingress.yaml'Additional plugins are configured in components/openshift-gitops-config/.
β If you find this project helpful, please consider giving it a star! β
Made with β€οΈ for the OpenShift community
