Kontejner – na pásu: CRI-O nyní standardně v OpenShift Container Platform 4

Platforma Red Hat OpenShift Container Platform 4 umožňuje zautomatizovat vytváření hostitelů pro nasazení kontejnerů, a to jak v infrastruktuře poskytovatelů cloudových služeb, na virtualizačních platformách, nebo v bare-metal systémech. Abychom vytvořili skutečně cloudovou platformu, museli jsme mít pod přísnou kontrolou všechny používané prvky, což zvýšilo spolehlivost složitého procesu automatizace.

Kontejner – na pásu: CRI-O nyní standardně v OpenShift Container Platform 4

Evidentním řešením se stalo použití jako standardu Red Hat Enterprise Linux CoreOS (varianty Red Hat Enterprise Linux) a CRI-O, a to z následujících důvodů...

Jelikož je námořní tematika velmi vhodná pro hledání analogií při vysvětlování fungování Kubernetes a kontejnerů, pokusíme se přiblížit obchodní problémy, které řeší CoreOS a CRI-O, na příkladu vynálezu Brunela pro výrobu bloků na plachty. V roce 1803 byla před Markem Brunelem postavena úloha vyrobit 100 tisíc bloků na plachty pro potřeby rostoucího námořního flotily Velké Británie. Plachtový blok je typ zařízení, které se používá pro uchycení lan k plachtám. Až do začátku 19. století byly tyto bloky vyráběny ručně, ale Brunel dokázal automatizovat výrobu a začít vyrábět standardizované bloky pomocí strojů. Automatizace tohoto procesu vedla k tomu, že všechny bloky byly prakticky identické, mohly být snadno vyměněny v případě poruchy a mohly být vyráběny ve velkém množství.

A teď si představte, že by Brunel musel tuto práci vykonat pro 20 různých modelů lodí (verzí Kubernetes) a pro pět různých planet se zcela odlišnými mořskými proudy a větry (cloudoví poskytovatelé). Navíc bylo nutné, aby všechny lodě (OpenShift clustry), bez ohledu na planety, po nichž se pluje, se chovaly stejně z pohledu kapitánů (operátorů spravujících provoz klastrů). Pokračujíce s námořními analogiemi, kapitánům lodí vůbec nezáleží na tom, jaké bloky na plachty (CRI-O) se používají na jejich lodích – pro ně je nejdůležitější, že tyto bloky jsou silné a spolehlivé.

Před OpenShift 4, jako cloudovou platformou, se nachází velmi podobný obchodní úkol. Nové uzly by měly být vytvářeny v okamžiku vytvoření clusteru, v případě selhání jednoho z uzlů, nebo při škálování clusteru. Při vytváření a inicializaci nového uzlu by měly být odpovídajícím způsobem nakonfigurovány i kritické komponenty hostitele, včetně CRI-O. Tak jako v každé jiné výrobě je potřeba na začátku dodat „suroviny“. V případě lodí vystupují suroviny jako kov a dřevo. Nicméně, při vytváření hostitele pro nasazení kontejnerů v clusteru OpenShift 4 je třeba mít na vstupu konfigurační soubory a poskytované API servery. Poté OpenShift zajistí potřebnou úroveň automatizace po celou dobu životního cyklu a nabídne nezbytnou produktovou podporu pro koncové uživatele, čímž splácí investice do platformy.

OpenShift 4 byla navržena tak, aby umožnila pohodlnou aktualizaci systému po celou dobu životního cyklu platformy (pro verze 4.X) pro všechny hlavní poskytovatele cloudového výpočtu, virtualizačních platforem a dokonce bare metal systémů. Pro to musí být uzly vytvářeny na základě zaměnitelných prvků. Když cluster potřebuje novou verzi Kubernetes, získává také odpovídající verzi CRI-O na CoreOS. Vzhledem k tomu, že verze CRI-O je přímo vázána na Kubernetes, značně to zjednodušuje jakékoli manipulace za účelem testování, odstraňování problémů nebo podpory. Tento přístup také snižuje náklady pro koncové uživatele a Red Hat.

To je principiálně nový pohled na clustery Kubernetes, který zakládá základ pro plánování nových velmi užitečných a atraktivních funkcí. CRI-O (projekt otevřeného kontejneru Container Runtime Interface — Open Container Initiative, zkráceně CRI-OCI) se ukázal jako nejvhodnější volba pro hromadné vytváření uzlů, které je nezbytné pro práci s OpenShift. CRI-O nahradí dříve používaný engine Docker a nabídne uživatelům OpenShift ekonomický, stabilní, jednoduchý a nudný – ano, neslyšeli jste špatně – nudný kontejnerový engine, navržený speciálně pro práci s Kubernetes.

Svět otevřených kontejnerů

Svět už dávno směřuje k otevřeným kontejnerům. Ať už v Kubernetes, nebo na nižších úrovních, vývoj kontejnerových standardů vede k vzniku ekosystému inovací na každé úrovni.

Všechno začalo vytvořením iniciativy Open Containers Initiative v červnu 2015.Na této rané fázi byly formulovány specifikace kontejnerového obrazu (image) a prostředí pro běh (runtime).To umožnilo zajistit, že nástroje mohou používat jednotný standard kontejnerových obrazů a jednotný formát pro práci s nimi. Později byly přidány specifikace distribuce (distribution),což uživatelům umožnilo snadno si vyměňovat kontejnerové obrazy..

Poté komunita Kubernetes vyvinula jednotný standard připojitelného rozhraní (pluggable interface), nazvaný Container Runtime Interface (CRI).Díky tomu mohli uživatelé Kubernetes připojit různé enginy pro práci s kontejnery navíc k Dockeru.

Inženýři Red Hat a Google si všimli existující potřeby na trhu po kontejnerovém enginu, který by mohl přijímat požadavky od Kubeletu prostřednictvím protokolu CRI, a představili kontejnery, které byly kompatibilní s výše zmíněnými specifikacemi OCI. Tak vznikl OCID.Ale počkejte, vždyť jsme říkali, že tento materiál bude věnován CRI-O? Ve skutečnosti ano, právě s vydáním verze 1.0 byl projekt přejmenován na CRI-O.

Obr. 1.

Kontejner – na pásu: CRI-O nyní standardně v OpenShift Container Platform 4

Inovace s CRI-O a CoreOS

S uvedením platformy OpenShift 4 došlo ke změně kontejnerového enginu, který se ve defaultní platformě používal, a místo Dockeru přišel CRI-O, který nabídl ekonomické, stabilní, jednoduché a nudné prostředí pro spuštění kontejneru, které se vyvíjí paralelně s Kubernetes. To výrazně usnadňuje údržbu a konfiguraci clusteru. Konfigurace kontejnerového enginu a hostitele, jakož i jejich správa se stává automatizovanou v rámci OpenShift 4.

Počkejte, jak to?

Přesně tak, s příchodem OpenShift 4 už není potřeba se připojovat k jednotlivým hostitelům a instalovat kontejnerový engine, konfigurovat úložiště, nastavovat servery pro vyhledávání nebo konfigurovat síť. Platforma OpenShift 4 byla kompletně přepracována pro použití Operator Framework nejen z pohledu uživatelských aplikací, ale také z hlediska základních operací na úrovni platformy, jako je nasazení obrazů, konfigurace systému nebo instalace aktualizací.

Kubernetes vždy dovoloval uživatelům řídit aplikace definováním požadovaného stavu a používáním bratrů (Controllers), aby bylo zajištěno, že skutečný stav co nejvíce odpovídá určenému stavu. Tento přístup s využitím stanoveného stavu a skutečného stavu otevírá velké možnosti jak z pohledu vývoje, tak z pohledu operací. Vývojáři mohou definovat požadovaný stav, předat jej operátorovi ve formátu YAML nebo JSON, a poté může operátor vytvořit v provozním prostředí potřebný instance aplikace, přičemž pracovní stav tohoto instance bude plně odpovídat určenému.

Používáním operátorů (Operators) v platformě, OpenShift 4 přináší tuto novou paradigmu (využívající koncepci stanoveného a skutečného stavu) do správy RHEL CoreOS a CRI-O. Úkoly konfigurace a správy verzí operačního systému a kontejnerového enginu jsou automatizovány pomocí tzv. operátoru konfigurace stroje (Machine Config Operator, MCO). MCO výrazně usnadňuje práci administrátorům clusteru, fakticky automatizuje poslední fáze instalace a také následné operace po instalaci (denní operace). To vše činí OpenShift 4 skutečnou cloudovou platformou. K tomu se dostaneme později.

Spuštění kontejnerů

Uživatelé měli možnost využívat engine CRI-O na platformě OpenShift od verze 3.7 ve stavu Tech Preview a od verze 3.9 ve stavu Generally Available (aktuálně podporováno). Dále Red Hat masivně používá CRI-O pro spuštění produkčních pracovních zatížení v OpenShift Online od verze 3.10. To vše umožnilo týmu pracujícímu na CRI-O získat obrovské zkušenosti s masovým spouštěním kontejnerů na velkých clusterech Kubernetes. Abychom získali základní představu o tom, jak Kubernetes využívá CRI-O, podívejme se na následující ilustraci, která znázorňuje princip fungování architektury.

Obr. 2. Jak fungují kontejnery v clusteru Kubernetes

Kontejner – na pásu: CRI-O nyní standardně v OpenShift Container Platform 4

CRI-O usnadňuje tvorbu nových kontejnerových hostitelů synchronizací celé vrstvy při inicializaci nových uzlů a při vydávání nových verzí platformy OpenShift. Revize celé platformy umožňuje provádět transakční aktualizace a rollbacky, a také zabraňuje vzájemným blokacím v závislostech mezi jádrem kontejnerového hostitele, kontejnerovým enginem, uzly (Kubelets) a master uzlem Kubernetes. Při centralizované správě všech komponent platformy, s kontrolou a správou verzí, je vždy možné sledovat jasnou cestu z stavu A do stavu B. To usnadňuje proces aktualizací, zvyšuje bezpečnost, zlepšuje reportování výkonu a pomáhá snížit náklady na aktualizace a instalaci nových verzí.

Demonstrace síly výměnných prvků

Jak již bylo zmíněno, použití Machine Config Operator pro správu hostitele kontejneru a kontejnerového enginu v OpenShift 4 zajišťuje nový úroveň automatizace, která nebyla dříve možná na platformě Kubernetes. Abychom demonstrovali nové možnosti, ukážeme, jak byste mohli provádět změny v souboru crio.conf. Aby nedošlo k záměně v terminologii, snažte se soustředit na výsledky.

Nejprve vytvořme to, čemu říkáme konfigurace běhového prostředí kontejneru – Container Runtime Config. Považujte to za nějaký zdroj Kubernetes, který představuje konfiguraci pro CRI-O. Ve skutečnosti jde o specializovanou verzi toho, čemu se říká MachineConfig, která představuje jakoukoli konfiguraci nasazovanou na stroji RHEL CoreOS v rámci clusteru OpenShift.

Tento vlastní zdroj, nazývaný ContainerRuntimeConfig, byl navržen tak, aby usnadnil administrátorům clusteru konfiguraci CRI-O. Je to dostatečně výkonný nástroj, který lze použít pouze na určených uzlech v závislosti na nastaveních MachineConfigPool. Považujte to za skupinu strojů, které slouží pro stejný účel.

Věnujte pozornost dvěma posledním řádkům, které hodláme změnit v souboru /etc/crio/crio.conf. Tyto dva řádky jsou velmi podobné řádkům v souboru crio.conf, a to:

vi ContainerRuntimeConfig.yaml

Výstup:

apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
 name: set-log-and-pid
spec:
 machineConfigPoolSelector:
   matchLabels:
     debug-crio: config-log-and-pid
 containerRuntimeConfig:
   pidsLimit: 2048
   logLevel: debug

Nyní tento soubor odešleme do clusteru Kubernetes a zkontrolujeme, že byl skutečně vytvořen. Všimněte si, že práce probíhá přesně tak, jako u jakéhokoliv jiného zdroje Kubernetes:

oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig

Výstup:

NAME              AGE
set-log-and-pid   22h

Poté, co jsme vytvořili ContainerRuntimeConfig, je třeba změnit jeden z MachineConfigPools, abychom dali Kubernetu najevo, že chceme tuto konfiguraci aplikovat na určitou skupinu strojů v clusteru. V tomto případě změníme MachineConfigPool pro master uzly:

oc edit MachineConfigPool/master

Výstup (pro přehlednost zachována hlavní podstata):

...
metadata:
 creationTimestamp: 2019-04-10T23:42:28Z
 generation: 1
 labels:
   debug-crio: config-log-and-pid
   operator.machineconfiguration.openshift.io/required-for-upgrade: ""
...

V tuto chvíli MCO začíná vytvářet nový soubor crio.conf pro cluster. Celý konfigurační soubor si můžete prohlédnout pomocí Kubernetes API. Nezapomeňte, že ContainerRuntimeConfig je pouze specializovaná verze MachineConfig, takže můžeme vidět výsledek, když se podíváme na potřebné řádky v MachineConfigs:

oc get MachineConfigs | grep rendered

Výstup:

rendered-master-c923f24f01a0e38c77a05acfd631910b                  4.0.22-201904011459-dirty 2.2.0 16h
rendered-master-f722b027a98ac5b8e0b41d71e992f626                  4.0.22-201904011459-dirty 2.2.0 4m
rendered-worker-9777325797fe7e74c3f2dd11d359bc62                  4.0.22-201904011459-dirty 2.2.0 16h

Všimněte si, že získaný konfigurační soubor pro master uzly má novější verzi než původní konfigurace. Pro zobrazení jej spustíte následující příkaz. Mimochodem, poznamenejme, že to môže byť jeden z nejlepších jednorázových skriptů v historii Kubernetes:

python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))" $(oc get MachineConfig/rendered-master-f722b027a98ac5b8e0b41d71e992f626 -o YAML | grep -B4 crio.conf | grep source | tail -n 1 | cut -d, -f2) | grep pid

Výstup:

pids_limit = 2048

Nyní se ujistíme, že konfigurace byla aplikována na všechny master uzly. Nejprve získáme seznam uzlů v clusteru:

oc get node | grep master

Výstup:

ip-10-0-135-153.us-east-2.compute.internal   Ready master 23h v1.12.4+509916ce1

ip-10-0-154-0.us-east-2.compute.internal     Ready master 23h v1.12.4+509916ce1

ip-10-0-166-79.us-east-2.compute.internal    Ready master 23h v1.12.4+509916ce1

Nyní prozkoumejme nainstalovaný soubor. Uvidíte, že soubor byl aktualizován podle nových hodnot direktiv pid a debug, které jsme uvedli ve zdroji ContainerRuntimeConfig. Samá elegance:

oc debug node/ip-10-0-135-153.us-east-2.compute.internal — cat /host/etc/crio/crio.conf | egrep 'debug||pid’

Výstup:

...pids_limit = 2048
...
log_level = "debug"
...

Veškeré tyto změny v clusteru byly provedeny i bez spuštění SSH. Celá práce byla provedena prostřednictvím dotazů k master uzlu Kubernetes. To znamená, že tyto nové parametry byly nakonfigurovány pouze na master uzlech. Pracovní uzly přitom zůstaly nezměněny, což demonstruje výhody metodologie Kubernetes využívající dané a aktuální stavy v souvislosti s hostiteli kontejnerů a kontejnerovými enginy se zaměnitelnými prvky.

Výše uvedený příklad ukazuje možnost provádět změny v malém clusteru OpenShift Container Platform 4 se třemi pracovními uzly nebo v obrovském produkčním clusteru se 3000 uzly. V obou případech bude objem práce stejný - a velmi malý - stačí nastavit soubor ContainerRuntimeConfig a změnit jednu značku (label) v MachineConfigPool. A to můžete provést s jakoukoli verzí platformy OpenShift Container Platform 4.X použité v Kubernetes během celého jejího životního cyklu.

Technologické společnosti často rostou tak rychle, že nedokážeme vysvětlit, proč vybíráme určité technologie pro základní komponenty. Kontejnerové enginy byly historicky tím komponentem, se kterým uživatelé interagují přímo. Jak popularita kontejnerů logicky začínala s příchodem kontejnerových enginů, uživatelé k nim často projevují zájem. To je další důvod, proč se Red Hat rozhodl pro CRI-O. Kontejnery se vyvíjejí, přičemž dnes je hlavní pozornost věnována orchestraci, a dospěli jsme k závěru, že CRI-O poskytuje nejlepší zkušenost při práci s OpenShift 4.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster