DevStack, OpenStack i OpenStack z Kolla na kontenerach
Tworzenie prywatnej czy to publicznej chmury nigdy nie było takie łatwe. Pojawienie się rozwiązania OpenStack na rynku w roku 2010 zrobiło pewną rewolucję w tej dziedzinie.
DevStack
Zaczęcie zabawy z OpenStack jest bardzo prostę. Dzięki rozwiązaniu DevStack czyli środowiska deweloperskiego możemy bez specjalistycznej wiedzy zainstalować i testować OpenStack. Choć wymaga to od nas choć podstawowych umiejętności obsługi systemu Linux z cli. Po pierwsze musimy zainstalować czystą wersje systemu Ubuntu / CentOS. Po drugie mieć na tyle umiejętności by poruszać się po konsoli w celu pobrania repozytorium projektu z git i uruchomić je. Choć dobrze pójść o krok dalej i ustawić trochę wartości w pliku konfiguracyjnym by nie zastanawiać się jakie jest hasło do Dashboard modułu Horizon.
Uruchomienie jest proste i nie będzie tajemnicą jeżeli będę bazował na instrukcji z oficjalnej dokumentacji DevStack
Po instalacji "czystej" wersji systemu Ubuntu / CentOS musimy upewnić się co do adresów w naszej sieci gdyż DevStack (OpenStack też) będzie wykorzystywał te adresy i przydzielał je według własnego serwera DHCP. Co wprzypadku działania w sieci drugiego takiego serwera może powodować konflikty adresów IP. Gdy nasz serwer DHCP z routera będzie przydzielał ten sam adres który, wybierze sobie DevStack. Najlepszym rozwiązaniem jest, jeżeli chcemy podłączyć DevStack do istniejącej sieci bez separacji NAT o wydzielenie puli dla serwera DHCP w naszym DevStack. Kolejnym sposobem podłączenie do innego rutera czyli osobnej sieci lub w samym DevStack utworzenie sieci NAT.
Instalacje zaczynamy od utworzenia użytkownika:
useradd -s /bin/bash -d /opt/stack -m stack
Instalujemy pakiet sudo i dodajemy użytkownika stack jako użytkownika uprawnionego do używania sudo bez podawania hasła.
apt install sudo -y echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Instalujemy też pakiet git. Przełączamy się na użytkownika stack. Klonujemy repo DevStack i przechodzimy do utworzonego repo.
sudo apt install git -y sudo su - stack git clone <span id=<span class="hljs-string">"<span id="https://git.openstack.org/openstack-dev/devstack">https://git.openstack.org/openstack-dev/devstack</span>"</span>>https://git.openstack.org/openstack-dev/devstack</span> cd devstack
Samo uruchomienie DevStack to już tylko wydanie polecenia ./stack.sh
Można pokusić się o dodatkową konfigurację i zdefiniować swoje hasło i ustawienia IP w pliku devstack/samples/local.conf. Plik konfiguracyjny local.conf kopiujemy do tego samego katalogu gdzie znajduje się stack.sh
- Ustawienie FLOATING_RANGE to zakres adresów IP nie używany w Twojej sieci podany wraz z maską np 192.168.1.1/24
- Ustawienie FIXED_RANGE and FIXED_NETWORK_SIZE to ustawienie adresów IP wewnątrz sieci DevStack.
- Ustawienie FLAT_INTERFACE to ustawienie interfejsu sieciowego takiego który, ma dostęp do Internetu.
- Ustawienie hasła administracyjnego używanego dla konta admin i demo.
- Ustawienie hasła administracyjnego do MySQL administrative password.
- Ustawienie hasła do RabbitMQ.
- Ustawienie hasła do usług. Używany przez OpenStack services (Nova, Glance, itp) do autoryzacji w Keystone.
Przykładowy plik local.conf zaprezentowany poniżej.
[[local|localrc]] FLOATING_RANGE=192.168.1.224/27 FIXED_RANGE=10.11.12.0/24 FIXED_NETWORK_SIZE=256 FLAT_INTERFACE=eth0 ADMIN_PASSWORD=supersecret DATABASE_PASSWORD=iheartdatabases RABBIT_PASSWORD=flopsymopsy SERVICE_PASSWORD=iheartksl
Konfiguracja od momentu wydania polecenia (uruchomienie skryptu) stack.sh wykonuje całą pracę automatycznie. W przypadku braku pliku konfiguracyjnego zostaniemy poproszeni o podanie hasła do wyżej wymienionych usług.
Dla lubiących oglądać i słuchać:
Po całej konfiguracji otrzymamy monit o dostępie dashboard pod adresem "wyplutym" przez konsolę. Przechodzimy pod adres i naszym oczom pokaże się
Operacje w dashboard przedstawię w osobnym wpisie. Przejdźmy teraz do innego modelu OpenStack All in one - opartego na kontenerach.
OpenStack Kolla na dockerach (All in one)
Projekt Kolla OpenStack to trochę inne spojrzenie na wdrożenie chmury. Nie wymaga on wysokich umiejętności od osoby przeprowadzającej wdrożenie. Proces jest automatyzowany dzięki ansible. Jednak nie można lekceważyć go jako pełno prawnego produktu. Gdyż przeniesieni środowiska na kontenery daje nam pewną elastyczność na rozwój środowiska i jego rozbudowę. Backup, wymiana uszkodzonych modułów/kontenerów też jest prostsza.
Spójrzmy zatem jak przeprowadzić konfigurację i wdrożenie OpenStack AIO z Kolla. Wersję którą weźmiemy na warsztat to wersja Pike OpenStack.
Przygotowania
Będziemy potrzebowali "czystej" wersji systemu Ubuntu Server najlepiej 16.04 LTS z dwoma fizycznymi interfejsami sieciowymi (choć to też nie problem). Instalację i konfigurację niżej przedstawioną możemy przeprowadzić na fizycznym komputerze lub maszynie wirtualnej takiej jak VirtualBox, KVM, QEMU, VMware, Hyper-V itp. Ja instalacje wykonałem w VirtualBox.
Poniższy materiał zawiera trochę teorii oraz przeprowadza nas przez proces konfiguracji maszyny wirtualnej.
Pozwolicie, że proces instalacji systemu Ubuntu pominę w tym opisie i przejdziemy od razu do konfiguracji środowiska. Dla mniej wprawionych z VirtualBox zapraszm do innych moich wpisów lub materiału video poniżej
A zatem mamy nasz system Ubuntu.
Musimy zaktualizować nasz system i listę pakietów.
sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y
Do środowiska OpenStack potrzebować będziemy dwie karty sieciowe dalej opisywane jako internal network i neutron external network, musimy je odpowiednio skonfigurować. Karta pierwsza może przyjąć adres DHCP lub static oczywiście z puli adresowej waszej sieci - u mnie to adres 10.255.255.2/24. W przypadku DHCP warto zadbać o to by adres zawsze był przydzielany ten sam, by po restarcie nie okazało się, że nasz OpenStack przestanie działać.
Druga karta będzie zarządzana przez OpenStack. Nie jest to żadna wiedza tajemna, a informacja o tym jest w pliku konfiguracyjnym. Dlatego wiec ustawimy ja w trybie manual. Da nam to pewność, że interface będzie zawsze UP po restarcie maszyny. Zatem konfigurujemy nasze karty sieciowe.
sudo nano /etc/network/interfaces
Plik interfaces może wyglądać podobnie do przedstawionego poniżej.
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp0s3 iface enp0s3 inet static address 10.255.255.3 netmask 255.255.255.0 gateway 10.255.255.1 dns-nameservers 208.67.222.222 213.155.166.100 1.1.1.1 1.0.0.1 auto enp0s8 iface enp0s8 inet manual
Re starujemy sieć lub system
sudo systemctl restart networking # lub sudo reboot
Może się tak zdarzyć, że po restarcie interfejsu (usługi networking) otrzymamy dwa adresy IP na interfejsie naszej karty sieciowej.
Wtedy wydajemy polecenia:
sudo ip a f dev <nazwa_interfejsu_sieciowego>; sudo systemctl restart networking
Po zmianie adresu IP może nas wyrzucić z konsoli SSH, jeżeli adres statyczny ustawimy na inny niż ten z DHCP po którym mamy aktywną sesję.
Pozostaje nam zainstalowanie tylko brakującej części oprogramowania a która, jest wymagana do uruchomienia środowiska.
sudo apt install python-jinja2 python-pip libssl-dev -y sudo -H pip install -U pip ansible kolla-ansible
Konfiguracja
Kopiujemy przykładowe pliki konfiguracyjne (lepiej nazwać je wzorcowe) i dokonujemy ich edycji.
sudo cp -r /usr/local/share/kolla-ansible/etc_examples/kolla /etc/kolla sudo nano /etc/kolla/globals.yml
Bardziej szczegółowo plik omawiam w filmie poniżej
kolla_base_distro: "ubuntu" kolla_install_type: "binary" openstack_release: "pike" kolla_internal_vip_address: "10.255.255.4" kolla_external_vip_address: "10.255.255.5" network_interface: "[nazwa pierwszej karty sieciowej]" neutron_external_interface: "[nazwa drugiej karty sieciowej]" kolla_enable_tls_external: "yes" kolla_external_fqdn_cert: "{{ node_config_directory }}/certificates/haproxy.pem"
Powyżej zamiana opcji/miejsc, która w tym ćwiczeniu powinna nas interesować.
Dodatkowo tworzymy plik konfiguracyjny dla naszego modułu nova.
sudo mkdir -p /etc/kolla/config/nova sudo vim /etc/kolla/config/nova/nova-compute.conf # w pliku nova-compute dodajemy poniższą zawartość [libvirt] virt_type = qemu cpu_mode = none
Jeżeli daliśmy yes dla TSL (nie jest on wymagany, możemy dać "no") to musimy wygenerować certyfikaty:
sudo kolla-ansible certificates
Możemy też wygenerować sobie certyfikaty let's encrypt by nasz certyfikat był rozpoznawany. Wystarczy tylko wygenerowane przez let's certyfikaty nazwać idenctycznie jak te wygenerowane przez kolla-ansible
Generujemy hasła dla naszego środowiska (plik po wygenerowaniu można edytować przed rozpoczęciem konfiguracji naszego środowiska w celu ustawienia prostszego hasła dla konta administratora itp).
sudo kolla-genpwd
Przygotowanie serwera czyli bootstrap. Zainstaluje on wszystkie niezbędne skłądniki sprawdzi też czy konfiguracja jest prawidłowa:
sudo kolla-ansible -i /usr/local/share/kolla-ansible/ansible/inventory/all-in-one bootstrap-servers
Pobieramy obrazy Dockera oraz po zakończeniu sprawdzamy czy mamy je wszystkie.
sudo kolla-ansible pull sudo docker images
Dokonujemy sprawdzenia przed finalnym wdrożeniem. Zweryfikuje poprawność plików konfiguracyjnych pakietów itp.
sudo kolla-ansible prechecks -i /usr/local/share/kolla-ansible/ansible/inventory/all-in-one
Wdrożenie
Nasze wdrożenie. Tu będą już stawiane kontenery i odpowiednio konfigurowane.
sudo kolla-ansible deploy -i /usr/local/share/kolla-ansible/ansible/inventory/all-in-one
Sprawdzamy kontenery - wszystkie powinny mieć cały czas status UP
sudo docker ps -a
Generujemy plik admin-openrc który jest plikiem konfiguracyjnym. Na podstawie tego pliku będziemy przełączać się na odpowiedni kontekst do projektów w OpenStack i wydawać komendy w CLI.
sudo kolla-ansible post-deploy
Instalujemy klienta CLI dla OpenStack.
sudo -H pip install -U python-openstackclient
Edytujemy plik /usr/local/share/kolla-ansible/init-runonce
sudo /usr/local/share/kolla-ansible/init-runonce
Konfigurację tego pliku ustawiamy na:
EXT_NET_CIDR='10.255.225.0/24' EXT_NET_RANGE='start=10.255.255.6,end=10.255.255.36' EXT_NET_GATEWAY='10.255.255.1'
Oczywiście jeżeli chcecie możecie zwiększyć ilość urządzeń w sieci. Uzyskamy to po przez podanie większego zakresu w zmiennej EXT_NET_RANGE.
Przełączamy się na root i ładujemy kontekst pracy z OpenStack i uruchamiamy edytowany przed chwilą skrypt.
sudo su - source /etc/kolla/admin-openrc.sh cd /usr/local/share/kolla-ansible/ ./init-runonce exit
Horizon jest dostępny pod adresem podanym w kolla_external_vip_address: a hasło dla konta admin możemy po brać stąd:
sudo grep keystone_admin_password /etc/kolla/passwords.ym
W kolejnym odcinku poruszamy się po naszym dashboard :)
Bibliografia
- https://docs.openstack.org/kolla/pike/ zródło z dnia 3 kwi 2018.
- https://docs.openstack.org/tacker/queens/install/kolla.html zródło z dnia 3 kwi 2018.
- http://www.digmyth.com/2017/11/09/kolla-Pike-on-CentOS7.3/ zródło z dnia 3 kwi 2018.
- https://qiita.com/raichi/items/71869442e8101fd38230 zródło z dnia 3 kwi 2018.
- https://opensource.com/resources/what-is-openstack
- https://www.openstack.org/software/
- https://www.redhat.com/en/topics/openstack