Toto je starší verze dokumentu!
Protože OpenVZ už pomalu dosluhuje a nové distribuce jej nepodporují, museli jsme začít řešit přechod na nějakou novější virtualizační technologii. Linux kernel už sám o sobě kontejnery do jisté míry podporuje, takže jsme se rozhodli toho využít. Dále jsme potřebovali nějakou distribuci, kterou bychom použili na nodech místo Scientific Linux 6 s OpenVZ kernelem. Volba padla na NixOS, který umožňuje deklarativně definovat konfiguraci OS a služeb a pak jej opakovatelně sestavit. A protože máme specifické nároky, stavíme si nad NixOS vlastní distribuci.
vpsAdminOS je založen na
NixOS a not-os.
Je to live distribuce sloužící jako hypervizor pro provoz kontejnerů.
vpsAdminOS je funkčností srovnatelný s OpenVZ Legacy. Jako základ pro provoz VPS
(kontejnerů) slouží LXC, které spravujeme vlastní utilitou osctl
z vpsAdminOS. vpsAdminOS umožnuje propojení s vpsAdminem, naším administračním
rozhraním, nicmeně je plně použitelný i bez něj a měla by to být plnohodnotná
náhrada za OpenVZ Legacy, pokud jej někde používáte. Podporována je i
migrace kontejnerů
z OpenVZ Legacy na vpsAdminOS.
Přechod celé naší infrastruktury se všemi VPS na vpsAdminOS je rozdělen do několika fází:
Snažíme se, aby migrace na vpsAdminOS byla bezproblémová, tj. aby se jednoho dne VPS vypl na OpenVZ nodu a spustil na vpsAdminOS, aniž by člen něco musel řešit. Nicméně, záleží na tom, co ve VPS provozujete. Proto všem doporučujeme vyzkoušet si VPS nad vpsAdminOS v testovacím prostředí, abychom mohli případné nedostatky vyřešit a při následné migraci produkčních VPS se jim vyhnout.
VPS ve vpsAdminOS využívají user namespace, tzn. root ve VPS má UID 0, ale z pohledu hostitelského systému na nodu je to nějaké jiné číslo, např. 666000. Každý člen má pak přidělen svůj user namespace, což zvyšuje úroveň izolace – v případě nějaké chyby se útočník ani po úniku z kontejneru na node nedostane k datům jiných členů.
Každý člen má přidělen user namespace o velikosti 524288 uživatelských ID. Tzn. ve VPS můžete využít UID/GID od 0 do 524287. Všechny VPS daného člena jsou umístěny do tohoto user namespace. V budoucnu přibyde možnost si user namespace spravovat a nastavovat si vlastní mapování UID/GID, což umožní izolovat od sebe i VPS patřící jednomu členovi, případně vybrané UID/GID sdílet.
User namespace podstatně ovlivňují sdílení dat mezi VPS a NASem. Aktuálně není možné připojit NAS do VPS běžící na vpsAdminOS tak, aby měl VPS k datům přístup. Řešit se to bude tak, že u každého NAS datasetu budete mít na výběr, jaké mapování UID/GID má používat. Data pak budou přistupná jen z VPS, které mají nastaveno příslušné mapování.
Změny týkající se VPS nezávisle na distribuci:
/proc/cpuinfo
a /proc/stat
zobrazují všechny CPU, které má node k dispozici, využít však lze max 8 z nich (800% CPU)/proc/meminfo
2)dmesg
je zakázán, neboť není virtualizovánifconfig
z net-tools
, používá se ip
z iproute2
./etc/network/interfaces.{head,tail}
nejsou vkládány přímo do /etc/network/interfaces
, ale načteny přes source
, tzn. už neovlivňují podobu /etc/network/interfaces
tak jako s vzctl./etc/network/interfaces.d
, jeho obsah je načten před /etc/network/interfaces.tail
.venet0
.Aby si všichni členové mohli vyzkoušet, jak se VPS nad vpsAdminOS chová, k dispozicí je testovací prostředí, tzn. takový druhý playground node, na kterém si každý může vytvořit VPS. Ve formuláři na vytváření VPS stačí vybrat lokaci Staging.
Podmínky provozu jsou podobné jako pro playground VPS, akorát to může být trochu divočejší, tj. nehlášené výpadky, restarty pokud potřebujeme něco aktualizovat. Každý má k dispozici 8 CPU, 4 GB RAM, 120 GB disku, 4 veřejné IPv4 adresy, 32 IPv6 /64 adres a tyto prostředky lze rozdělit mezi 4 VPS.
Vytvořit můžete buď nové VPS, nebo si vyzkoušet naklonovat produkční VPS. Při klonování dojde k odstranění mountů, protože přístup k NASu ještě není dořešen, viz user namespaces.
Pokud tvoje distribuce zatím není mezi podporovanými, můžeš nám pomoct ji zprovoznit, nebo nezbývá než počkat, až to za tebe udělá někdo jiný, viz otevřené požadavky.
Šablony distribucí se vytvářejí skripty ve vpsadminos-templates. Pokud tam tvá distribuce není, je potřeba ji zde přidat.
Dále je nutné vyřešit podporu dané distribuce ve vpsAdminOS tak, aby byl
osctl
schopen zvenku nastavovat síť a IP adresy. Stačí postupovat
podle návodu. Je potřeba
implementovat podporu jak pro bridged veth, tak routed veth, viz
dokumentace vpsAdminOS
a zdrojové kódy.
Features lze zapínat/vypínat jednotlivě. Při jakékoliv změně dojde k restartu VPS.
Doporučujeme nastavit jen features, které opravdu potřebujete.
Podle vlastního uvážení:
proc_meminfo_read()
z LXCFS: https://github.com/lxc/lxcfs/blob/master/bindings.c#L3174