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
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
Install paket 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
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