Container – pe bandă: CRI-O este acum implicit în OpenShift Container Platform 4

Platforma Red Hat OpenShift Container Platform 4 permite standardizarea creării de gazde pentru desfășurarea containerelor, inclusiv în infrastructura furnizorilor de servicii cloud, pe platforme de virtualizare sau în sisteme bare-metal. Pentru a crea, în adevăratul sens al cuvântului, o platformă cloud, a trebuit să preluăm controlul strict asupra tuturor elementelor folosite și astfel să creștem fiabilitatea complexului proces de automatizare.

Container – pe bandă: CRI-O este acum implicit în OpenShift Container Platform 4

O soluție evidentă a fost utilizarea ca standard a Red Hat Enterprise Linux CoreOS (o variantă a Red Hat Enterprise Linux) și CRI-O, și iată de ce...

Având în vedere că tema navigației este foarte potrivită pentru a găsi analogii în explicarea funcționării Kubernetes și containerelor, să încercăm să explicăm problemele de afaceri pe care le rezolvă CoreOS și CRI-O, prin exemplul inventării lui Brunel pentru fabricarea blocurilor de rigging. În 1803, Marcus Brunel a fost însărcinat cu fabricarea a 100 de mii de blocuri de rigging pentru nevoile flotei navale în expansiune a Marii Britanii. Blocul de rigging este un tip de echipament folosit pentru fixarea sforilor la vele. Până la începutul secolului 19, aceste blocuri erau fabricate manual, dar Brunel a reușit să automatizeze producția și să înceapă fabricarea blocurilor standardizate folosind mașini. Automatizarea acestui proces a însemnat că toate blocurile rezultate erau practic identice, puteau fi ușor înlocuite în cazul unor defectiuni și puteau fi produse în cantități mari.

Și acum imaginați-vă că Brunel ar fi trebuit să facă această muncă pentru 20 de modele diferite de nave (versiuni Kubernetes) și pentru cinci planete diferite cu curenți marini și vânturi complet diferite (furnizori de cloud). În plus, era necesar ca toate navele (clusterele OpenShift), indiferent de planetele pe care navighează, să se comporte uniform din perspectiva capitanilor (operatori care gestionează funcționarea clusterelor). Continuând analogia marină, capitanilor navelor nu le pasă ce blocuri de rigging (CRI-O) sunt folosite pe navele lor – pentru ei este esențial ca aceste blocuri să fie rezistente și fiabile.

În fața OpenShift 4, ca platformă de cloud, se află o problemă de afaceri foarte similară. Noduri noi trebuie să fie create în momentul formării clusterului, în caz de eșec al unuia dintre noduri, sau atunci când se scalează clusterul. Atunci când se creează și se inițializează un nou nod, componentele critice ale gazdei, inclusiv CRI-O, trebuie să fie configurate corespunzător. Ca în orice alt domeniu de producție, la început este necesar să se furnizeze „materia primă”. În cazul navelor, materiile prime sunt metalul și lemnul. Totuși, când se creează gazda pentru desfășurarea containerelor în clusterul OpenShift 4, la intrare trebuie să existe fișiere de configurare și servere API furnizate. După aceea, OpenShift va asigura nivelul necesar de automatizare pe tot parcursul ciclului de viață, oferind suportul de produs necesar pentru utilizatori finali și recuperând astfel investițiile în platformă.

OpenShift 4 a fost creat astfel încât să asigure o actualizare ușoară a sistemului pe parcursul întregului ciclu de viață al platformei (pentru versiunile 4.X) pentru toți principalii furnizori de computație în cloud, platforme de virtualizare și chiar sisteme bare metal. Pentru aceasta, nodurile trebuie să fie create pe baza unor elemente interschimbabile. Atunci când clusterul necesită o nouă versiune de Kubernetes, acesta primește și versiunea corespunzătoare de CRI-O pe CoreOS. Deoarece versiunea CRI-O este legată direct de Kubernetes, acest lucru simplifică în mare măsură orice permutări în scopul testării, depistării problemelor sau suportului. În plus, o astfel de abordare ajută la reducerea costurilor pentru utilizatorii finali și Red Hat.

Aceasta este o viziune fundamental nouă asupra clustrelor Kubernetes, care pune bazele pentru planificarea unor funcții noi, foarte utile și atractive. CRI-O (proiectul Open Container Runtime Interface — Open Container Initiative, pe scurt CRI-OCI) s-a dovedit a fi cea mai bună alegere pentru crearea masivă de noduri, necesară pentru a funcționa cu OpenShift. CRI-O va înlocui motorul Docker folosit anterior, oferind utilizatorilor OpenShift economici, stabili, simpli și plictisitori – da, nu ați auzit greșit – un motor de container plictisitor, creat special pentru a lucra cu Kubernetes.

Lumea containerelor deschise

Lumea se îndreaptă de mult timp spre containere deschise. Fie că este vorba despre Kubernetes sau la niveluri mai de bază, dezvoltarea standardelor de containere duce la apariția unui ecosistem de inovații la fiecare nivel.

Totul a început cu crearea inițiativei Open Containers Initiative în iunie 2015. În acest stadiu timpuriu al activității, au fost formulate specificațiile pentru imaginea (image) și medii de execuție (runtime). Acest lucru a permis garantarea faptului că instrumentele pot folosi un standard unic pentru imaginile containerelor și un format unic pentru a lucra cu ele. Ulterior, au fost adăugate specificațiile distribuției (distribution), ceea ce a permis utilizatorilor să facă schimb cu ușurință de imaginile containerelor..

Apoi, comunitatea Kubernetes a dezvoltat un standard unic pentru interfața pluggable, denumită Container Runtime Interface (CRI). Datorită acestui fapt, utilizatorii Kubernetes au putut conecta diverse motoare pentru a lucra cu containere în plus față de Docker.

Inginerii Red Hat și Google au observat o nevoie existentă pe piață pentru un motor de containere care să poată accepta cereri de la Kubelet prin protocolul CRI și au prezentat containere care erau compatibile cu specificațiile OCI menționate mai sus. Astfel, a apărut OCID.Dar, așteptați, pentru că am spus că acest material va fi dedicat CRI-O? Într-adevăr, așa este, doar că odată cu lansarea versiunii 1.0 proiectul a fost redenumit CRI-O.

Fig. 1.

Container – pe bandă: CRI-O este acum implicit în OpenShift Container Platform 4

Inovații cu CRI-O și CoreOS

Odată cu lansarea platformei OpenShift 4, a fost schimbat motorul de containere, utilizat implicit în platformă, iar CRI-O a înlocuit Docker, oferind un mediu economic, stabil, simplu și lipsit de agitație pentru rularea containerelor, care se dezvoltă în paralel cu Kubernetes. Aceasta simplifică semnificativ întreținerea și configurarea cluster-ului. Configurarea motorului de containere și a gazdelor, precum și gestionarea acestora devine automatizată în cadrul OpenShift 4.

Stai puțin, cum adică?

Exact așa, cu apariția OpenShift 4, acum nu mai este necesar să te conectezi la gazde separate și să instalezi motorul de containere, să configurezi stocarea, să configurezi serverele pentru căutare sau să configurezi rețeaua. Platforma OpenShift 4 a fost complet reproiectată pentru utilizarea the Operator Framework nu doar din perspectiva aplicațiilor utilizatorilor finali, ci și din perspectivă operațiunilor de bază la nivel de platformă, cum ar fi desfășurarea imaginilor, configurarea sistemului sau instalarea actualizărilor.

Kubernetes a permis întotdeauna utilizatorilor să gestioneze aplicațiile, definind starea dorită și folosind controlere (Controllers), pentru a garanta că starea efectivă se aliniază cât mai mult cu starea specificată. Această abordare folosind starea specificată și starea efectivă deschide mari oportunități atât din perspectiva dezvoltării, cât și din perspectiva operațiunilor. Dezvoltatorii pot defini starea dorită, o pot transmite operatorului sub formă de fișier YAML sau JSON, iar apoi operatorul poate crea în mediu operațional instanța necesară a aplicației, astfel încât starea de funcționare a acestei instanțe va corespunde total stării specificate.

Folosind operatorii (Operators) în platformă, OpenShift 4 aduce această nouă paradigmă (folosind conceptul de stare specificată și efectivă) în gestionarea RHEL CoreOS și CRI-O. Sarcinile de configurare și gestionare a versiunilor sistemului de operare și al motorului de containere sunt automatizate cu ajutorul așa-numitului operator de configurare a mașinilor (Machine Config Operator, MCO). MCO simplifică în mod semnificativ munca administratorului de cluster, practic automatizând ultimele etape ale instalării, precum și operațiunile ulterioare instalării (operațiuni ziua doi). Toate acestea fac din OpenShift 4 o adevărată platformă cloud. Vom discuta mai în detaliu despre acest lucru mai târziu.

Lansarea containerelor

Utilizatorii au avut posibilitatea de a utiliza motorul CRI-O în platforma OpenShift începând cu versiunea 3.7 în statut de Tech Preview și cu versiunea 3.9 în statut de Generally Available (dispune de suport în prezent). În plus, Red Hat utilizează pe scară largă CRI-O pentru lansarea sarcinilor de lucru de producție în OpenShift Online începând cu versiunea 3.10. Toate acestea au permis echipei care lucrează la CRI-O să acumuleze o experiență uriașă în desfășurarea pe scară largă a containerelor în clustere mari Kubernetes. Pentru a obține o idee de bază despre modul în care Kubernetes utilizează CRI-O, să analizăm următoarea ilustrație, care arată principiul de lucru al arhitecturii.

Fig. 2. Cum funcționează containerele într-un cluster Kubernetes

Container – pe bandă: CRI-O este acum implicit în OpenShift Container Platform 4

CRI-O simplifică crearea de noi gazde pentru containere prin sincronizarea întregului nivel superior în timpul inițializării noilor noduri și la lansarea noilor versiuni ale platformei OpenShift. Revizuirea întregii platforme permite actualizări / rollback-uri tranzacționale, precum și prevenirea blocajelor reciproce în dependențele dintre nucleul gazdelor de containere, motorul de containere, noduri (Kubelets) și nodul master Kubernetes Master. Prin gestionarea centralizată a tuturor componentelor platformei, cu control și gestionare a versiunilor, se poate monitoriza întotdeauna un traseu clar din starea A în starea B. Aceasta simplifică procesul de actualizări, crește securitatea, îmbunătățește raportarea performanței și ajută la reducerea costurilor de actualizare și instalare a noilor versiuni.

Demonstrarea puterii elementelor interschimbabile

După cum s-a menționat anterior, utilizarea Machine Config Operator pentru gestionarea gazdelor de containere și a motorului de containere în OpenShift 4 oferă un nou nivel de automatizare care nu a fost posibil pe platforma Kubernetes anterior. Pentru a demonstra noile capabilități, vom arăta cum ați putea face modificări în fișierul crio.conf. Pentru a evita confuzia în terminologie, încercați să vă concentrați pe rezultate.

În primul rând, să creăm ceea ce se numește configurația mediului de execuție pentru containere – Container Runtime Config. Considerați-l ca un fel de resursă Kubernetes care reprezintă configurația pentru CRI-O. În realitate, este o versiune specializată a ceea ce se numește MachineConfig, care reprezintă orice configurație desfășurată pe mașina RHEL CoreOS în cadrul clusterei OpenShift.

Această resursă personalizată, numită ContainerRuntimeConfig, a fost creată pentru a ușura administrarea configurației CRI-O pentru administratorii de cluster. Este un instrument destul de puternic, care poate fi aplicat doar pe anumite noduri, în funcție de setările MachineConfigPool. Considerați-o ca un grup de mașini care servesc același scop.

Acordați atenție ultimelor două linii pe care urmează să le modificăm în fișierul /etc/crio/crio.conf. Aceste două linii sunt foarte asemănătoare cu liniile din fișierul crio.conf, iar acestea sunt:

vi ContainerRuntimeConfig.yaml

Concluzie:

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

Acum vom trimite acest fișier în clusterul Kubernetes și vom verifica dacă a fost creat cu adevărat. Rețineți că operațiunea se desfășoară exact ca și în cazul oricărui alt resource Kubernetes:

oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig

Concluzie:

NAME              AGE
set-log-and-pid   22h

După ce am creat ContainerRuntimeConfig, trebuie să modificăm unul dintre MachineConfigPools pentru a informa Kubernetes că dorim să aplicăm această configurație unui anumit grup de mașini din cluster. În acest caz, vom modifica MachineConfigPool pentru nodurile master:

oc edit MachineConfigPool/master

Ieșire (pentru claritate, esența principală este lăsată):

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

În acest moment, MCO începe să creeze un nou fișier crio.conf pentru cluster. În același timp, fișierul de configurare complet poate fi vizualizat prin API-ul Kubernetes. Rețineți că ContainerRuntimeConfig este doar o versiune specializată a MachineConfig, așa că putem vedea rezultatul, examinând liniile necesare din MachineConfigs:

oc get MachineConfigs | grep rendered

Concluzie:

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

Observați că fișierul de configurare obținut pentru nodurile master este o versiune mai nouă decât configurațiile originale. Pentru a-l vizualiza, rulați următoarea comandă. De asemenea, subliniem că acesta ar putea fi unul dintre cele mai bune scripturi pe o singură linie din întreaga istorie 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

Concluzie:

pids_limit = 2048

Acum să ne asigurăm că configurația a fost aplicată tuturor nodurilor master. Mai întâi, să obținem lista nodurilor din cluster:

oc get node | grep master

Ieșire:

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

Acum să examinăm fișierul instalat. Veți observa că fișierul a fost actualizat cu noile valori pentru directivele pid și debug pe care le-am specificat în resursa ContainerRuntimeConfig. Eleganța în sine:

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

Concluzie:

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

Toate aceste modificări în cluster au fost efectuate chiar și fără a lansa SSH. Toată munca a fost realizată prin apelarea la nodul principal Kubernetes. Asta înseamnă că aceste noi parametrii au fost configurați doar pe nodurile principale. Nodurile de lucru, în acest caz, nu au fost schimbate, ceea ce demonstrează avantajele metodologiei Kubernetes folosind stări declarate și actualizate în ceea ce privește gazdele containerelor și motoarele de containere cu elemente interschimbabile.

Exemplul de mai sus arată capacitatea de a face modificări într-un cluster mic de OpenShift Container Platform 4 cu trei noduri de lucru sau într-un gigantic cluster de producție cu 3000 de noduri. În orice caz, volumul de muncă va fi același – și foarte mic – este suficient să configurați fișierul ContainerRuntimeConfig și să schimbați o etichetă (label) în MachineConfigPool. Și puteți face acest lucru cu orice versiune utilizată în Kubernetes platforma OpenShift Container Platform 4.X pe parcursul întregului său ciclu de viață.

Adesea, companiile tehnologice evoluează atât de repede încât nu putem explica de ce alegem anumite tehnologii pentru componentele de bază. Motoarele containerelor au fost istoric componenta cu care utilizatorii interacționează direct. Deoarece popularitatea containerelor a început logic odată cu apariția motoarelor de containere, utilizatorii manifestă adesea interes față de acestea. Aceasta este încă un motiv pentru care Red Hat a ales CRI-O. Containerele evoluează, iar astăzi concentrarea principală se află pe orchestrare, și am ajuns la concluzia că CRI-O oferă cea mai bună experiență atunci când lucrează cu OpenShift 4.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster