Zresetować je do ustawień fabrycznych
Panel routera znajduje się na IP http://192.168.1.1/
login:hasło root:admin
Żeby wejść na panel switcha trzeba sprawdzić w panelu routera w Status->Device List jakie switch dostał IP:
Po resecie powinny być takie ustawienia routera:
- release FreshTomato v.2022.6
- ruter/WiFi 192.168.1.1 user/pwd/wifi-key: klasterek/klasterek/klasterek SSID FreshTomato06
Switch też zresetować, tam ważne żeby na początku nie było ustawionych vlanów w zakładce VLAN->802.1Q VLAN, czyli w ten sposób jest dobrze:
Izolujemy sieć WiFi od sieci providerskiej ethernet
Przydzielamy inną podsieć dla bridge br1
wewnątrz routera, do którego będą podłączone urządzenia w sieci WiFi.
W panelu routera w zakładce Basic->Network należy stworzyć bridge br1
i przypisać go do WiFi w zakładce Advanced->Virtual Wireless.
Włączamy w routerze funkcję routowania między podsieciami 192.168.1.0/24 i 10.0.1.0/24.
W produkcyjnym datacenter to słaby pomysł i można tą funkcję na koniec konfiguracji wyłączyć, ale tu potrzebujemy z naszego komputera dostępu jednocześnie do interfejsów WiFi RbPi i do panela switcha.
Jest to zakładka Advanced->LAN Access w panelu routera.
Komputer używany do konfiguracji może być podłączony przez sieć WiFi albo po kablu do routera. Warto w przypadku głowienia się nad niespodziewanymi problemami pamiętać, że komputer podłączony po kablu dostaje ip z podsieci 192.168.1.0/24, a po WiFi z podsieci 10.0.1.0/24.
Teraz trzeba zrobić restart routera opcją Reboot na dole lewego menu bo inaczej te ustawienia się nie zastosują
ost61: 192.168.1.61 ost62: 192.168.1.62 ost63: 192.168.1.63 ost64: 192.168.1.64
Raspberry pi imager jest przetestowany https://www.raspberrypi.com/software/
Wybieramy w nim Raspberry Pi, Ubuntu Server 23.10 (64-bit) i włożoną do komputera kartę microsd.
Po kliknięciu Next pokaże się pytanie o wgranie wstępnych ustawień żeby nie trzeba było ręcznie włączać ssh z poziomu offline, metodą klawiatura + monitor.
Wybieramy Edit Settings, ustawiamy login i hasło na stronie General, a włączamy ssh na stronie Services, opcja Password Authentication jest ok.
Zapisujemy, klikamy Yes na poprzednim pytaniu i czekamy na pobranie i zapisanie systemu na kartę.
Tak zapisujemy wszystkie 4 karty dla Raspberry Pi.
Gotowe karty wstawiamy do Raspberry Pi i idziemy dalej.
Na początku nie ma ustawionych statycznych IP, więc trzeba sprawdzić na routerze jakie IP dostały Raspberry Pi z DHCP.
W menu Status->Device List po lewej stronie sprawdzamy IP, jakie Raspberry Pi dostały z DHCP na routerze.
Logujemy się na nie przez SSH, np. jeśli IP jakiegoś RbPi to 192.168.1.21 to ssh [email protected]
w cmd, albo dowolnym programem do ssh.
Teraz zajmujemy się konfiguracją wszystkich Raspberry Pi, następującą część robimy 4 razy, raz na każdym Raspberry Pi, można usiąć w kilka osób i robić równolegle.
warto stworzyć swap bo malinki 4GB potrafią zapchać ram podczas instalacji kolla-ansible.
sudo fallocate -l 10G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
ważna sprawa. żeby veth miały różne adresy MAC trzeba im wygenerować unikalne seedy.
sudo rm /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id
sudo cp /etc/machine-id /var/lib/dbus/machine-id
warto wyłączyć pytanie o hasło do sudo, żeby ciągle nie wpisywać. Możliwe nawet, że ansible czy coś innego wymaga wyłączonego pytania o hasło.
w pliku /etc/sudoers zmienić linię z %sudo na
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
ustawienie hostname.
hostnamectl set-hostname ost61
w /etc/hosts trzeba wpisać hostname #127.0.0.1 ost61
dodać kilka folderów z binarkami do path
sudo tee -a ~/.bashrc << EOT
export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin
EOT
konfiguracja eth0 dla networkd
sudo tee /etc/systemd/network/20-wired.network << EOT
[Match]
Name=eth0
[Network]
DHCP=yes
EOT
instalowanie aktualizacji i kilku rzeczy które się potem przydają
sudo apt remove unattended-upgrades -y
sudo apt update && sudo apt upgrade -y
sudo apt install sshpass lm-sensors net-tools qemu-kvm -y
Jeśli trafi się błąd o certyfikatach, których okres ważności jeszcze się nie zaczął, to pewnie klient ntp nie działa poprawnie.
Zostało to zaobserwowane przy instalowaniu systemu i używaniu raspberry pi w sieci akademika riviera.
zmodyfikować /etc/sysctl.conf
net.ipv4.ip_forward=1
i zastosować zmiany
sudo sysctl -p
Należy wrzucić pliki z folderu flat w tym repozytorium na dysk każdego RbPi.
Pliki z folderu flat/etc/netplan
do folderu /etc/netplan
na RbPi, a z folderu flat/etc/systemd/network
do folderu /etc/systemd/network
Te pliki konfigurują RbPi w sieć tzw. flat, czyli bez vlanów. Nie ma izolacji w warstwie Ethernet między tenantów, będzie ona póki co robiona w openstacku przez vxlany, czyli pakowanie Ethernetu w ramki IP.
Następnie najprościej RbPi zrestartować i powinno być dostępne na przydzielonym w pliku /etc/netplan/50-cloud-init.yaml statycznie IP.
Jeśli tak jest to gratulacje, można zaczynać instalację samego openstacka.
Openstacka instaluje się z oddzielnej maszyny managementowej, my zrobimy ją jako maszynę wirtualną w virtualbox.
Instalujemy w virtualbox Ubuntu 23.10 Desktop i teraz działamy na nim.
Warto się upewnić że jesteśmy w stanie się z niego skomunikować z każdym Raspberry Pi.
Od tej pory operujemy na maszynie managementowej.
Ona będzie sama się łączyć i instalować wszystko na skonfigurowanych przez nas wcześniej hostach.
instalowanie potrzebnych rzeczy
sudo apt remove unattended-upgrades -y
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg sshpass git python3-dev libffi-dev gcc libssl-devpython3-venv
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker ubuntu
tworzenie venv dla instalatora openstacka, czyli kolla-ansible i instalowanie go
python3 -m venv master-kolla
source master-kolla/bin/activate
pip install -U pip
pip install 'ansible-core>=2.14,<2.16'
pip install git+https://opendev.org/openstack/kolla-ansible@master
sudo mkdir -p /etc/kolla
sudo chown ubuntu:ubuntu /etc/kolla
przygotowanie konfiguracji kolla-ansible
cp -r master-kolla/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp master-kolla/share/kolla-ansible/ansible/inventory/multinode .
kolla-ansible install-deps
kolla-genpwd
tee ansible.cfg << EOT
[defaults]
host_key_checking=False
pipelining=True
forks=100
EOT
sudo tee /etc/kolla/config/nova/nova-compute.conf << EOT
[DEFAULT]
resume_guests_state_on_host_boot = true
EOT
sudo mkdir /etc/kolla/config/neutron
sudo tee /etc/kolla/neutron-server/ml2_conf.ini << EOT
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
[ml2_type_vlan]
network_vlan_ranges = physnet1:100:200
[ml2_type_flat]
flat_networks = physnet1
EOT
ustawić w pliku z hasłami, czyli /etc/kolla/passwords.yml, hasło do logowania do m.in. panelu w przeglądarce
keystone_admin_password: jakies_zapamietywalne_haslo_np_admin
ustawić kilka ustawień openstacka w pliku /etc/kolla/globals.yml
kolla_base_distro: "debian"
openstack_tag_suffix: "-aarch64"
kolla_internal_vip_address: "192.168.1.60"
network_interface: "veth0"
neutron_external_interface: "veth1"
nova_compute_virt_type: "kvm"
enable_neutron_provider_networks: "yes"
Kopiujemy plik multinode
ze specyfikacją hostów RbPi należących do klastra.
cp multinode multinode.bak
I go edytujemy, ustawiamy tam jedno RbPi jako węzeł control i network, a wszystkie jako węzeł compute.
Generalnie modyfikujemy tylko początek pliku, reszta jest napisana tak, żeby na podstawie początku przydzieliła konkretne pomniejsze role hostom na bazie ról compute, network albo control.
Przykładowy początek konfiguracji:
# do każdego węzła przy pierwszym wystąpieniu dopisać dyrektywy ansible_user/password/become (np.):
[control]
ost04 ansible_user=ubuntu ansible_password=ubuntu ansible_become=true
[network]
ost04
[compute]
ost[01:03] ansible_user=ubuntu ansible_password=ubuntu ansible_become=true
ost04
instalacja openstacka na hostach
kolla-ansible -i multinode bootstrap-servers
kolla-ansible -i multinode prechecks
kolla-ansible -i multinode deploy
Po zainstalowaniu warto wiedzieć że na stronie http://192.168.1.60 znajduje się ładny GUI panel zarządzania stworzonym przez nas datacenter.
Długo się ładuje, ale działa.
Teraz podmieniamy niektóre pliki (te, które są obecne w folderze vlanned/etc/systemd/network
) na wersje z zawartą konfiguracją vlanów.
Po podmianie można zrobić restart RbPi komendą reboot
, albo zrestartować tylko networking komendami:
ip link set down brmux
ip link del dev brmux
systemctl restart systemd-networkd
Po tych komendach RbPi będzie do czasu dodania VLANów na switchu dostępne tylko przez swoje IP WiFi i to tylko dla komputerów podłączonych przez WiFi, nie przez ethernet. Dodajemy VLANy w panelu switcha w dwóch miejscach.
Najpierw w zakładce VLAN -> 802.1Q VLAN.
Włączamy obsługę vlanów przełącznikiem Enable na górze, a potem dodajemy pojedynczo konkretne vlany na portach.
Na obrazku jest pokazana konfiguracja dla VLAN 2. Ustawimy jeszcze dla VLAN 100 to samo, ale na porcie 5 ustawimy Not Member.
Untagged oznacza tagowanie wchodzącego ruchu z danego portu jako wybrany VLAN i zdejmowanie taga z wychodzącego ruchu.
Not Member oznacza, że ten VLAN nawet nie wychodzi tym portem.
Następnie w zakładce VLAN -> 802.1Q PVID Setting zmieniamy id vlanu do tagowania ruchu wchodzącego z routera czyli na porcie 5 switcha.
Można tworzyć w panelu http://192.168.1.60 maszyny wirtualne rozłożone między Raspberry Pi, oraz tworzyć i przypisywać im subnety.