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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
\documentclass{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[italian]{babel}
\title{Installazione di OpenStack Kolla-Ansible su multi-nodo}
\author{Alessandro Iezzi}
\date{Luglio 2025}
\begin{document}
\maketitle
\begin{abstract}
L'Installazione di OpenStack Kolla-Ansible su multi-nodo ci si riferisce al
processo di installazione dei servizi OpenStack su nodi multipli fisici o
virtuali usando Kolla-Ansible.
Questo approccio permette la distribuzione di vari componenti OpenStack (come
\emph{Compute}, \emph{Networking} e \emph{Storage}) su differenti nodi,
migliorando la scalabilità, ridondanza e le performance. Quindi è indicato per
quegli ambienti di produzione dove tali caratteristiche sono prioritarie.
\end{abstract}
\section{Architettura all-in-one con Kolla-Ansible}
In questa sezione si illustra il processo di installazione di OpenStack
Kolla-Ansible su singolo nodo. Tale procedura è da usare solo per test e
sviluppo, non è assolutamente consigliato in ambiente di produzione, anche se
molti dei passaggi qui descritti verranno utilizzati anche per l'installazione
su multi-nodo.
\subsection{Introduzione}
Per procedere all'installazione è necessaria una macchina fisica o virtuale
con:
\begin{itemize}
\item 4 CPU/Core
\item 8 GB di RAM
\item 60 GB di HDD
\item 2 interfacce di rete
\end{itemize}
Una delle due interfacce dovrà essere connessa a internet e serve per eseguire
correttamente l'installazione del sistema operativo e i software necessari.
Se si vuole lavorare su ambiente virtualizzato, si consiglia un'interfaccia di
rete "bridged" e una "host".
\emph{Si consiglia di lavorare su un'installazione pulita di Ubuntu Server 24.04
LTS}.
\subsection{Installazione dei pacchetti necessari}
\paragraph{Preparazione del sistema operativo} Vengono installati i software
necessari per ospitare Kolla-Ansible.
\begin{verbatim}
$ sudo apt-get update
$ sudo apt-get install git \
python3-dev \
libffi-dev \
gcc \
libssl-dev \
python3-venv \
bridge-utils
\end{verbatim}
\paragraph{Preparazione della rete} Questa configurazione è solo un punto di
partenza. Bisogna adattarlo alle proprie esigenze e ai nomi che il sistema
operativo ha dato ad ogni interfaccia. L'esempio che segue, mostra una
configurazione con tre interfacce, la prima è una NAT, e le altre due sono
reti host.
\begin{verbatim}
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: no
ens4:
dhcp4: no
ens5:
dhcp4: no
addresses: [192.168.200.10/24]
routes:
- to: 192.168.200.0/24
via: 192.168.200.1
metric: 100
bridges:
br-nat:
interfaces: [ens3]
dhcp4: true
dhcp4-overrides:
route-metric: 50
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
routes:
- to: default
via: 10.0.2.2
br-host:
interfaces: [ens4]
addresses: [192.168.100.10/24]
nameservers:
addresses: [8.8.8.8]
routes:
- to: 192.168.100.0/24
via: 192.168.100.1
metric: 100
\end{verbatim}
Per applicare la configurazione di rete:
\begin{verbatim}
sudo netplan generate
sudo netplan apply
\end{verbatim}
Se l'ambiente prevede più schede di rete, delle quali una sola esce su
internet, bisonga fare in modo che il sistema esca sempre con quella. Quindi,
bisognerebbe togliere il default, ad esempio, alla scheda solo host:
\begin{verbatim}
sudo ip route del default via 192.168.100.1
\end{verbatim}
O impostare una metrica più alta:
\begin{verbatim}
sudo ip route del default via 192.168.100.1
sudo ip route replace default via 192.168.100.1 dev ens4 metric 150
\end{verbatim}
\paragraph{Preparazione dell'ambiente Python} Il software Ansible e
Kolla-Ansible sono scritti in Python, quindi, è necessario creare un ambiente
nel quale verranno installati.
\begin{verbatim}
$ python3 -m venv $HOME/python-env
$ source $HOME/python-env/bin/activate
$ pip install -U pip
\end{verbatim}
\paragraph{Installazione di Ansible}
\begin{verbatim}
(python-env)$ pip install ansible-core >=2.15
\end{verbatim}
\paragraph{Installazione di Kolla-Ansible} Ora si può procedere
all'installazione di \emph{Kolla-Ansible}. Per farlo, è necessario installarlo
dai sorgenti da \emph{opendev.org}.
Segue il comando per installare la versione più aggiornata:
\begin{verbatim}
(python-env)$ pip install git+https://opendev.org/openstack/kolla-ansible@master
\end{verbatim}
Segue il comando per installare la versione stabile:
\begin{verbatim}
(python-env)$ pip install git+https://opendev.org/openstack/kolla-ansible@stable/2025.1
\end{verbatim}
\subsection{Preparazione di Kolla-Ansible}
\begin{verbatim}
(python-env)$ sudo mkdir -p /etc/kolla
(python-env)$ sudo chown $USER:$USER /etc/kolla
(python-env)$ cp -r $HOME/python-env/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
(python-env)$ kolla-ansible install-deps
(python-env)$ kolla-genpwd
\end{verbatim}
\subsection{Configurazione di Kolla}
\begin{verbatim}
$ nano /etc/kolla/globals.yml
\end{verbatim}
In questo file, si vano a cambiare alcune configurazioni:
\begin{verbatim}
kolla_base_distro: "ubuntu"
network_interface: "br-nat" # la rete NAT
neutron_external_interface: "br-host" # la rete host (non deve avere una rotta che la farebbe uscire su internet, io ho rimosso il default)
kolla_internal_vip_address: "10.0.2.100"
\end{verbatim}
Poi, creare il file \verb|~/.ansible.cfg|:
\begin{verbatim}
$ touch ~/.ansible.cfg
\end{verbatim}
Ed inserire le seguenti configurazioni che serviranno a far chiedere la
password quando Ansible cercherà di fare \verb|sudo|:
\begin{verbatim}
[privilege_escalation]
become = True
become_method = sudo
become_ask_pass = True
\end{verbatim}
A questo punto è consigliabile eseguire uno snapshot.
\subsection{Deploy all-in-one}
Eseguire i seguenti comandi per installare docker:
\begin{verbatim}
(python-env)$ pip install docker
(python-env)$ sudo apt-get install libdbus-1-dev libdbus-glib-1-dev pkg-config
(python-env)$ pip install dbus-python
\end{verbatim}
Successivamente, eseguire i seguenti comandi per completare l'installazione:
\begin{verbatim}
(python-env)$ kolla-ansible bootstrap-servers \
-i $HOME/python-env/share/kolla-ansible/ansible/inventory/all-in-one
(python-env)$ kolla-ansible prechecks \
-i $HOME/python-env/share/kolla-ansible/ansible/inventory/all-in-one
(python-env)$ kolla-ansible deploy \
-i $HOME/python-env/share/kolla-ansible/ansible/inventory/all-in-one
\end{verbatim}
Eseguire un ulteriore snapshot.
\subsection{Installazione di OpenStack CLI}
\begin{verbatim}
(python-env)$ pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master
\end{verbatim}
\subsection{Accesso all'interfaccia Horizon}
Nel caso in cui si utilizza un NAT, per accedere all'interfaccia horizon è
necessario fare port forwarding su qemu.
\begin{verbatim}
URL: http://localhost
username: admin
pasword: vedere /etc/kolla/passwords.yml
$ grep 'keystone_admin_password' /etc/kolla/passwords.yml
\end{verbatim}
\section{Architettura multi-nodo con Kolla-Ansible}
\end{document}
|