Daftar Isi

Openstack Multinode dengan Kolla-Ansible (Xena)

Pada pos kali ini penulis ingin berbagi ilmu terkait cara instalasi/deployment openstack multinode menggunakan kolla. Tujuan pembuatan pos ini dimaksudkan sebagai dokumentasi dan juga referensi bagi siapa saja yang membutuhkannya.


Kolla ansible merupakan salah satu cara untuk melakukan deploy openstack yang berbasis container production-ready yang disediakan oleh Openstack. Setiap service openstack dijalankan di dalam docker container yang "out of the box", dengan kata lain bisa langsung digunakan tanpa perlu ribet setup konfigurasi openstack.

Prasyarat

Berikut adalah spesifikasi yang digunakan pada tutorial kali ini.

Controller Node:

  • Ubuntu 20.04 LTS
  • 2x NIC (1 NIC tanpa ip)
  • 4 vCpu
  • 8 GB RAM
  • 50 GB Disk
  • 100 GB Disk (Opsional, digunakan untuk service cinder volume)

Compute Node:

  • Ubuntu 20.04 LTS
  • 2x NIC (1 NIC tanpa ip)
  • 4 vCpu
  • 8 GB RAM
  • 50 GB Disk

Berikut adalah topologi yang ingin dibuat pada tutorial kali ini:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
     +------------+      +----------+      +-----------+                                                           
     | Public ISP |----->| Internet |<-----| Local NAT |<---+                                                      
     +------------+      +----------+      +-----------+    |                                                      
        ^                                                   |                                                      
        |                                                   |                                                      
        |            +--------------------+                 |                                                      
        +------------|  External Network  |                 |
                     |  192.168.20.0 /24  |                 |                                    
                     +--------------------+                 |                                                      
                           ^       ^                        |                                                      
                           |       |                        |                                                      
     +------------------------+ +----------------------+    |                                                      
     |                +----|+ | | +|----+              |    |                                                      
     |                |ens19| | | |ens19|              |    |                                                      
     |   Controller   +-----+ | | +-----+    Compute   |    |                                                      
     |      Node      +-----+ | | +-----+     Node     |    |                                                      
     |                |eth0 | | | |eth0 |              |    |                                                      
     |                +----|+ | | +|----+              |    |                                                      
     +------------------------+ +----------------------+    |                                                      
                           |       |                        |
                           |       |                        |                                                      
                           |       | +--------------------+ |
                           |       +>| Management Network | |                                                      
                           +-------->|    10.0.3.0 /24    |-+                                                      
                                     +--------------------+
                        
Info
Interface ens19 pada controller node digunakan sebagai bridge interface untuk keperluan floating ip dan juga akses internet oleh instance yang ada di compute node sehingga tidak perlu diatur ip.
  • Management Network (10.0.3.0/24) digunakan untuk komunikasi antar service openstack di setiap nodenya.
  • External Network (192.168.20.0/24) digunakan untuk keperluan akses internet oleh instance (VM) yang nantinya ada di compute node.

Persiapan

Setup User

Tutorial ini menggunakan virtual environment yang disediakan oleh python, sehingga perlu user reguler dengan akses sudo saat menjalankan command ke depannya.

Jalankan pada masing-masing node:

1
2
3
4
add user kolla
usermod -aG sudo kolla
echo "kolla ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/kolla
su - kolla

Setup /etc/hosts

Karena deployment menggunakan ansible, maka perlu mengatur hostname di /etc/hosts tiap node agar kita dapat mengatur hostname dengan mudah tanpa perlu menggunakan ip di ansible inventori.

Jalankan pada masing-masing node:

1
2
3
4
5
sudo vi /etc/hosts
.............
#127.0.1.1 # Silahkan comment ip ini
10.0.3.11 controller-node
10.0.3.12 compute-node

Setup Network

Jalankan pada masing-masing node:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo vi /etc/systemd/network/ens19.network 
..........................................
[Match]
Name=ens19

[Network]
LinkLocalAddressing=no
IPv6AcceptRA=no
.........................
sudo ip link set ens19 up 

Setup Controller Node

SSH passwordless

1
2
3
ssh-keygen -t rsa
ssh-copy-id controller-node
ssh-copy-id compute-node
Catatan
Jika tidak bisa menggunakan ssh-copy-id karena permasalahan konfigurasi sshd, silahkan ubah secara manual atau copy isi dari file ~/.ssh/id_rsa.pub lalu paste ke file ~/.ssh/authorized_keys.

LVM

1
2
sudo pvcreate /dev/sdb
sudo vgcreate cinder-volumes /dev/sdb

Instalasi Dependensi

Update paket manager
1
sudo apt update
Install dependensi python3
1
2
3
4
sudo apt-get install \
python3-dev libffi-dev gcc \
libssl-dev python3-selinux \
python3-setuptools python3-venv -y
Buat virtual environment

Buat sebuah direktori dengan nama yang diinginkan.

1
2
3
mkdir workdir
cd workdir
python3 -m venv xena-venv
Aktifkan virtual environment
1
source xena-venv/bin/activate
Upgrade versi pip
1
pip install -U pip
Install paket wheel
1
pip install wheel
Install paket ansible

Openstack Xena membutuhkan ansible versi 2.10 hingga 4 keatas.

1
pip install 'ansible>=2.10,<5'
Install paket python-docker
1
sudo apt install python3-docker -y

Setup Kolla-ansible

Install paket kolla menggunakan pip

Pastikan virtual environment sudah aktif sebelum menjalankan perintah berikut.

1
2
# 13.7.0 adalah versi terbaru dari Openstack Xena
pip install 'kolla-ansible==13.7.0'
Info
Karena terdapat bug pada versi jinja2 versi latest, maka kita perlu mengganti ke versi dibawahnya. Pada contoh ini menggunakan versi 3.0.3.
1
2
3
4
pip uninstall jinja2 -y
pip install jinja2==3.0.3
# Pastikan versi sudah sesuai
pip show jinja2
Buat direktori /etc/kolla
1
2
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
Salin file global.yml dan password.yml ke /etc/kolla
1
cp -r xena-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
Salin file inventori ke current direktori
1
cp xena-venv/share/kolla-ansible/ansible/inventory/* .
Konfigurasi multinode inventori

Ganti setiap hostname yang ada di inventori dengan hostname node saat setup /etc/hosts.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
vi multinode
............
[control]
controller-node
[network]
controller-node
[compute]
compute-node
[monitoring]
controller-node
[storage]
controller-node
Buat konfig ansible pada current direktori
1
2
3
4
5
6
7
vi ansible.cfg
..............
[defaults]
host_key_checking=False
pipelining=True
forks=100
log_path=./ansible.log
Cek konfigurasi dengan ping
1
ansible -i ./multinode all -m ping
Generate Password
1
kolla-genpwd
Edit konfigurasi globals.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
vi /etc/kolla/globals.yml
........................
kolla_base_distro: "ubuntu"
kolla_install_type: "source"
openstack_release: "xena"
kolla_internal_vip_address: "10.0.3.250"
network_interface: "eth0"
neutron_external_interface: "ens19"
neutron_plugin_agent: "openvswitch"
enable_openstack_core: "yes"
enable_haproxy: "yes"
enable_neutron_provider_networks: "yes"
nova_compute_virt_type: "kvm"
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"
  • kolla_internal_vip_address adalah ip yang digunakan untuk keperluan keepalive dan high availability. Pastikan ip tersebut masih dalam satu pool dan belum digunakan.

  • Gunakan qemu atau kvm pada nova_compute_virt_type. Jika ingin menggunakan kvm, pastikan nested virtualization telah aktif.

    Intel Cpu

    1
    2
    
    # Jika status Y berarti aktif
    cat /sys/module/kvm_intel/parameters/nested
    

    Amd Cpu

    1
    2
    
    # Jika status 1 berarti aktif
    cat /sys/module/kvm_amd/parameters/nested
    

Deployment

Bootstrap

Sebelum melakukan deployment, diperlukan menginstall dependensi tambahan pada setiap nodenya seperti docker dan paket-paket lain yang dibutuhkan. Cara mudah untuk menginstallnya dengan menggunakan argument bootstrap-servers pada perintah kolla-ansible.

1
kolla-ansible -i ./multinode bootstrap-servers

Prechecks

Setelah melakukan bootstraping, langkah selanjutnya adalah melakukan prechecks untuk melihat apakah masih ada error yang perlu diperbaiki sebelum melakukan deploy.

1
kolla-ansible -i ./multinode prechecks

Deploy

Jika sudah tidak ada error maka bisa langsung deploy.

1
kolla-ansible -i ./multinode deploy
Info
Karena proses deploy yang memakan waktu lama, harap gunakan screen atau tmux agar dapat terus memonitoring prosesnya walaupun sudah terputus dari koneksi remote ssh.

Post Deployment

Setelah proses deployment berhasil, maka perlu setup beberapa langkah berikut agar dapat menggunakan openstack melalui CLI.

Install Openstack Client

1
pip install python-openstackclient python-magnumclient

Generate RC & salin ke current direktori

1
2
kolla-ansible post-deploy
cp /etc/kolla/admin-openrc.sh .

Load RC

1
2
3
source ./admin-openrc.sh
# Verification
openstack service list

Init

Sesuaikan setiap variabel env dengan external network yang digunakan.

1
2
3
4
5
6
# Env
export EXT_NET_CIDR='192.168.20.0/24'
export EXT_NET_RANGE='start=192.168.20.100,end=192.168.20.199'
export EXT_NET_GATEWAY='192.168.20.1'
# Eksekusi initnya
./xena-venv/share/kolla-ansible/init-runonce

Akses Dashboard

  • Akses horizon dashboard dengan virtual ip sebelumnya, 10.0.3.250
  • Login menggunakan user admin dan password yang tertera di /etc/kolla/password.yml. Password dapat dilihat dengan perintah grep keystone_admin_password /etc/kolla/passwords.yml.

Destroy

Jika sudah tidak ingin mengggunakan openstack, bisa dengan mudah melakukan destroy dengan perintah berikut:

1
kolla-ansible -i ./multinode destroy

Referensi