W oczekiwaniu na kolejne warsztay z proxmox które odbęda się 13.11.2024 zapraszam na artykuł o tym jak zautomatyzować sobie konfiguracje klastra proxmox. Taka automatyzacja może nam posłużyć w przypadku tworzenia naszej testowej konfiguracji lub w przypadku gdy obecna konfiguracja ulegnie awarii i szybko będziemy musieli przystąpić do odtworzenia naszego środowiska. Zatem zaczynamy.
Nudny proces instalacji proxmox
Zawsze gdy musiałem instalować proxmox na nowo zastanawiałem się czy nie można byłoby ten proces jakoś zautomatyzować. Wsadzić pendrive do USB i zapomnieć o całej konfiguracji. Nie przechodzić przez nudny proces instalacji i konfiguracji czystego środowiska. Wybierania standardowych ustawień.
Mówie tu o środowisku testowym gdzie testowałem różne konfiguracje raz z lepszym czy gorszym rezultatem i byłem zmuszony do przeinstalowania proxmoxa. Lub wpadł w ręce moje nowe sprzęt i chciałem na szybko zobaczyć jak będzie działał na nim proxmox za dedykowaną sprzętową wirtualizacją. I na samą myśl o ponownym procesie instalacji telepotało mną. Bo znów będę musiał podłączać mój przenośny monitor, mini klawiaturę itp itd.
Zatem szukając w internecie rozwiązania trafiłem na proces automatycznej instalacji proxmoxa zwany Automated Installation. Proces ten opisywałem już w swoim poprzednim artykule zatytułowanym Proxmox automatyzacja instalacji. Który to idealnie wpasował sie w moje potrzeby. Zatem szybko tworzymy nasz specjalny plik który nazywa się answer.toml - poniżej przykład konfiguracji takiego pliku:
Taki utworzony plik dodajemy do naszego iso przez narzędzie proxmox-auto-install-assistant:
Wynikowy obraz wypalamy na naszym USB. To oczywiście tak szybko w skrócie, jak wspomniałem opisuje to już w swoim poprzednim artykule zatytułowanym Proxmox automatyzacja instalacji. Jednak to nie koniec automatyzacji jaka możemy zrobić. Pójdźmy dalej.
Automatyzacja konfiguracji klastra proxmox.
Idąc dalej tym krokiem, skoro zrobiłem już automatyczna instalację systemu i nawet zbudowałem pod to środowisko na, którym mogę prowadzić warsztaty czy po prostu testować proxmoxa to czemu nie pójść dalej. Oczywiście ty też możesz moją automatyzacje przetestować - zbudowana jest na bezie Terraform i cloud init. Kod źródłowy znajdziesz na bitbucket. Całość bazuje na zagnieżdżonej wirtualizacji i działa dość płynnie w DigitalOcean. Więc uruchamiasz usługę i płacisz za nią tyle ile używasz bez konieczności płacenie miesięcznego commitmentu. Size według moje opini optymalny do testowania to c-32-intel który kosztuje 1$ za godzinę działania. Oczywiście można znaleźć coś tańszego.
Wróćmy jednak do tematy i pytania czy naszą konfigurację można zautomatyzować - pewnie że można. Musimy wybrać tylko odpowiednie narzędzie i ruszamy. Będę bazował na założeniach i poprzedniej ręcznej konfiguracji mojego klastra w maszynie wirtualnej w DigitalOcean z poprzednich warsztatów (tak nawiasem mówiąc warsztaty do obejrzenia na tej stronie). Przypomnienie jaką mamy konfigurację dostępnych interfejsów sieciowych.
Mamy bazowa konfiguracje która zrobiliśmy przez nasz plik answer.
Proxmox automatyczna konfiguracja interfejsu sieciowego
Na poprzednich warsztatach zaczęliśmy od podłączenia naszego klastra, jeszcze wtedy trzy osobne węzły do jednej wspólnej sieci nazwanej CLUSTERBR1. Jak taki interfejs stworzyć za pomocą polecenia CLI bez klikania w GUI? Czego będziemy potrzebować?
Ogólnie da się to zrobić przez modyfikację pliku /etc/network/interfaces dodając kolejny wpis o naszym bridge interfejsie. Czyli coś takiego:
Ale oczywiście nie po to pisze o automatyzacji by teraz to edytować ręcznie. Rezygnujemy z GUI ale bez przesady. Wybierzmy lepsze narzędzie niż nasz terminal CLI i edytor nano. Zatem zwalniamy mechanizm blokujący i rozpoczynamy losowanie. Dzisiejsze litery to A, N, S, I, B, L, E. Nasz tasks/main.yml z roli networking:
Tasks ten jak możemy zobaczyć na początku sprawdza czy nasz katalog /etc/network istniej, a potem dodaje zdefiniowane interfejsy poprzez loop instrukcję. Jak zostanie dokonana zmiana mamy zdefiniowaną instrukcje notify w naszej konfiguracji.
Do tego będziemy potrzebować handlers/main.yml z roli networking:
To nic innego jak byśmy w terminalu wydali systemctl restart networking.
A i warto pamiętać o przygotowaniu naszego pliku do sterowania naszymi hostami bo nie chcielibyśmy aby wszystkie miały ten sam adres IP. Zatem nasz plik z inventories/dev/host_vars/proxmox1.yml - jako przykład
Uruchamiamy nasz kod w ansible do tworzenia dodatkowego interfejsu sieciowego bridge:
Sprawdźmy konfiguracje logując się na naszego proxmox01 - interfejs sieciowy dodany.
Proxmox automatyzacja tworzenia klastra
Po skonfigurowaniu naszych interfejsów sieciowych należałoby połączyć nasze węzły w klaster dzięki któremu będą one widziane jako jedna całość. Narzędzie do zarządzania naszym klastrem to pvecm (Proxmox VE Cluster Manager). Wydając polecenie:
Możemy sprawdzić czy nasz węzeł należy do jakiegoś klastra. Jak widzimy nasz węzeł nie należy do żadnego klastra. Utworzyć nasz klaster też możemy przez polecenie pvecm create.
Zacznijmy od stworzenia naszego klastra. Spójrzmy na nasz plik task/main.yml z roli proxmox/proxmox_cluster_create:
DemoCluster - to nazwa tworzonego naszego klastra. Oczywiście można to wyciągnąć jako zmienna i zapisać w pliku hosta.
--link0 - to pierwszy link w naszej konfiguracji, max możemy ustawić 8.
{{ item.address.split('/')[0] }} - odwołanie sie do adresu IP zawartego w pliku konfiguracyjnym naszego hosta w ansible.
Proxmox automatyzacja dodawania węzłów
Gdy mamy nasz klaster (DemoCluster) to dobrze jest dodać do niego węzły tak by było dostępne więcej zasobów w postaci CPU i RAM: Spójrzmy zatem na tasks/main.yml z roli copy_ssh_key:
Zadaniem tego taska w ansiblu jest przekopiowanie pliku prywatnego SSH do węzłów proxmox02 i proxmox03. Tak by można było dodać te dwa węzły automatycznie. Musimy pamiętać, że dodając węzeł do klastra musimy się uwierzytelnić, hasłem lub kluczem. Za pomocą klucza łatwiej to zautomatyzować.
Ok teraz możemy działać z naszym tasks/main.yml z roli proxmox/proxmox_cluster_add_node:
Polecenie pvecm add pozwala dodać nam nasz węzeł do aktywnego wcześniej stworzonego klastra:
192.168.255.100 - to adres naszego wczesniej stworzonego DemoCluster
--link0 {{ item.address.split('/')[0] }} - tu ustawiamy ze zmiennych adres naszego aktualnego węzła.
--use_ssh true - dajemy informacje że będziemy korzystać podczas przyłączania naszego węzła z autoryzacji SSH
--force - jak nasz węzeł będzie już istniał w tej konfiguracji to nie wyświetlaj błędu.
do całości jest ładowany ssh-agent tak by użyć klucza proxmox wgranego wcześniej
Limitujemy to do jednego hosta, tak by nie było problemu dodawanie dwóch węzłów w tym samym czasie. Oczywiście od strony ansible możesz to zautomatyzować przez parametr scope - który będzie limitowało operacje i wykonywał jedna po drugiej (dopiero gdy pierwszy host skończy operacje). Ponawiamy operacje na drugim hoscie wskazując poprzez opcję --limit "proxmox3"
Sprawdzamy status klastra po dodaniu obu węzłów poleceniem pvecm status
Tak oto mamy skonfigurowany klaster DemoProxmox z trzema węzłami. Pójdźmy dalej tym krokiem i przeprowadźmy konfigurację naszego sieciowego storage.
Proxmox automatyzacja sieciowego starage
Skonfigurujemy nasz storage NFS tak byśmy mogli go wykorzystać do konfiguracji naszej maszyny wirtualnej - mamy już przygotowany skrypt który to robi - potrzeba jeszcze tylko naszego network storage. Użyjemy do tego polecenia pvesm
add - dodanie naszego storage
nfs - typ naszego storage
{{ item.name }} - nazwa pobierana z wartości zdefiniowanej w host_vars
--export - exportowany udział zdalny
--path - miejsce montowania w klastrze proxmox (na każdym węźle)
--content - zawartość naszego storage, czyli jakie obiekty będziemy mogli tu przechowywać.
NFS storage dodany. A na ostatnich warsztatach potrzebowaliśmy naszego snippet dla local. Zmodyfikujemy nasz local storage za pomocą set.
Dodatkowa konfiguracja naszego pliku hosta została wzbogacona o kilka parametrów.
Podsumowanie
Zróbmy na koniec podsumowanie użytych narzędzi pvecm i pvesm. W Proxmox VE są kluczowymi narzędziami wiersza poleceń, które umożliwiają zarządzanie klastrem oraz interakcję z API Proxmox.
pvecm (Proxmox VE Cluster Manager)
pvecm to narzędzie służące do zarządzania klastrem w Proxmox VE. Pozwala na tworzenie, konfigurowanie i monitorowanie klastra
Główne funkcje pvecm:
Tworzenie klastra: Inicjalizacja nowego klastra Proxmox.
Dodawanie węzłów: Przyłączanie nowych serwerów do istniejącego klastra.
Usuwanie węzłów: Bezpieczne usuwanie węzłów z klastra.
Monitorowanie: Sprawdzanie stanu klastra i węzłów.
Zarządzanie quorum: Konfiguracja ustawień quorum dla zapewnienia spójności danych.
pvesm (Proxmox VE Storage Manager)
pvesm to narzędzie wiersza poleceń umożliwiające zarządzanie magazynami danych w Proxmox VE.
Główne funkcje pvesm:
Dodawanie magazynów: Konfiguracja nowych magazynów, takich jak NFS, iSCSI, Ceph i inne.
Usuwanie magazynów: Usuwanie istniejących konfiguracji magazynów.
Wyświetlanie magazynów: Wyświetlanie informacji o aktualnych konfiguracjach magazynów.
Zarządzanie zawartością: Definiowanie typów danych, które mogą być przechowywane (np. obrazy maszyn, pliki ISO, kopie zapasowe).
Obsługiwane typy magazynów:
Directory (dir): Lokalne katalogi na węźle Proxmox.
LVM: Magazyn oparty na Menedżerze Woluminów Logicznych.
NFS: Udziały sieciowe Network File System.
iSCSI: Sieciowy interfejs SCSI.
Ceph: Rozproszony system przechowywania danych.
ZFS: System plików i menedżer woluminów.
GlusterFS: Skalowalny system plików sieciowych.
Zrozumienie plików konfiguracyjnych magazynów
Proxmox VE przechowuje konfigurację magazynów w pliku /etc/pve/storage.cfg. Polecenie pvesm modyfikuje ten plik w tle.
Typowe typy zawartości:
• images: Obrazy dysków maszyn wirtualnych i kontenerów.
• iso: Pliki obrazów ISO do instalacji systemów operacyjnych.
• vztmpl: Szablony dla kontenerów LXC.
• backup: Pliki kopii zapasowych tworzone przez zadania backupu Proxmox VE.
• snippets: Niestandardowe skrypty lub fragmenty kodu.
Jak widzimy w tym prostym przykładzie dzięki poleceniom pvecm i pvesm możemy zarządzać naszym klastrem Proxmox. Więcej na ten temat porozmawiamy na planowanych warsztatach. Repozytorium z konfiguracja ansible dostepne tutaj.
Commentaires