This repository houses assets for deploying OpenShift via ZTP (Zero-Touch Provisioning) to vSphere - other infrastructure platforms will be added as needed.
This process is conducted via Red Hat Advanced Cluster Management ([RH]ACM) as a function of GitOps where clusters and their states and supporting automation are defined in a Git repository for end-to-end provisioning of OpenShift clusters, their governance, policies, and applications.
Featured Technologies:
There is a Hub Cluster that runs ArgoCD, Ansible, RHACM, and all the other supporting services needed to deploy Spoke Clusters.
Once the Hub Cluster has the needed workloads deployed, you can integrate AAP 2 Controller/Tower with RHACM for closed-loop automation of clusters. RHACM will also need other things configured such as Credentials.
Configuration of ArgoCD follows, which then allows for pushing of a cluster and its state to a Git repo for GitOps driven Spoke Cluster deployment.
The Spoke Cluster resources are then created in the ztp-clusters/
directory and on Git Push/Merge are applied to the local Hub cluster via ArgoCD, which then are picked up by RHACM/OAS. The InfraEnv and cluster are then defined and ready for downloading the Discovery ISO.
Cluster composition, Discovery ISO download link, and other variables are passed to an AnsibleJob that will then kick off the Ansible Tower Job Template that will actually create the targeted Infrastructure with the Discovery ISO.
Once the intended systems report in and are discoverable by the InfraEnv, the AnsibleJob kicks back over to OAS/ZTP to continue the installation.
./ansible
- All the Ansible Automation used to bootstrap the hub, template credentials and spoke cluster manifests, and handle vSphere infrastructure automation./docs
- Extra topic specific documentation./legacy-files
- Legacy files such as Bash-based bootstrap scripts./ztp-cluster-applications
- The path for the ZTP Clusters ArgoCD Applications for each Spoke Cluster that are generated per-spoke./ztp-clusters
- The path for the ZTP Cluster manifests that are generated, synced by the ArgoCD Applications in ./ztp-cluster-applications
There are two processes that are needed to deploy OpenShift to vSphere via ZTP:
# curl -OL https://gist.githubusercontent.com/tosin2013/ec8d76807c47a5f7856b5e6c7021944b/raw/e1443421eb22fbb2f08ed4e94d6294a0bd96d01d/ocp-infra-label.sh
# chmod +x ocp-infra-label.sh
# vim ocp-infra-label.sh # Edit Machine names
array=( worker1 worker2 worker3 )
# ./ocp-infra-label.sh
Assuming you have an OCP 4.9+ cluster deployed with OpenShift Assisted Installer Service (OAS), you can simply run the following to bootstrap it into a Hub Cluster:
## Install needed pip modules
pip3 install -r ./requirements.txt
## Install needed Ansible Collections
ansible-galaxy collection install -r ./collections/requirements.yml
## Log into the Hub cluster with a cluster-admin user:
oc login ...
## Bootstrap the Hub cluster with needed Operators and Workloads
ansible-playbook ansible/1_deploy.yaml \
-e deploy_reflector=true \
-e deploy_lso=true \
-e deploy_odf=true \
-e deploy_http_mirror=true \
-e deploy_rhacm=true \
-e deploy_gitea=true \
-e deploy_rh_gitops=true \
-e deploy_aap2_controller=true \
-e deploy_rh_sso=true \
-e deploy_rh_cert_manager=true
## Configure the Hub cluster Operators and Workloads, namely RHACM, AAP2, and RH GitOps (ArgoCD)
ansible-playbook ansible/2_configure.yaml \
-e configure_rhacm=true \
-e configure_aap2_controller=true \
-e configure_rh_gitops=true \
-e pull_secret_path="~/rh-ocp-pull-secret.json"
## Create credentials for vSphere Infrastructure, Pull Secret, Git credentials, etc
ansible-playbook \
-e vcenter_username="administrator@vsphere.local" \
-e vcenter_password='somePass!' \
-e vcenter_fqdn="vcenter.example.com" \
ansible/3_create_credentials.yaml
To set up a Spoke cluster, you would just create Spoke Cluster definitions, generate the manifests, and push to the Git repo that RH GitOps is syncing to:
Once the Hub has been set up and configured, with Credentials available, you can create a set of Spoke Cluster manifests. The Spoke Cluster Manifest Generation Ansible Playbook can be run locally or via Ansible Tower/AAP 2 Controller. The previously run 2_configure.yaml
Playbook will set up a Job Template.
There are a set of example variables that would be passed to the Spoke Cluster Manifest Generation Playbook in example_vars
- use it as such:
ansible-playbook -i ansible/inv_localhost -e "@ansible/example_vars/create_spoke_manifests-haCluster.yaml" ansible/create_spoke_manifests.yml
Now you just need to click the Sync button in RH GitOps!
From here RH GitOps will pick up the new manifests, apply it to the Hub Cluster, which will use RHACM and AAP2 to deploy a cluster to vSphere automatically.
In case you're wanting to learn more, or get stuck down the way with some oddities, here are some links that we found helpful along the way:
This is some galaxy-brain level stuff right here and is too much to be comprehended by normal mortals - there have been some people who have helped with all this that may not have commits into this repo...