78 lines
3.7 KiB
Markdown
78 lines
3.7 KiB
Markdown
!!! warning "Document Under Construction"
|
|
This document is very unfinished and should **NOT** be followed by anyone for deployment at this time.
|
|
|
|
**Purpose**: Deploying OpenStack via Ansible.
|
|
|
|
## Required Hardware/Infrastructure Breakdown
|
|
| **Hostname** | **IP** | **Storage** | **Memory** | **CPU** | **Network** | **Purpose** |
|
|
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
|
| OPENSTACK-BOOTSTRAPPER | 192.168.3.46 (eth0) | 120GB | 8GB | 8-Cores | eth0 | OpenStack Ansible Playbook Deployment Node |
|
|
| OPENSTACK-NODE-01 | 192.168.3.43 (eth0) | 250GB (OS), 500GB (Ceph Storage) | 32GB | 16-Cores | eth0, eth1 | OpenStack Cluster/Target Node |
|
|
| OPENSTACK-NODE-02 | 192.168.3.44 (eth0) | 250GB (OS), 500GB (Ceph Storage) | 32GB | 16-Cores | eth0, eth1 | OpenStack Cluster/Target Node |
|
|
| OPENSTACK-NODE-03 | 192.168.3.45 (eth0) | 250GB (OS), 500GB (Ceph Storage) | 32GB | 16-Cores | eth0, eth1 | OpenStack Cluster/Target Node |
|
|
|
|
## Configure Hard-Coded DNS for Cluster Nodes
|
|
We want to ensure everything works even if the nodes have no internet access. By hardcoding the FQDNs, this protects us against several possible stupid situations.
|
|
|
|
Run the following script to add the DNS entries.
|
|
```sh
|
|
# Make yourself root
|
|
sudo su
|
|
```
|
|
|
|
!!! note "Run `sudo su` Separately"
|
|
When I ran `sudo su` and the echo commands below as one block of commands, it did not correctly write the changes to the `/etc/hosts` file. Just run `sudo su` by itself, then you can copy paste the codeblock below for all of the echo lines for each DNS entry.
|
|
|
|
```sh
|
|
# Add the OpenStack node entries to /etc/hosts
|
|
echo "192.168.3.43 OPENSTACK-NODE-01.bunny-lab.io OPENSTACK-NODE-01" >> /etc/hosts
|
|
echo "192.168.3.44 OPENSTACK-NODE-02.bunny-lab.io OPENSTACK-NODE-02" >> /etc/hosts
|
|
echo "192.168.3.45 OPENSTACK-NODE-03.bunny-lab.io OPENSTACK-NODE-03" >> /etc/hosts
|
|
```
|
|
|
|
### Validate DNS Entries Added
|
|
```sh
|
|
cat /etc/hosts
|
|
```
|
|
|
|
!!! example "/etc/hosts Example Contents"
|
|
When you run `cat /etc/hosts`, you should see output similar to the following:
|
|
```ini title="/etc/hosts"
|
|
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
|
|
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
|
|
192.168.3.43 OPENSTACK-NODE-01.bunny-lab.io OPENSTACK-NODE-01
|
|
192.168.3.44 OPENSTACK-NODE-02.bunny-lab.io OPENSTACK-NODE-02
|
|
192.168.3.45 OPENSTACK-NODE-03.bunny-lab.io OPENSTACK-NODE-03
|
|
```
|
|
|
|
## OpenStack Deployment Node
|
|
The "Deployment" node / bootstrapper is responsible for running Ansible playbooks against the cluster nodes that will eventually be running OpenStack. [Original Deployment Node Documentation](https://docs.openstack.org/project-deploy-guide/openstack-ansible/latest/deploymenthost.html)
|
|
|
|
### Install Necessary Software
|
|
```sh
|
|
sudo su
|
|
dnf upgrade
|
|
dnf install -y git chrony openssh-server python3-devel sudo
|
|
dnf group install -y "Development Tools"
|
|
```
|
|
|
|
### Configure SSH keys
|
|
Ansible uses SSH with public key authentication to connect the deployment host and target hosts. Run the following commands to configure this.
|
|
|
|
!!! warning "Do not run as root"
|
|
You want to make sure you run these commands as a normal user. (e.g. `nicole`).
|
|
|
|
``` sh
|
|
# Generate SSH Keys (Private / Public)
|
|
ssh-keygen
|
|
|
|
# Install Public Key on OpenStack Cluster/Target Nodes
|
|
ssh-copy-id -i /home/nicole/.ssh/id_rsa.pub nicole@openstack-node-01.bunny-lab.io
|
|
ssh-copy-id -i /home/nicole/.ssh/id_rsa.pub nicole@openstack-node-02.bunny-lab.io
|
|
ssh-copy-id -i /home/nicole/.ssh/id_rsa.pub nicole@openstack-node-03.bunny-lab.io
|
|
|
|
# Validate that SSH Authentication Works Successfully on Each Node
|
|
ssh nicole@openstack-node-01.bunny-lab.io
|
|
ssh nicole@openstack-node-02.bunny-lab.io
|
|
ssh nicole@openstack-node-03.bunny-lab.io
|
|
``` |