Proxmox to platforma przeznaczona do wirtualizacji i konteneryzacji zasobów które, mamy uruchomione na naszych maszynach baremetal. W tym artykule przyjrzymy się takiej konfiguracji w moim labie domowym (jednak łatwo to potem przenieść na większą skalę).
W artykule tym biorą udział 4 hosty na których zbudujemy klaster. Jeden host nasz gość specjalny zostanie na razie ukryty w tej konfiguracji i ujawnię go w trakcie artykułu :).
Środowisko proxmox
Zatem spójrzmy na moje środowisko dostępne w domowym "laboratorium" w którym to będę przeprowadzał operację uruchomienia klastra proxmox składającego się z trzech nodów (węzłów). Klaster ten wykorzystuje do tworzenia moich materiałów na youtube i komercyjnych szkoleń.
Węzły (nody) - proxmox specyfikacja.
Dla osób, które lubią parametry i dokładne szczegóły przedstawię rezultat polecenia hwinfo ze wszystkich trzech węzłów mojego klastra proxmox:
Węzeł pierwszy (pve01) - dwa dyski SSD po 230 GB / 8GB RAM
root@pve01:~# hwinfo --short
cpu:
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
graphics card:
Intel Iris Plus Graphics 640
storage:
Intel Sunrise Point-LP SATA Controller [AHCI mode]
Kingston Technology Company U-SNS8154P3 NVMe SSD
network:
wlp58s0 Intel Wireless 8265 / 8275
eno1 Intel Ethernet Connection (4) I219-V
enx00e04c6804df Realtek RTL8153 Gigabit Ethernet Adapter
network interface:
lo Loopback network interface
eno1 Ethernet network interface
vmbr0 Ethernet network interface
enx00e04c6804df Ethernet network interface
wlp58s0 Ethernet network interface
disk:
/dev/nvme0n1 Kingston Technology Company U-SNS8154P3 NVMe SSD
/dev/sdb SYNOLOGY Storage
/dev/sda Samsung SSD 860
partition:
/dev/nvme0n1p1 Partition
/dev/nvme0n1p2 Partition
/dev/nvme0n1p3 Partition
/dev/sda1 Partition
/dev/sda2 Partition
usb controller:
Intel JHL6340 Thunderbolt 3 USB 3.1 Controller (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP USB 3.0 xHCI Controller
bios:
BIOS
bridge:
Intel Sunrise Point-LP PCI Express Root Port #1
Intel Sunrise Point LPC Controller/eSPI Controller
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP PCI Express Root Port #8
Intel Sunrise Point-LP PCI Express Root Port #6
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP PCI Express Root Port #9
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
hub:
Linux Foundation 2.0 root hub
VIA USB2.0 Hub
Linux Foundation 3.0 root hub
Linux Foundation 2.0 root hub
VIA USB3.0 Hub
Linux Foundation 3.0 root hub
memory:
Main Memory
unknown:
FPU
DMA controller
PIC
Keyboard controller
PS/2 Controller
Realtek RTS5229 PCI Express Card Reader
Intel Sunrise Point-LP PMC
Intel Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
Intel Sunrise Point-LP CSME HECI #1
Intel Sunrise Point-LP Thermal subsystem
Intel Sunrise Point-LP SMBus
Węzeł drugi (pve02) - wa dyski SSD po 230 GB / 8GB RAM
root@pve02:~# hwinfo --short
cpu:
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
graphics card:
Intel Iris Plus Graphics 640
storage:
Intel Sunrise Point-LP SATA Controller [AHCI mode]
network:
wlp58s0 Intel Wireless 8265 / 8275
eno1 Intel Ethernet Connection (4) I219-V
enx00e04c680f23 Realtek RTL8153 Gigabit Ethernet Adapter
network interface:
wlp58s0 Ethernet network interface
eno1 Ethernet network interface
vmbr0 Ethernet network interface
enx00e04c680f23 Ethernet network interface
lo Loopback network interface
disk:
/dev/sdb WDC WDS240G2G0B-
/dev/sdc SYNOLOGY Storage
/dev/sda KINGSTON SV300S3
partition:
/dev/sdb1 Partition
/dev/sdb2 Partition
/dev/sda1 Partition
/dev/sda2 Partition
/dev/sda3 Partition
usb controller:
Intel JHL6340 Thunderbolt 3 USB 3.1 Controller (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP USB 3.0 xHCI Controller
bios:
BIOS
bridge:
Intel Sunrise Point-LP PCI Express Root Port #1
Intel Sunrise Point LPC Controller/eSPI Controller
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP PCI Express Root Port #8
Intel Sunrise Point-LP PCI Express Root Port #6
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
hub:
Linux Foundation 2.0 root hub
VIA VL813 Hub
Linux Foundation 3.0 root hub
Linux Foundation 2.0 root hub
VIA VL813 Hub
Linux Foundation 3.0 root hub
memory:
Main Memory
unknown:
FPU
DMA controller
PIC
Keyboard controller
PS/2 Controller
Realtek RTS5229 PCI Express Card Reader
Intel Sunrise Point-LP PMC
Intel Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
Intel Sunrise Point-LP CSME HECI #1
Intel Sunrise Point-LP Thermal subsystem
Intel Sunrise Point-LP SMBus
Węzeł trzeci (pve03) - wa dyski SSD po 230 GB / 8GB RAM
root@pve03:~# hwinfo --short
cpu:
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz, 3400 MHz
graphics card:
Intel Iris Plus Graphics 640
sound:
Intel Sunrise Point-LP HD Audio
storage:
Intel Sunrise Point-LP SATA Controller [AHCI mode]
network:
wlp58s0 Intel Wireless 8265 / 8275
eno1 Intel Ethernet Connection (4) I219-V
enx00e04c680432 Realtek RTL8153 Gigabit Ethernet Adapter
network interface:
eno1 Ethernet network interface
wlp58s0 Ethernet network interface
vmbr0 Ethernet network interface
enx00e04c680432 Ethernet network interface
lo Loopback network interface
disk:
/dev/sdb WDC WDS240G2G0B-
/dev/sdc SYNOLOGY Storage
/dev/sda Samsung SSD 860
partition:
/dev/sdb1 Partition
/dev/sdb2 Partition
/dev/sda1 Partition
/dev/sda2 Partition
/dev/sda3 Partition
usb controller:
Intel JHL6340 Thunderbolt 3 USB 3.1 Controller (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP USB 3.0 xHCI Controller
bios:
BIOS
bridge:
Intel Sunrise Point-LP PCI Express Root Port #1
Intel Sunrise Point LPC Controller/eSPI Controller
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Sunrise Point-LP PCI Express Root Port #8
Intel Sunrise Point-LP PCI Express Root Port #6
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
Intel JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
hub:
Linux Foundation 2.0 root hub
VIA USB2.0 Hub
Linux Foundation 3.0 root hub
Linux Foundation 2.0 root hub
VIA USB3.0 Hub
Linux Foundation 3.0 root hub
memory:
Main Memory
bluetooth:
Intel Bluetooth wireless interface
unknown:
FPU
DMA controller
PIC
Keyboard controller
PS/2 Controller
Realtek RTS5229 PCI Express Card Reader
Intel Sunrise Point-LP PMC
Intel Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
Intel Sunrise Point-LP CSME HECI #1
Intel Sunrise Point-LP Thermal subsystem
Intel Sunrise Point-LP SMBus
Jak można wyczytać z tej krótkiej specyfikacji nie są to jakieś mega mocne maszyny, rzekłbym takie w sam raz na domowe "laboratorium" pod wirtualizację. Sa to trzy komputerki wyglądem bardzo zbliżone do tego https://www.x-kom.pl/p/475883-nettop-mini-pc-intel-nuc-i7-8559u-25sata-m2-box.html
Ja w tym przypadku poszukałem tańszych odpowiedników na allegro - kości ram i dyski zakupiłem osobno, a w większości z zasobów prywatnych uzupełniłem braki by konfiguracja była w miarę identyczna.
Dodatkowy storage (przestrzeń dyskowa) w postaci serwera synology w celu zagwarantowania pewnego rodzaju HA - ale o tym jeszcze sobie porozmawiamy w tym artykule i jak to możemy zapewnić w naszym klastrze.
Instalacja proxmox
Proces instalacji jest prosty. Najważniejszą konfiguracje robi się już na działającym serwerze więc sprowadza on się do przeklikania naszego instalatora gdzie wybieramy kartę sieciową dla naszego głównego połączenia (main), adres IP, usera, hasło. Oczywiście będę operację instalacji wykonywał na trzech hostach - pve01, pve02 i pve03.
Na początek po zbootowaniu naszego obrazu z nośnika USB / ISO przywita nas panel wyboru instalacji w trybie graficznym lub tekstowym (gdybyś miał problemy z wyświetlaniem grafiki przejdź do instalacji w trybie tekstowym)
Jeżeli podczas instalacji, już na samym początku pojawi się okno o braku akceleracji maszyn wirtualnych, sprawdź czy w bios masz włączoną tą opcję. Po prostu przerwij instalację i sprawdź ustawienia BIOS. Kontynuacja z tym komunikatem będzie oznaczała brak prawdziwej wirtualizacji - jedynie emulacja z qemu i konteneryzacja z LXC/LXD
Kolejnym krokiem jest wybór dysku na którym zainstaluję się system operacyjny jakim jest proxmox. Po kliknięciu w options możemy bardziej skonfigurować podział naszego dysku. Ja tu unikam tworzenia jakich macierzy i tym podobne ponieważ HA będzie gwarantować mi klaster proxmox sam w sobie. Popsicle / Stracenie jednego węzła nie będzie u mnie bardzo obciążające. Jednak jeżeli zamierzasz produkcyjnie wykorzystywać proxmox warto skonfigurować i zainstalować go na konfiguracji RAID
Możemy ustawić takie parametry jak hdsize, swapsize maxroot minfree i mazvz
Po konfiguracji naszego dysku dla systemu ustawiamy lokacja i czas aktualny dla naszego komputera / systemu operacyjnego - względem własnej lokalizacji.
Ustawiamy hasło dla naszego użytkownika root oraz podajemy adres email.
Po konfiguracji naszego usera przechodzimy do ustawień sieciowych. Tu należy zwrócić uwagę na nasze ustawienia. Ja w swoje konfiguracji posiadam dwie karty sieciowe. Wybieramy właściwą i sprawdźmy ustawienia. Wbrew pozorom nie są one ustawieniami z DHCP. Zdarzyło mi się, że miałem tu mix ustawień z dwóch różnych sieci. Dlatego warto sprawdzić czy wartości są prawidłowe. By potem uniknąć grzebania w plikach konfiguracyjnych systemu operacyjnego.
Po akceptacji ustawień sieci mamy swoiste podsumowanie, oraz opcję automatycznego restartu po instalacji.
Po kliknięciu INSTALL proces instalacji zaczyna się i może zająć od kilku do kilkunastu minut.
Po procesie instalacji mamy komunikat o zakończeniu instalacji i wizard odczega 10 sekund po czym automatycznie zrestartuje komputer. Tutaj musimy być uważni by po komunikacie wyciągnąć nośnik USB/ISO
Jak nasz system już się uruchomi przywita nas komunikatem na jakim adresie IP jest dostępny nasz panel dla naszego proxmox.
Logujemy się do panelu akceptując połączenie w naszej przeglądarce internetowej
Uwierzytelnianie mamy na poziomie PAM Linux a zatem login i hasło to nasz użytkownik root oraz hasło które podaliśmy podczas instalacji.
Po zalogowaniu może pokazać się komunikat o braku subskrypcji na proxmox. Możemy ten komunikat zignorować i później zakupić licencje proxmox
Oto nasz panel proxmox do zarządzania serwerem lub naszym klastrem. Jak zalogujemy się do każdego z naszych trzech węzłów, to przywita nas podobny obraz. Proxmox w pojedynczej instalacji, zaraz świeżo po wyciągnięciu ISO juz działa w jednym klastrze o nazwie datacenter. Dlatego moje trzy węzły będą miały domyślny klaster jedno węzłowy a tylko będą różnić się nazwą naszego hosta.
Po kliknięciu też na nazwę zmieni się nasze menu z menu klastra na menu hosta
Menu naszego klastra - zaraz po instalacji jest to klaster jednowęzłowy (bez HA)
Menu ustawień naszego węzła
Konfiguracja klastra proxmox
Ok przystąpmy zatem do konfiguracji naszego klastra i węzłów proxmox. Dodajmy certyfikat jeżeli posiadasz. Ja dodam dla mojej domeny *.koska.in przechodzę do menu wezła i klikam SYSTEM -> CERTIFICATE a potem w oknie UPLOAD CUSTOM CERTIFICATE
Dodajemy nasz certyfikat po przez wklejenie lub otwarcie odpowiedniego pliku z certyfikatem i kluczem.
Certyfikat został załadowany co potwierdza nasz panel
Przejdźmy teraz do ustawień sieciowych - ja mam dodatkowa kartę sieciowa któa jest podłaczona do sieci 192.168.1.0/24 a zatem dokonfiguruje mostek sieciowy dla tej karty. Klikamy na Menu naszego węzła SYSTEM -> NETWORK a potem na liście interfejsów klikamy przycisk CREATE i z listy wybieramy LINUX BRIDGE
W konfiguracji naszego LINUX BRIDGE ustawiamy name według konwencji w proxmox nadajemy adres IPv4/CIDR, gateway pozostawiam pusty bo mam juz jedna kartę z ustawionym GW. Wskazuje na koniec BRIDGE PORTS, czyli nazwę mojego interfejsu na podstawie którego stworze LINUX BRIDGE
Po ustawieniu mojego LINUX BRIDGE nie pozostaje mi nic innego jak zaakceptować konfigurację poprzez przycisk APPLY CONFIGURATION
Po akceptacji naszej konfiguracji zobaczymy że nasz nowy interfejs jest ACTIVE z statusem YES zarówno bridge jak i wcześniejsza karta sieciowa.
Tworzymy klaster proxmox
Możemy stworzyć nasz klaster proxmox - wybieramy dowolny węzeł który nam za inicjalizuje klaster. Ja wybrałem host pve01 (ale można wybrać dowolny). Przechodzimy do menu klastra i tam szukamy opcji CLUSTER. Klikamy na przycisk CREATE CLUSTER
Nadajemy nazwę dla naszego klastra oraz wybieramy karty sieciowe na podstawie których będzie się komunikował nasz klaster z innymi węzłami
Po kliknięciu w create czekamy na komunikat TASK OK i możemy zamknąc okno.
Lub przejrzeć STATUS klastra i inicjalizacje naszej konfiguracji
Po zamknięciu okna możemy wyświetlić CLUSTER JOIN INFORMATION - ta informacje pomożem nam połaczyć inne węzły do naszego klastra. Kopiujemy te informacje i przechodzimy do pve02 a potem pve03
Na pve02 przechodzimy do menu klastra DATACENTER -> CLUSTER i wybieramy przycisk JOIN CLUSTER
W oknie JOIN CLUSTER podajemy wymagane informacje oraz podajemy hasło do naszego klastra z hosta na którym wykonywaliśmy inicjalizację. Po wypełnieniu klikamy JOIN HOMEPROXMOX - w moim przypadku (u Ciebie ta nazwa będzie zależna od nazwy klastra jaką wybrałeś)
Po kliknieciu JOIN ... pokaże się okno informujące nas o całym procesie połączeniowym.
Jeżeli po przejściu na status pokaze nam sie Connection error - to oznaka że nasze ustawiania się przeładował i my musimy nasz panel odświeżyć
Po przeładowaniu strony możemy sobie zobaczyć że teraz na DATACENTER zawiera nazwę naszego klastra i widzimy też nasze węzły uczestniczące w klastrze.
To koniec inicjalizacji naszego klastra. Zajmijmy się teraz konfiguracja naszego Storage tego lokalnego jak i sieciowego. Zobaczmy jakie mamy opcje storage w naszym klastrze proxmox.
Klaster Proxmox - nasz storage
Z pewnych ograniczeń związanych z moim środowiskiem domowego laboratorium nie przetestuję wszystkich rodzajów storage w proxmox ale uważam że dam dobre overview na ustawienia i możliwości konfiguracji naszego data storage.
Proxmox plus synology - na pierwszy ogień NFS, SMB
W mojej konfiguracji wykorzystam serwer NAS synology, dla osób lubiących parametry przedstawiam specyfikację konfiguracji mojego NAS synology:
Storage w synology to dyski o pojemności 1.8T, łącznie 5 dysków. Co daje przestrzeń o pojemności 7.3 TB. W zupełności wystarczy to na domowy backup, kilka lokalnych maszyn wirtualnych oraz storage dla innych maszyn wirtualnych.
Zobaczymy jaki storage sieciowy mamy do dyspozycji w proxmox, i powiem jest ich trochę sporo i każdy znajdzie coś dla siebie.
Skonfigurujemy zatem najbardziej popularne i chyba dostępne w każdym domowym lab czyli SAMBA i NFS. Będziemy potrzebować osobnego usera tak by śledzić logi naszego połączenia z proxmox i w łatwiejszy sposób wychwycić jakiekolwiek błędy konfiguracyjne.
Tworzymy odpowiednie foldery współdzielone gdzie będziemy osobno przechowywać dane dla VM po protokole SMB i NFS.
Pamiętajmy o odpowiednim nadaniu uprawnień tak byśmy mogli się połączyć
Tak samo dla NFS jak i SMB
Oczywiście samo obsługa SAMBY musi być włączona na naszym serwerze synology
NFS rownież - nie zapomnijmy o tym tak by niepotrzebnie nie debugować problemów z połączeniem z powodu braku usługi
Dlaczego w klastrze proxmox w ogóle potrzebny nam storage taki jak wspomniany wyżej NFS i SMB. Niech jako prosty przykład posłuży chociażby nasz obraz ISO z Ubuntu. Jeżeli wgramy go na storage który mamy do dyspozycji od samego początku i zwie się on local. To ISO z instalatorem naszego Ubuntu będzie dostępne tylko dla tego węzła na którym to wgram - w tym przypadku będzie to pve01.koska.in.
Przesyłamy ISO z naszego lokalnego komputera (mamy też możliwość wskazania url - jakby nasz lokalny komputer znajdował się w innej lokalizacji niż nasz klaster)
To po przesłaniu pliku ISO gdy przejdziemy do innego węzła na nasz storage local zobaczymy, że tego ISO tam nie ma i akcję musimy powtórzyć dla wszystkich węzłów.
Więc dodajmy w konfiguracji nasz SMB i NFS. Zanim to zrobię przygotuję sobie FQDN nfs.koska.in oraz smb.koska.in w celu łatwiejszej konfiguracji i unikania podawania adresów IP. W tym celu wykorzystam moja konfigurację w terraform do zarządzania strefą koska.in.
Dokonam zmian w pliku konfiguracyjnym i całość prześlę do GIT.
Git jest monitorowany przez Jenkins do którego jest podpięty pipeline który wykona mi odpowiednie testy i wdroży zmianę automatycznie, bez mojej ingerencji.
Oczywiście w każdej chwili mogę zweryfikować status moich zmian w danym jobie. W tym przypadku moje dwa rekordy zostały dodane, plus też jeden skasowałem. Oczywiście usunięcie była tu świadome i zbiegło się z moją operacją dodnia nfs.koska.in oraz smb.koska.in.
Zweryfikuję czy moj host widzi już te zmiany. I jak widać wszystko jest ok zatem mogę przejść do konfiguracji.
Operacja dodania już sama w sobie jest prosta - dodawanie NFS. Uzupełniamy odpowiednio ID, server, export i content - w tym przypadku nfs będzie zawierał tylko dyski kontenerów i maszyn wirtualnych.
Podobna konfiguracja jest w SMB. Uzupełniam wszystkie wymagane pola i zapisuję konfigurację.
Storage dodany na poziomie Klastra Home Proxmox jak widzimy został dodany poprawnie i jest widziany przez wszystkie klastry.
W tym wpisie to wszystko. W kolejnej części zajmiemy się innymi rodzajami storage, uruchomieniem maszyny wirtualnej, backup i replikacji oraz zautomatyzujmy nasz klaster, tak by za dużo w nim nie klikać. Pozdrawiam
Comments