\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}