% Options for packages loaded elsewhere \PassOptionsToPackage{unicode}{hyperref} \PassOptionsToPackage{hyphens}{url} % \documentclass[ ]{article} \usepackage{amsmath,amssymb} \usepackage{lmodern} \usepackage{iftex} \ifPDFTeX \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{textcomp} % provide euro and other symbols \else % if luatex or xetex \usepackage{unicode-math} \defaultfontfeatures{Scale=MatchLowercase} \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} \fi % Use upquote if available, for straight quotes in verbatim environments \IfFileExists{upquote.sty}{\usepackage{upquote}}{} \IfFileExists{microtype.sty}{% use microtype if available \usepackage[]{microtype} \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts }{} \makeatletter \@ifundefined{KOMAClassName}{% if non-KOMA class \IfFileExists{parskip.sty}{% \usepackage{parskip} }{% else \setlength{\parindent}{0pt} \setlength{\parskip}{6pt plus 2pt minus 1pt}} }{% if KOMA class \KOMAoptions{parskip=half}} \makeatother \usepackage{xcolor} \IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available \IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} \hypersetup{ pdflang={hu-HU}, hidelinks, pdfcreator={LaTeX via pandoc}} \urlstyle{same} % disable monospaced font for URLs \usepackage[margin=3cm]{geometry} \usepackage{graphicx} \makeatletter \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} \makeatother % Scale images if necessary, so that they will not overflow the page % margins by default, and it is still possible to overwrite the defaults % using explicit options in \includegraphics[width, height, ...]{} \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} % Set default figure placement to htbp \makeatletter \def\fps@figure{htbp} \makeatother \setlength{\emergencystretch}{3em} % prevent overfull lines \providecommand{\tightlist}{% \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} \setcounter{secnumdepth}{-\maxdimen} % remove section numbering \ifLuaTeX \usepackage[bidi=basic]{babel} \else \usepackage[bidi=default]{babel} \fi \babelprovide[main,import]{magyar} % get rid of language-specific shorthands (see #6817): \let\LanguageShortHands\languageshorthands \def\languageshorthands#1{} % magyar helyesírás ellenőrzéshez (ispell) és elválasztáshoz \selectlanguage{magyar} %================================================================= % direkt ékezetes karakter beírás támogatás %------------------------------------------- \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{multirow} \usepackage{float} %================================================================ % ha ábrát akarunk beemelni, akkor használjuk a graphicx/graphics % csomagot és az \includegraphics[width=<width>]{abra.pdf} parancsot \usepackage{graphicx} %for graphics %kepek helye a gyokerhez(ehhez a file-hoz kepest) kepest \graphicspath{{./figs/}} \usepackage{fontspec, newunicodechar} % \setmainfont{Noto Sans} \newunicodechar{ű}{\H{u}} \newunicodechar{ő}{\H{o}} \ifLuaTeX \usepackage{selnolig} % disable illegal ligatures \fi \author{} \date{} \begin{document} \input{onlabmacros} \markright{Réthelyi Bálint (IZUM0B)} \begin{titlepage} %bme logo \begin{figure}[h] \centering \includegraphics[width=12cm]{bme_logo} \label{fig:bme_logo} \end{figure} \thispagestyle{empty} %cím generálás \onlabcim %\szerzo argumentumok: #1=Név, #2=Neptunkód, #3=szakirány, #4=email,#5 konzulens-1, #6 konzulens-1-email, #7 konzulens-2, #8 konzulens-2-email \onlabszerzo{Réthelyi Bálint}{IZUM0B}{Mérnökinformatikus szak}{rethelyibalint@gmail.com}{Dr. Simon Csaba}{simon@tmit.bme.hu}{Dr. Maliosz Markosz}{maliosz@tmit.bme.hu} \feladatcim{Proxmox alapú virtualizációs klaszter kiépítése a HSNLabnál} \end{titlepage} \hypertarget{bevezetuxe9s}{% \subsection{Bevezetés}\label{bevezetuxe9s}} Az önálló laboratóriumomat a TMIT-en a HSNLab-nál végeztem. A labornak a különböző kutatásokhoz van négy szervere. Ezeket a szervereket használják Kubernetes, valamint docker konténerek futtatására, és ezeken a szervereken keresztül érik el a tanszéki belső hálózatot is. Amikor átvettem a szerverek üzemeltetését, a négy gép úgynevezett \href{https://en.wikipedia.org/wiki/Bare-metal_server}{bare-metal} szerver volt, azaz a fizikai szerveren futott egy operációs rendszer és a felhasználók azt használták. A hosztokon Ubuntu 18.04 futott. \hypertarget{probluxe9muxe1k-a-jelenlegi-megolduxe1ssal}{% \subsubsection{Problémák a jelenlegi megoldással}\label{probluxe9muxe1k-a-jelenlegi-megolduxe1ssal}} Míg első elgondolásra a bare metal megoldás kényelmesnek hangzik üzemeletetési szempontból, erről kiderült, hogy azért bőven akad vele probléma.\\ A laborban sokan dolgoznak, csak a BSc és MSc hallgatók száma meghaladja a százat. A laborban az volt a szokásjog, hogy mindenki a \texttt{root} felhasználóhoz kapott hozzáférést, ezzel a \texttt{docker} használatához szükséges jogosultságok kiosztására nem volt szükség.\\ Ez a megoldás sajnos nehezebb auditálhatóságot okozott, hiszen minden felhasználó a \texttt{root} felhasználó nevében végezte a munkáját, így mindent a \texttt{root} felhasználó csinált. Minden felhasználónak különböző csomagverziók és azok függőségeire volt szüksége, ezért ezek karbantartása és kezelése is problémákat okozott, hiszen mindenkinek a fizikai gépen kellett dolgoznia. Összességében arra jutottam, hogy a virtualizáció lenne a megoldás ezekre a problémákra, melyet egy hypervisorral (vagy hiperfelügyelővel) terveztem megoldani. \hypertarget{miuxe9rt-juxf3-a-virtualizuxe1ciuxf3-a-bare-metal-szerver-helyett}{% \subsection{Miért jó a virtualizáció a bare-metal szerver helyett?}\label{miuxe9rt-juxf3-a-virtualizuxe1ciuxf3-a-bare-metal-szerver-helyett}} \hypertarget{mi-is-pontosan-egy-bare-metal-szerver}{% \subsubsection{Mi is pontosan egy bare-metal szerver?}\label{mi-is-pontosan-egy-bare-metal-szerver}} A bare-metal szerver a fizikai szervert jelenti, melyet általában egy kliens/felhasználó használ. Sokkal nagyobb számítási kapacitással rendelkezik, mint egy-egy virtuális gép, hiszen hozzáférünk a fizikai hoszt összes erőforrásához, beleértve a memóriát, a processzort, a diszkeket és a sávszélességet is. Előny még emellett, hogy teljes felügyeletünk lehet a fizikai gép felett, mind hardveresen, mind szoftveresen. \hypertarget{mi-az-a-virtualizuxe1ciuxf3}{% \subsubsection{Mi az a virtualizáció?}\label{mi-az-a-virtualizuxe1ciuxf3}} A virtualizáció egy hoszting megoldás, ami több virtuális gép párhuzamos futtatását teszi lehetővé egy fiziaki eszközön. Lehetőséget biztosít a fizikai gép erőforrásainak \emph{feldarabolására}, és ezek kiosztására a virtuális gépek között, így azok ugyanazon erőforrás részein, \emph{darabkáin} tudnak megosztozni.\\ Virtuális gépek használata elősegíti a felhasználók könnyebb auditálhatóságát, valamint minden felhasználónak egyedi, elszeparált környezetet biztosít, amit a saját igényeinek megfelelően alakíthat. Ha a virtualizációs megoldást választják, akkor a virtuális gépek kiosztását és menedzselését rábízzák egy úgynevezett hypervisorra (magyarul hiperfelügyelőre). \hypertarget{mi-az-a-hypervisor}{% \subsection{Mi az a Hypervisor?}\label{mi-az-a-hypervisor}} A hypervisor a virtualizációt lehetővé tevő szoftverek kulcsfontosságú része. A hypervisor feladata a virtuális gépek (vendéggépek) előkészítése és a virtuális gépek által elért hardver funckiók elkapása, feldolgozása. A hypervisorok egy virtualizációs réteget hoznak létre az által, hogy felügyelik, hogy a virtuális gépeken futó folyamatok mely fizikai erőforrásokhoz férnek hozzá. A gépet, amelyre a hypervisort telepítjük, gazdagépnek nevezzük, szemben a rajtuk futó virtuális vendéggépekkel. A hypervisorok a fizikai beosztásán kívül biztosíthatnak emulált hardvereket (merevlemez, egér, képernyő, hálókártya, stb.), amelyek használatával a vendéggépek úgy viselkedhetnek, mintha fizikai hardveren futnának. A VM szempontjából nincs különbség a fizikai és a virtualizált környezet között. A vendéggépek nem tudják, hogy a hypervisor virtuális környezetben hozta létre őket. Sem azt, hogy megosztják a rendelkezésre álló számítási teljesítményt. A VM-ek változatlanul az őket működtető hardveren futnak, így teljes mértékben függnek annak stabil működésétől. A hypervisornak tradícionálisan két típusa van. Az első típust bare-metal hypervisornak is szokták hívni, míg a másodikat hosztolt hypervisornak. \hypertarget{elsux151-tuxedpusuxfa-hypervisor}{% \subsubsection{Első típusú hypervisor}\label{elsux151-tuxedpusuxfa-hypervisor}} A bare-metal hypervisor egy olyan szoftverréteg, amelyet közvetlenül a fizikai kiszolgáló és az alapul szolgáló hardver fölé telepítünk. Nincs közte szoftver vagy bármilyen operációs rendszer, innen a bare-metal hypervisor (magyarul csupasz metál) elnevezés. Az 1-es típusú hypervisor kiváló teljesítményt és stabilitást biztosít, mivel nem egy operációs rendszeren belül fut. Az 1-es típusú hiypervisor egy nagyon alapszintű operációs rendszer, amelyen virtuális gépeket lehet futtatni. A fizikai gép, amelyen a hypervisor fut, csak virtualizációs célokat szolgál. Másra nem használható. \hypertarget{muxe1sodik-tuxedpusuxfa-hypervisor}{% \subsubsection{Második típusú hypervisor}\label{muxe1sodik-tuxedpusuxfa-hypervisor}} Az ilyen típusú hypervisor egy fizikai gép operációs rendszerén belül fut. Ezért nevezzük a 2. típusú hypervisorokat hosztolt hypervisoroknak. Az 1. típusú hypervisorokkal szemben, amelyek közvetlenül a hardveren futnak, a hosztolt hypervisorok alatt egy szoftverréteg található. Ebben az esetben a következőkkel rendelkezünk: \begin{itemize} \tightlist \item Egy fizikai gép. \item A hardverre telepített operációs rendszer (Windows, Linux, macOS). \item Az operációs rendszeren belül egy 2. típusú hypervisor szoftver. \item A vendég virtuális gépek tényleges példányai. \end{itemize} Ebben az esetben a fizikai hoszton is tudjuk kezelni, menedzselni a virtuális gépeinket. \hypertarget{a-modern-hypervisor}{% \subsubsection{A modern hypervisor}\label{a-modern-hypervisor}} Manapság rájöttek, hogy a bare-metal hypervisor jó tulajdonságai mellett kényelmes, ha az operációs rendszer teljes értékű. Ezért a gyártók beleépítették az operációs rendszerekbe a hypervisor modult, ezzel elérve, hogy legyen egy tradícionális operációs rendszerünk, annak minden pozitív tulajdonságával és kényelmi funkciójával, és a hypervisor is kernel szintű legyen, ne legyen még egy plusz réteg az operációs rendszer fölött. A teljesség igénye nélkül ilyen megoldások az alábbiak: \begin{itemize} \tightlist \item VMware ESXi \item Hyper-V \item Linux + KVM \item bhyve (FreeBSD) \item Hypervisor framework (Apple macOS) \item Proxmox \end{itemize} \hypertarget{modern-hypervisorok-kezeluxe9se}{% \subsubsection{Modern hypervisorok kezelése}\label{modern-hypervisorok-kezeluxe9se}} Ha elindítunk egy fizikai kiszolgálót, amelyen egy hypervisor van telepítve, egy parancssorszerű képernyő jelenik meg. Ha egy monitort csatlakoztatunk a szerverhez, akkor a hardver és a hálózat néhány részletét láthatjuk. Ez álltalában a CPU típusából, a memória mennyiségéből, az IP-címből és a MAC-címből áll. Álltalában ezek csak egyszerű szerverkonfigurációt tesznek lehetővé. Ez a dátum és az idő, az IP-cím, a jelszó stb. megváltoztatásából áll. A virtuális példányok létrehozásához egy másik gépen beállított kezelőkonzolra van szükség. A konzol segítségével csatlakozhatunk a szerveren lévő hypervisorhoz, és kezelhetjük a virtuális környezetet. A kezelési konzol lehet webalapú vagy különálló szoftvercsomag, amelyet telepíthetünk arra a gépre, amelynek távoli kezelését szeretnénk. Az egyik elvégezhető művelet a virtuális gépek fizikai kiszolgálók közötti manuális vagy automatikus áthelyezése. Ez a mozgatás a VM adott pillanatban fennálló erőforrásigényén alapul, és a végfelhasználókra gyakorolt hatás nélkül történik. Ugyanez a folyamat történik akkor is, ha egy hardverdarab vagy egy egész szerver meghibásodik. A megfelelően konfigurált kezelőszoftver a virtuális gépeket egy működő szerverre helyezi át, amint probléma merül fel. Az észlelési és helyreállítási eljárás automatikusan és zökkenőmentesen zajlik. A hypervisorok egyik legjobb tulajdonsága, hogy lehetővé teszik a fizikai erőforrások túlkiosztását. A hypervisorokkal több erőforrást rendelhetünk a virtuális gépekhez, mint amennyi rendelkezésre áll. Ha például a kiszolgálón 128 GB RAM van, és nyolc virtuális gépet használunk, mindegyikhez 24 GB RAM-ot rendelhetünk. Ez összesen 192 GB RAM-ot jelent, de maguk a VM-ek valójában nem fogják elfogyasztani a fizikai kiszolgáló mind a 24 GB-ját. A VM-ek azt hiszik, hogy 24 GB-ot használhatnak, holott valójában csak annyi RAM-ot használnak, amennyi az egyes feladatok elvégzéséhez szükséges. A hypervisor csak annyi erőforrást rendel ki, amennyi szükséges ahhoz, hogy egy példány teljes mértékben működőképes legyen. \hypertarget{modern-hypervisorok-uxe1ttekintuxe9se}{% \subsection{Modern hypervisorok áttekintése}\label{modern-hypervisorok-uxe1ttekintuxe9se}} \hypertarget{vmware-esxi}{% \subsubsection{VMware ESXi}\label{vmware-esxi}} Az ESXi egy BSD alapú operációs rendszer, melynek magja a VMkernel, mely a FreeBSD kernelén alapszik és ebbe építették bele a hypervisort. Nagyvállalati környezetben a legtöbbször ezt a megoldást a vSphere-el együtt használják, mely lehetővé teszi több ESXi hoszt klaszterizálását. Korábbi munkáim során találkoztam már a megoldással, és a tanszéki környezethez feleslegesen bonyolultnak és túlságosan robosztusnak ítéltem meg, ezért elvetettem a használatát. \hypertarget{hyper-v}{% \subsubsection{Hyper-V}\label{hyper-v}} A Hyper-V a Microsoft hypervisor megoldása, mely mind a fogyasztói Windows, mind Windows Server operációs rendszereken elérhető. Természetesen az átlag felhasználók számára jóval kevesebb funkció érhető el, mint a szerveres környezetben. A Hyper-V a Microsoft által készített NT kernel része, így Windowson lehetővé teszi virtuális gépek futtatását. Ezzel a megoldással is találkoztam már korábban, és mivel a tanszéki környezetben inkább Linuxos környezetre van szükség, feleslegesen bonyolultnak éreztem egy Windowsos réteg bevonását az ökoszisztémába. \hypertarget{linux-plusz-vanilla-kvm}{% \subsubsection{Linux plusz vanilla KVM}\label{linux-plusz-vanilla-kvm}} A KVM, azaz Kernel-based Virtual Machine (kernel alapú virtuális gép) egy virtualizációs infrastruktúra a Linux rendszermagba integrálva. Egy Hypervisor váltja a Linux rendszermagot. A KVM natív virtualizációt támogat. Egy kényelmesen használható, nyílt forráskódú megoldás, mely egy betölthető kernelmodulból, a \texttt{kvm.ko}-ból, amely az alapvető virtualizációs infrastruktúrát biztosítja, és egy processzorspecifikus modulból, a \texttt{kvm-intel.ko} vagy \texttt{kvm-amd.ko} modulból áll. Ezen a megoldáson alapszik a Proxmox VE is, amelyet végül a tanszéki rendszerek hypervisorának választottam. \hypertarget{proxmox-ve}{% \subsubsection{Proxmox VE}\label{proxmox-ve}} A Proxmox VE egy teljes körű, nyílt forráskódú, Debian alapú szervermenedzsment platform virtualizációhoz. Szorosan integrálja a KVM hypervisort és a Linux Containers (LXC), a szoftveresen definiált tárolási és hálózati funkciókat egyetlen platformon. Az integrált webalapú felhasználói felülettel könnyedén kezelhetőek a VM-ek és konténerek, a klaszterek magas rendelkezésre állása vagy az integrált katasztrófa-helyreállítási eszközök (disaster recovery tools). \hypertarget{proxmox-ve-telepuxedtuxe9se}{% \subsection{Proxmox VE telepítése}\label{proxmox-ve-telepuxedtuxe9se}} \hypertarget{beuxe1lluxedtuxe1sok-kivuxe1lasztuxe1sa}{% \subsubsection{Beállítások kiválasztása}\label{beuxe1lluxedtuxe1sok-kivuxe1lasztuxe1sa}} \hypertarget{fuxe1jlrendszer-beuxe1lluxedtuxe1sa}{% \paragraph{Fájlrendszer beállítása}\label{fuxe1jlrendszer-beuxe1lluxedtuxe1sa}} Szerettem volna, ha szoftveres raid-et használna a szerver zfs-el, mivel a zfs fájl szinten kezeli az adatokat, így sokkal több lehetőség áll rendelkezésre az adatok védelme, sebességnövelés, stb. érdekében. Hardveres raid-el szemben a szoftveres raid nincsen hardverhez kötve, így meghibásodás esetén a merevlemezeket át lehet tenni egy másik gépbe, ahol szoftveresen ugyanúgy össze lehet rakni a raid-et, és le lehet menteni az adatokat, valamint így a vendor lock-in (gyártókhoz kötés) se áll fent. A szoftveres raid rendszeresen kap frissítéseket, így az idővel jobb, hatékonyabb lehet, valamint biztonsági hibákat is lehet rajtuk javítani, ellentétben egy hardveres raid vezérlővel. Ezen kívül a zfs támogat: \begin{itemize} \tightlist \item cow (copy on write)-ot \item transparens tömörítést \item thin allocated virtuális diskek létrehozását \item snapshotokat és azok hálózaton való átküldését \end{itemize} \begin{figure} \centering \includegraphics{pics/proxmox02.png} \caption{Fájlrendszer beállítása} \end{figure} \hypertarget{huxe1luxf3zat-beuxe1lluxedtuxe1sa}{% \paragraph{Hálózat beállítása}\label{huxe1luxf3zat-beuxe1lluxedtuxe1sa}} Először szeretném, hogy a hosztot el lehessen érni rögtön a tanszéki hálózatról, valamint legyen hozzáférése az internethez is, így a korábbi interfészét szeretnénk megtartani, valamint a korábbi interfészbeállításokat is.\\ Azaz beállítom menedzsment interfésznek a korábbi interfészt (ez jelen esetben az \texttt{ens18} interfész). Hosztnévnek a \texttt{vke2.hsnlab}-ot veszem fel (ez beírásra kerül a \texttt{/etc/hosts} fájlba, valamint ez alapján lesz beállítva a hoszt hosztneve). IP címnek beállítom a korábban használt címet: \texttt{10.6.6.7/24} és átjárónak szintén a korábbi átjárót: \texttt{10.6.6.1}. \includegraphics{pics/proxmox05.png}~ \hypertarget{a-hardveres-raid-vezuxe9rlux151-uxe1tuxe1lluxedtuxe1sa-hba-muxf3dba}{% \subsubsection{A hardveres RAID vezérlő átállítása HBA módba}\label{a-hardveres-raid-vezuxe9rlux151-uxe1tuxe1lluxedtuxe1sa-hba-muxf3dba}} Mivel korábban úgy döntöttem, hogy a Proxmoxon szoftveres raid-et fogok használni, ezért át kellett kapcsoljam a hardveres RAID vezérlőt HBA módba. \hypertarget{sas-vezuxe9rlux151k-muxf3djai}{% \paragraph{SAS vezérlők módjai}\label{sas-vezuxe9rlux151k-muxf3djai}} A szerverekben több merevlemez vagy SSD együttes használatához úgynevezett SAS vezérlőt alkalmaznak (Serial Attached SCSI), mely segítségével sorosan lehet a merevlemezeket csatlakoztatni. Ezeknek a SAS vezérlőknek általában két módja van, a RAID mód és a HBA mód. RAID módban, azaz Redundant Array of Independent Disks (magyarul: független lemezek redundáns tömbje), az operációs rendszer nem fogja látni a független lemezeket, hanem egy virtuális tömbként, eszközként fogja azt kezelni. HBA módban (Host Bus Adapter) a vezérlő átadja a lemezeket az operációs rendszernek, azaz az operációs rendszer látni fogja az összes független lemezt. \end{document}