Skip to main content

Command Palette

Search for a command to run...

How to Deploy OpenStack 2024.2 with Kolla Ansible on Multiple Nodes

Updated
5 min read

Minimum Hardware

Requirements minimum hardware untuk OpenStack:

CriteriaMinimalRecommended
CPU4 core @ 2.4 GHz24 core @ 2.67 GHz
RAM8 GB24 GB or more
HDD2 x 50 GB4 x 500 GB (7200 rpm)
RAIDSoftware RAID-1 (use mdadm as it improves the read performance almost twice)Hardware RAID-10

Topology

Pre-Deployment Multinode

  1. Setting Hostname
hostnamectl set-hostname controller
hostnamectl set-hostname compute1
hostnamectl set-hostname compute2
  1. Set Host
vim /etc/hosts
172.23.12.10 controller
172.23.12.11 compute1
172.23.12.12 compute2
  1. Set Timezone
timedatectl set-timezone Asia/Jakarta
  1. Set NTP-Server
apt install chrony
vim /etc/chrony/chrony.conf

server 0.id.pool.ntp.org iburst
server 1.id.pool.ntp.org iburst
server 2.id.pool.ntp.org iburst
server 3.id.pool.ntp.org iburst

systemctl restart chrony
chronyc sources
  1. Create ssh-keygen
ssh-keygen
ssh-copy-id root@compute1
ssh-copy-id root@compute2

Deployment Multinode

  1. Update dan Instalasi Dependencies

pertama update dan upgrade server kita agar dalam kondisi up-to-date, kadang kalo server tidak dalam kondisi up-to-date ketika ingin menginstall sesuatu akan error, selanjutnya install dependecies untuk digunakan virtual environment

sudo apt update -y && sudo apt upgrade -y 
sudo apt install -y git python3-dev libffi-dev gcc libssl-dev libdbus-glib-1-dev libdbus-1-dev pkg-config python3.12-venv
  1. Membuat Virtual Environment

jika package sudah diinstall, selanjutnya masuk ke mode virtual environment, ini digunakan agar kita tidak menggangu sistem server kita saat konfigurasi

python3 -m venv /root/kolla-venv
source /root/kolla-venv/bin/activate
  1. Instalasi Kolla-Ansible

nah untuk install openstacknya kita gunakan versi yang akan digunakan, karena saat ini kita akan mencoba deploy versi 2024.2(dalmantian), maka gunakan veri 2024.2 jika ingin menggunakan versi lain tinggal ganti saja pada bagian versinya

pip install -U pip
pip install git+https://opendev.org/openstack/kolla-ansible@stable/2024.2
  1. Konfigurasi Directory Kolla

buat direktori untuk digunakan konfigurasi kolla ansiblenya, jadi kita salin konfigurasi yang dibutuhkan dari folder bawaan ke dalam folder /etc/kolla agar lebih mudah untuk mengkonfigurasinya

sudo mkdir -p /etc/kolla 
sudo chown $USER:$USER /etc/kolla 
cp -r /root/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla 
cp /root/kolla-venv/share/kolla-ansible/ansible/inventory/multinode /etc/kolla
  1. Create ansible.cfg
mkdir -p /etc/ansible
nano /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100
  1. Install Dependecies Kolla

kita install semua package yang dibutuhkan untuk mendeploy openstack, dan kita upgrade untuk dockernya agar ke versi yang lebih baru

kolla-ansible install-deps
pip install --upgrade docker requests urllib3
  1. Konfigurasi TLS dan Host

selanjutnya kita edit untuk main configurationnya, ini sangat penting untuk dilakukan karena ketika deploy openstack akan melihat konfigurasi yang kita buat disini, untuk settingannya opsional namun yang akan kita setting sekarang adalah bagian network,interface,backend dan tlsnya. Jika ingin menggunakan http saja pada bagian tls hiraukan saja.

vim /etc/kolla/globals.yml 

kolla_base_distro: "ubuntu" 
kolla_internal_vip_address: "172.23.12.100"
kolla_internal_fqdn: "internal.rafli.lab"
kolla_external_vip_address: "172.23.12.200"
kolla_external_fqdn: "public.rafli.lab"
network_interface: ens192
neutron_external_interface: ens224
enable_haproxy: "yes"
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
kolla_enable_tls_internal: "yes"
kolla_enable_tls_external: "yes"
kolla_copy_ca_into_containers: "yes"
kolla_enable_tls_backend: "yes"
openstack_cacert: "/etc/ssl/certs/ca-certificates.crt"
kolla_admin_openrc_cacert: "/etc/ssl/certs/ca-certificates.crt" 


vim /etc/hosts 
172.23.12.100 internal.rafli.lab
172.23.12.200 public.rafli.lab EOF
  1. Konfigurasi multinode
vim /etc/kolla/multinode
[control]
controller1 ansible_ssh_user=root ansible_become=True ansible_private_key_file=~/.ssh/id_rsa
[compute]
compute1  ansible_ssh_user=root ansible_become=True ansible_private_key_file=~/.ssh/id_rsa
[network]
controller1
compute1
[monitoring]
controller
[storage]
controller
  1. Generate Certificate

karena kita menggunakan TLS jadi kita perlu membuat certificatenya, lalu kita simpan kedalam /etc/ssl/certs, jika tidak menggunakan TLS maka step ini tidak perlu

kolla-ansible certificates -i /etc/kolla/multinode
cat /etc/kolla/certificates/ca/root.crt >> /etc/ssl/certs/ca-certificates.crt
  1. Setup Storage LVM untuk Cinder

pada konfigurasi globlas.yml kita menggunakan lvm untuk backend storagenya, jadi kita perlu membuat disk yang akan dijadikan sebagai backend storage openstacknya, pada bagian backend ini ada banyak pilihan yang bisa digunakan jadi bisa pilih sesuai kebutuhan dan konfigurasinya tentu akan beda juga.

pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb 
vgs
  1. Bootstrapping dan Prechecks

jika semua konfigurasi sudah selesai semua maka selanjutnya masuk ke mode tahap pre-deploy, sebelumnya kita buat password untuk openstack, dan lakukan bootstrap untuk mempersiapkan node yang akan menjalankan openstack dan prechecks untuk mengecek semua konfigurasi sebelumnya untuk mengantisipasi error saat deployment

kolla-genpwd
kolla-ansible bootstrap-servers -i /etc/kolla/multinode
kolla-ansible prechecks -i /etc/kolla/multinode
  1. Deploy OpenStack

ketika proses bootstrap dan prechecks sudah selesai, selanjutnya bisa langsung deploy openstacknya, ini akan memakan waktu sekitar kurang lebih 15menit, ketika sudah selesai deploy makan lakukan post-deploy untuk konfigurasi tambahan dan membuat credentials admin

kolla-ansible deploy -i /etc/kolla/multinode
kolla-ansible post-deploy -i /etc/kolla/multinode
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master
  1. Verifikasi OpenStack

jika sudah selesai proses deployment maka bisa verifikasi openstacknya apakah sudah running semua, bisa cek pada bagian containernya, endpoint dari openstacknya, ataupun dari horizonnya untuk mengecke apakah ada error atau tidak

docker ps
source /etc/kolla/admin-openrc.sh
openstack endpoint list
  1. Operational Testing
# Internal Network
openstack network create internal-net
openstack subnet create --subnet-range 192.168.0.1/24 --network internal-net --gateway 192.168.0.1 --dns-nameserver 8.8.8.8 internal-subnet

# Public Network
openstack network create --share --external --provider-physical-network physnet1 --provider-network-type flat public-net
openstack subnet create --no-dhcp --allocation-pool 'start=172.23.12.30,end=172.23.12.50' --network public-net --subnet-range 172.23.0.0/20 --gateway 172.23.0.1 public-subnet  

# Router
openstack router create public-router
openstack router add subnet public-router internal-subnet
openstack router set --external-gateway public-net public-router  

# Image
wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
openstack image create --disk-format qcow2 \
  --container-format bare --public \
  --file ./cirros-0.5.2-x86_64-disk.img cirros-0.5.2-image

# Keypair
openstack keypair create --public-key /root/.ssh/id_rsa.pub at-openstack-aio-key

# Security Group
openstack security group create allow-all
openstack security group rule create --ingress --ethertype IPv4 --protocol icmp allow-all
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 22 allow-all
openstack security group rule create --ingress --ethertype IPv4 --protocol tcp --dst-port 1:65535 allow-all
openstack security group rule create --ingress --ethertype IPv4 --protocol udp --dst-port 1:65535 allow-all  

# Flavor
openstack flavor create --id 1 --ram 1024 --disk 10 --vcpus 1 tiny

# Instance
openstack server create --image cirros-0.5.2-image --flavor tiny --key-name key-openstack-rafli --network internal-net --security-group allow-all vm-cirros
openstack floating ip create --floating-ip-address 172.23.12.50 public-net 
openstack server add floating ip vm-cirros 172.23.12.50
openstack server list
ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' cirros@172.23.12.50