Container à trasportatore: CRI-O hè avà predeterminatu in OpenShift Container Platform 4

Plataforma Piattaforma Red Hat OpenShift Container 4 permette di simplificà a creazione hosts per l'implementazione di cuntenituri, ancu in l'infrastruttura di i fornituri di servizii di nuvola, in e plataformi di virtualizazione o in sistemi bare-metal. Per creà una piattaforma veramente basata in nuvola, duvemu piglià un cuntrollu strettu di tutti l'elementi utilizati è cusì aumentà l'affidabilità di un prucessu d'automatizazione cumplessu.

Container à trasportatore: CRI-O hè avà predeterminatu in OpenShift Container Platform 4

A suluzione ovvia era di utilizà Red Hat Enterprise Linux CoreOS (una variante di Red Hat Enterprise Linux) è CRI-O cum'è standard, è eccu perchè ...

Siccomu u tema di a vela hè assai bonu per truvà analogie quandu spiegà u travagliu di Kubernetes è di cuntenituri, pruvemu di parlà di i prublemi di cummerciale chì CoreOS è CRI-O risolve, utilizendu un esempiu. L'invenzioni di Brunel per a produzzione di rigging blocks. In u 1803, Marc Brunel hè statu incaricatu di pruduce 100 19 rigging blocks per i bisogni di a marina britannica in crescita. Un rigging block hè un tipu di rigging chì hè utilizatu per aghjunghje corde à vele. Finu à u principiu di u XNUMXu seculu, sti blocchi sò stati fatti a manu, ma Brunel hà sappiutu automatizà a produzzione è hà cuminciatu à pruduce blocchi standardizati cù l'utili di a macchina. L'automatizazione di stu prucessu significava chì i blocchi resultanti eranu essenzialmente identici, puderanu esse facilmente rimpiazzati se rottu, è puderanu esse pruduciutu in grande quantità.

Avà imaginate se Brunel avia da fà stu travagliu per 20 mudelli di navi diffirenti (versioni Kubernetes) è per cinque pianeti diffirenti cù correnti marini è venti completamente differenti (fornitori di nuvola). Inoltre, era necessariu chì tutti i navi (Clusters OpenShift), indipendentemente da i pianeti nantu à quale a navigazione hè realizata, da u puntu di vista di i capitani (operatori chì gestiscenu l'operazione di i clusters) cumportanu u stessu. Per cuntinuà l'analogia marittima, i capitani di i navi ùn importanu micca ciò chì tipu di rigging blocks (CRI-O) sò usati nantu à i so navi - u principale per elli hè chì sti blocchi sò forti è affidabili.

OpenShift 4, cum'è una piattaforma nuvola, face una sfida cummerciale assai simili. I novi nodi devenu esse creati à u mumentu di a creazione di cluster, in casu di fallimentu in unu di i nodi, o quandu scala u cluster. Quandu un novu nodu hè creatu è inizializatu, i cumpunenti critichi di l'ospiti, cumpresu CRI-O, devenu esse cunfigurati in cunfurmità. Cum'è in ogni altra pruduzzione, "materia prima" deve esse furnita à u principiu. In u casu di i navi, a materia prima sò metalli è legnu. In ogni casu, in u casu di creà un òspite per implementà cuntenituri in un cluster OpenShift 4, avete bisognu à avè i schedarii di cunfigurazione è i servitori furniti da l'API cum'è input. OpenShift poi furnisce u livellu d'automatizazione necessariu in tuttu u ciclu di vita, offre u supportu di produttu necessariu à l'utilizatori finali è cusì ricuperendu l'investimentu in a piattaforma.

OpenShift 4 hè statu creatu in modu chì furnisce l'abilità di aghjurnà convenientemente u sistema in tuttu u ciclu di vita di a piattaforma (per e versioni 4.X) per tutti i principali fornitori di cloud computing, piattaforme di virtualizazione è ancu sistemi di bare metal. Per fà questu, i nodi devenu esse creati nantu à a basa di elementi intercambiabili. Quandu un cluster richiede una nova versione di Kubernetes, riceve ancu a versione currispondente di CRI-O in CoreOS. Siccomu a versione CRI-O hè ligata direttamente à Kubernetes, questu simplifica assai ogni permutazione per teste, risoluzione di prublemi o scopi di supportu. Inoltre, stu approcciu riduce i costi per l'utilizatori finali è Red Hat.

Questu hè un modu fundamentale novu di pensà à i clusters Kubernetes è pone a basa per a pianificazione di alcune funzioni novi assai utili è convincenti. CRI-O (Container Runtime Interface - Open Container Initiative, abbreviata CRI-OCI) hè stata a scelta più riescita per a creazione di massa di nodi chì hè necessariu di travaglià cù OpenShift. CRI-O rimpiazzà u mutore Docker utilizatu prima, chì offre l'utilizatori OpenShift economicu, stabile, simplice è noioso - iè, avete intesu bè - un mutore di cuntainer noioso creatu apposta per travaglià cù Kubernetes.

U mondu di i cuntenituri aperti

U mondu si move versu i cuntenituri aperti per un bellu pezzu. Sia in Kubernetes, o à i livelli più bassi, sviluppu di standard di containeru risultati in un ecosistema di innuvazione à ogni livellu.

Tuttu hà cuminciatu cù a creazione di l'Iniziativa Open Containers in ghjugnu 2015. In questa prima fase di u travagliu, i specificazioni di u containeru sò stati furmati imagine и ambiente runtime. Questu hà assicuratu chì i strumenti puderanu aduprà un standard unicu l'imaghjini di u containeru è un furmatu unificatu per travaglià cun elli. Specificazioni sò state aghjunte dopu distribuzione, chì permette à l'utilizatori di sparte facilmente l'imaghjini di u containeru.

A cumunità Kubernetes hà sviluppatu dopu un standard unicu per una interfaccia pluggable, chjamata Container Runtime Interface (CRI). Grazie à questu, l'utilizatori di Kubernetes anu pussutu cunnette parechji mutori per travaglià cù cuntenituri in più di Docker.

L'ingegneri di Red Hat è Google anu vistu una necessità di u mercatu per un mutore di cuntainer chì puderia accettà e richieste Kubelet nantu à u protocolu CRI è hà introduttu cuntenituri chì eranu cumpatibili cù e specificazioni OCI sopra citate. Allora OCID apparsu. Ma scusate, ùn avemu micca dettu chì stu materiale seria dedicatu à CRI-O ? In realtà hè, solu cù a liberazione versione 1.0 u prugettu hè statu rinominatu CRI-O.

Fig. 1.

Container à trasportatore: CRI-O hè avà predeterminatu in OpenShift Container Platform 4

Innovazione cù CRI-O è CoreOS

Cù u lanciu di a piattaforma OpenShift 4, hè stata cambiata mutore di containeru, utilizatu in modu predeterminatu in a piattaforma, è Docker hè statu rimpiazzatu da CRI-O, chì offre un ambiente costu-effective, stabile, simplice è noioso per eseguisce un containeru chì si sviluppa in parallelu cù Kubernetes. Questu simplifica assai u supportu è a cunfigurazione di cluster. A cunfigurazione di u mutore di u containeru è l'ospite, è a so gestione, diventa automatizata in OpenShift 4.

Aspetta, cumu hè questu?

Hè cusì, cù l'avventu di OpenShift 4, ùn ci hè più bisognu di cunnette cù l'ospiti individuali è installà un mutore di cuntainer, cunfigurà u almacenamentu, cunfigurà i servitori di ricerca o cunfigurà una reta. A piattaforma OpenShift 4 hè stata completamente riprogettata per aduprà Quadru di l'operatore micca solu in quantu à l'applicazioni di l'utilizatori finali, ma ancu in quantu à l'operazioni basi di u livellu di a piattaforma, cum'è a distribuzione di l'imaghjini, a cunfigurazione di u sistema o l'installazione di l'aghjurnamenti.

Kubernetes hà sempre permessu à l'utilizatori di gestisce l'applicazioni definendu u statu desideratu è utilizendu cuntrolli, per assicurà chì u statu attuale currisponde à u statu di destinazione u più vicinu pussibule. Questu u statu di destinazione è l'approcciu statu reale apre grandi opportunità sia da una perspettiva di sviluppu è di operazioni. I sviluppori ponu definisce u statu necessariu da trasmette à l'operatore in a forma di un schedariu YAML o JSON, è dopu l'operatore pò creà l'istanza di l'applicazione necessaria in l'ambiente di produzzione, è u statu di u funziunamentu di sta istanza currisponderà cumplettamente à quellu specificatu.

Utilizendu Operatori in a piattaforma, OpenShift 4 porta stu novu paradigma (aduprendu u cuncettu di set è statu attuale) à a gestione di RHEL CoreOS è CRI-O. I travaglii di cunfigurà è gestisce e versioni di u sistema operatore è u mutore di cuntainer sò automatizati cù u cusì chjamatu Operatore di cunfigurazione di a macchina (MCO). MCO simplificheghja assai u travagliu di l'amministratore di u cluster, essenzialmente l'automatizazione di l'ultimi fasi di a stallazione, è ancu l'operazioni successive post-installazione (u ghjornu dui operazioni). Tuttu chistu face OpenShift 4 una vera piattaforma cloud. Entremu in questu un pocu dopu.

Corsa di cuntenituri

L'utilizatori anu avutu l'uppurtunità d'utilizà u mutore CRI-O in a piattaforma OpenShift da a versione 3.7 in u statutu Tech Preview è da a versione 3.9 in u statutu Generally Available (attualmente supportatu). Inoltre, Red Hat usa massivamente CRI-O per eseguisce carichi di travagliu di produzzione in OpenShift Online da a versione 3.10. Tuttu chistu hà permessu à a squadra chì travaglia nantu à CRI-O per acquistà una vasta sperienza in cuntenituri di lanciamentu di massa in grandi cluster Kubernetes. Per avè una cunniscenza basica di cumu Kubernetes usa CRI-O, fighjemu a seguente illustrazione, chì mostra cumu funziona l'architettura.

Risu. 2. Cumu i cuntenituri travaglianu in un cluster Kubernetes

Container à trasportatore: CRI-O hè avà predeterminatu in OpenShift Container Platform 4

CRI-O simplificheghja a creazione di novi hosts di container sincronizendu tuttu u livellu superiore quandu inizializza novi nodi, è quandu libera novi versioni di a piattaforma OpenShift. A rivisione di tutta a piattaforma permette l'aghjurnamenti di transazzione / rollbacks, è ancu impedisce i blocchi in dipendenze trà u core di cuda di u containeru, u mutore di u containeru, i nodi (Kubelets) è u node Kubernetes Master. Gestendu cintrali tutti i cumpunenti di a piattaforma, cù u cuntrollu è a versione, ci hè sempre un percorsu chjaru da u statu A à u statu B. Questu simplifica u prucessu d'aghjurnamentu, migliurà a sicurità, migliurà a rappurtazione di rendiment, è aiuta à riduce u costu di l'aghjurnamenti è l'installazione di novi versioni. .

Dimustrà u putere di l'elementi di sustituzione

Cum'è diciatu prima, utilizendu l'Operatore di Config di Machine per gestisce l'ospite di u containeru è u mutore di u containeru in OpenShift 4 furnisce un novu livellu d'automatizazione chì ùn era micca pussibule in a piattaforma Kubernetes. Per dimustrà e novi funziunalità, vi mustraremu cumu pudete fà cambiamenti à u schedariu crio.conf. Per evitari di cunfundà a terminologia, pruvate di fucalizza nantu à i risultati.

Prima, creemu ciò chì si chjama una cunfigurazione di runtime di cuntainer - Container Runtime Config. Pensate à questu cum'è una risorsa Kubernetes chì rapprisenta a cunfigurazione per CRI-O. In realtà, hè una versione specializata di qualcosa chjamata MachineConfig, chì hè qualsiasi cunfigurazione chì hè implementata à una macchina RHEL CoreOS cum'è parte di un cluster OpenShift.

Questa risorsa persunalizata, chjamata ContainerRuntimeConfig, hè stata creata per fà più faciule per l'amministratori di cluster per cunfigurà CRI-O. Stu strumentu hè abbastanza putente chì pò esse appiicata solu à certi nodi sicondu i paràmetri di MachineConfigPool. Pensate à questu cum'è un gruppu di machini chì serve u stessu scopu.

Avvisu l'ultimi dui linii chì andemu à cambià in u schedariu /etc/crio/crio.conf. Sti dui linii sò assai simili à i linii in u schedariu crio.conf, sò:

vi ContainerRuntimeConfig.yaml

Cunsigliu:

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

Avà spingemu stu schedariu à u cluster Kubernetes è verificate chì hè statu veramente creatu. Per piacè nutate chì l'operazione hè esattamente uguale à qualsiasi altra risorsa Kubernetes:

oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig

Cunsigliu:

NAME              AGE
set-log-and-pid   22h

Una volta avemu creatu u ContainerRuntimeConfig, avemu bisognu di mudificà unu di i MachineConfigPools per signalà à Kubernetes chì vulemu applicà sta cunfigurazione à un gruppu specificu di macchine in u cluster. In questu casu, cambià a MachineConfigPool per i nodi maestri:

oc edit MachineConfigPool/master

Conclusione (per a chiarezza, l'essenza principale hè lasciata):

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

À questu puntu, MCO cumencia à creà un novu file crio.conf per u cluster. In questu casu, u schedariu di cunfigurazione cumpletamente finitu pò esse vistu cù l'API Kubernetes. Ricurdativi, ContainerRuntimeConfig hè solu una versione specializata di MachineConfig, cusì pudemu vede u risultatu fighjendu e linee pertinenti in MachineConfigs:

oc get MachineConfigs | grep rendered

Cunsigliu:

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

Per piacè nutate chì u schedariu di cunfigurazione risultatu per i nodi maestri era una versione più nova di e cunfigurazioni originali. Per vede, eseguite u cumandimu seguitu. In u passaghju, avemu nutatu chì questu hè forse unu di i migliori one-liners in a storia di 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

Cunsigliu:

pids_limit = 2048

Avà assicuremu chì a cunfigurazione hè stata applicata à tutti i nodi maestri. Prima avemu una lista di nodi in u cluster:

oc get node | grep master

Output:

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

Avà fighjemu u schedariu installatu. Puderete vede chì u schedariu hè statu aghjurnatu cù i novi valori per e direttive pid è debug chì avemu specificatu in a risorsa ContainerRuntimeConfig. L'eleganza stessu:

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

Cunsigliu:

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

Tutti questi cambiamenti à u cluster sò stati fatti senza mancu eseguisce SSH. Tuttu u travagliu hè statu fattu accede à u node maestru Kuberentes. Questu hè, sti novi paràmetri sò stati cunfigurati solu nantu à i nodi maestri. I nodi di i travagliadori ùn anu micca cambiatu, chì mostra i benefici di a metodulugia Kubernetes di l'usu di stati specificati è attuali in relazione à l'ospiti di u containeru è i mutori di u containeru cù elementi intercambiabili.

L'esempiu sopra mostra a capacità di fà cambiamenti à un picculu cluster OpenShift Container Platform 4 cù trè nodi di produzzione o un grande cluster di produzzione cù nodi 3000. In ogni casu, a quantità di travagliu serà a stessa - è assai chjuca - basta cunfigurà u schedariu ContainerRuntimeConfig, è cambia una etichetta in MachineConfigPool. È pudete fà questu cù qualsiasi versione di OpenShift Container Platform 4.X chì esegue Kubernetes in tuttu u so ciclu di vita.

Spessu e cumpagnie tecnologiche evoluzione cusì rapidamente chì ùn pudemu spiegà perchè scegliemu certe tecnulugia per i cumpunenti sottostanti. I mutori di cuntainer sò storicamente u cumpunente chì l'utilizatori interagiscenu direttamente. Siccomu a popularità di i cuntenituri naturalmente hà cuminciatu cù l'avventu di i mutori di cuntainer, l'utilizatori spessu mostranu interessu in elli. Questu hè un altru mutivu perchè Red Hat hà sceltu CRI-O. I cuntenituri sò in evoluzione cù u focusu avà nantu à l'orchestrazione, è avemu trovu chì CRI-O furnisce a megliu sperienza quandu travaglia cù OpenShift 4.

Source: www.habr.com

Add a comment