platforma
Očigledno rješenje bilo je koristiti Red Hat Enterprise Linux CoreOS (varijanta Red Hat Enterprise Linuxa) i CRI-O kao standard, a evo i zašto...
Budući da je tema plovidbe vrlo dobra za pronalaženje analogija pri objašnjavanju rada Kubernetesa i kontejnera, pokušajmo na primjeru govoriti o poslovnim problemima koje CoreOS i CRI-O rješavaju
Sada zamislite da Brunel mora obaviti ovaj posao za 20 različitih modela brodova (verzije Kubernetesa) i za pet različitih planeta s potpuno različitim morskim strujama i vjetrovima (pružatelji oblaka). Osim toga, zahtijevalo se da se svi brodovi (OpenShift klasteri), bez obzira na planete na kojima se vrši navigacija, sa stajališta kapetana (operatora koji upravljaju radom klastera) ponašaju jednako. Da nastavimo s pomorskom analogijom, kapetane brodova uopće nije briga kakve se blokove opute (CRI-O) koriste na njihovim brodovima - njima je glavno da su ti blokovi čvrsti i pouzdani.
OpenShift 4, kao platforma u oblaku, suočava se s vrlo sličnim poslovnim izazovom. Novi čvorovi moraju biti kreirani u trenutku stvaranja klastera, u slučaju kvara na jednom od čvorova ili prilikom skaliranja klastera. Kada se kreira i inicijalizira novi čvor, kritične komponente glavnog računala, uključujući CRI-O, moraju se konfigurirati u skladu s tim. Kao iu svakoj drugoj proizvodnji, “sirovine” moraju biti opskrbljene na početku. Kod brodova sirovine su metal i drvo. Međutim, u slučaju stvaranja glavnog računala za postavljanje spremnika u klasteru OpenShift 4, trebate imati konfiguracijske datoteke i poslužitelje koje pruža API kao ulaz. OpenShift će zatim osigurati potrebnu razinu automatizacije tijekom cijelog životnog ciklusa, nudeći potrebnu podršku za proizvod krajnjim korisnicima i tako nadoknaditi ulaganje u platformu.
OpenShift 4 stvoren je na takav način da pruži mogućnost prikladnog ažuriranja sustava tijekom cijelog životnog ciklusa platforme (za verzije 4.X) za sve glavne pružatelje usluga računalstva u oblaku, virtualizacijske platforme, pa čak i gole metalne sustave. Da biste to učinili, čvorovi moraju biti stvoreni na temelju izmjenjivih elemenata. Kada klaster zahtijeva novu verziju Kubernetesa, također prima odgovarajuću verziju CRI-O na CoreOS-u. Budući da je verzija CRI-O izravno povezana s Kubernetesom, to uvelike pojednostavljuje sve permutacije za potrebe testiranja, rješavanja problema ili podrške. Osim toga, ovaj pristup smanjuje troškove za krajnje korisnike i Red Hat.
Ovo je temeljno nov način razmišljanja o Kubernetes klasterima i postavlja temelje za planiranje nekih vrlo korisnih i uvjerljivih novih značajki. CRI-O (Container Runtime Interface - Open Container Initiative, skraćeno CRI-OCI) pokazao se kao najuspješniji izbor za masovnu izradu čvorova koji su neophodni za rad s OpenShift-om. CRI-O će zamijeniti prethodno korišten Docker motor, nudeći OpenShift korisnicima
Svijet otvorenih kontejnera
Svijet se već dugo kreće prema otvorenim kontejnerima. Bilo u Kubernetesu ili na nižim razinama,
Sve je počelo stvaranjem Inicijative otvorenih kontejnera
Kubernetes zajednica zatim je razvila jedinstveni standard za priključno sučelje, tzv
Inženjeri Red Hata i Googlea uvidjeli su tržišnu potrebu za spremnikom koji bi mogao prihvatiti Kubelet zahtjeve preko CRI protokola i uveli su spremnike koji su kompatibilni s gore spomenutim OCI specifikacijama. Tako
Slika. 1.
Inovacije s CRI-O i CoreOS
Lansiranjem platforme OpenShift 4 to je promijenjeno
Čekaj, kako je ovo?
Tako je, s dolaskom OpenShift 4, više nema potrebe za povezivanjem s pojedinačnim hostovima i instaliranjem spremnika, konfiguriranjem pohrane, konfiguriranjem poslužitelja za pretraživanje ili konfiguriranjem mreže. Platforma OpenShift 4 potpuno je redizajnirana za korištenje
Kubernetes je uvijek dopuštao korisnicima upravljanje aplikacijama definiranjem željenog stanja i korištenjem
Korištenjem operatora u platformi, OpenShift 4 donosi ovu novu paradigmu (koristeći koncept skupa i stvarnog stanja) u upravljanje RHEL CoreOS i CRI-O. Zadaci konfiguracije i upravljanja verzijama operativnog sustava i spremnika automatizirani su korištenjem tzv.
Tekući kontejneri
Korisnici su imali priliku koristiti CRI-O motor u OpenShift platformi od verzije 3.7 u statusu Tech Preview i od verzije 3.9 u statusu Generally Available (trenutno podržano). Osim toga, Red Hat masovno koristi
Riža. 2. Kako spremnici rade u Kubernetes klasteru
CRI-O pojednostavljuje stvaranje novih hostova spremnika sinkronizacijom cijele gornje razine prilikom inicijalizacije novih čvorova i prilikom izdavanja novih verzija OpenShift platforme. Revizija cijele platforme omogućuje transakcijska ažuriranja/vraćanja, a također sprječava zastoje u ovisnostima između repne jezgre spremnika, pogona spremnika, čvorova (Kubelets) i glavnog čvora Kubernetes. Centralnim upravljanjem svim komponentama platforme, uz kontrolu i određivanje verzija, uvijek postoji jasan put od stanja A do stanja B. To pojednostavljuje proces ažuriranja, poboljšava sigurnost, poboljšava izvješćivanje o performansama i pomaže smanjiti troškove ažuriranja i instalacije novih verzija .
Pokazivanje snage zamjenskih elemenata
Kao što je ranije spomenuto, korištenje Machine Config Operatora za upravljanje hostom spremnika i spremnikom u OpenShift 4 pruža novu razinu automatizacije koja prije nije bila moguća na platformi Kubernetes. Da bismo demonstrirali nove značajke, pokazat ćemo kako možete napraviti promjene u datoteci crio.conf. Kako biste izbjegli zabunu s terminologijom, pokušajte se usredotočiti na rezultate.
Prvo, kreirajmo ono što se zove konfiguracija vremena izvođenja spremnika - Container Runtime Config. Zamislite to kao Kubernetes resurs koji predstavlja konfiguraciju za CRI-O. U stvarnosti, to je specijalizirana verzija nečega što se zove MachineConfig, što je bilo koja konfiguracija koja se postavlja na RHEL CoreOS stroj kao dio OpenShift klastera.
Ovaj prilagođeni resurs, nazvan ContainerRuntimeConfig, stvoren je kako bi administratorima klastera olakšao konfiguriranje CRI-O. Ovaj je alat dovoljno moćan da se može primijeniti samo na određene čvorove ovisno o postavkama MachineConfigPoola. Zamislite to kao skupinu strojeva koji služe istoj svrsi.
Primijetite posljednja dva retka koja ćemo promijeniti u datoteci /etc/crio/crio.conf. Ove dvije linije vrlo su slične linijama u crio.conf datoteci, to su:
vi ContainerRuntimeConfig.yaml
Zaključak:
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
Sada gurnimo ovu datoteku u Kubernetes klaster i provjerimo je li stvarno stvorena. Imajte na umu da je postupak potpuno isti kao i s bilo kojim drugim Kubernetes resursom:
oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig
Zaključak:
NAME AGE
set-log-and-pid 22h
Nakon što smo izradili ContainerRuntimeConfig, moramo modificirati jedan od MachineConfigPools kako bismo signalizirali Kubernetesu da želimo primijeniti ovu konfiguraciju na određenu grupu strojeva u klasteru. U ovom slučaju promijenit ćemo MachineConfigPool za glavne čvorove:
oc edit MachineConfigPool/master
Zaključak (radi jasnoće, glavna suština je ostavljena):
...
metadata:
creationTimestamp: 2019-04-10T23:42:28Z
generation: 1
labels:
debug-crio: config-log-and-pid
operator.machineconfiguration.openshift.io/required-for-upgrade: ""
...
U ovom trenutku MCO počinje stvarati novu crio.conf datoteku za klaster. U ovom slučaju, potpuno gotova konfiguracijska datoteka može se vidjeti pomoću Kubernetes API-ja. Zapamtite, ContainerRuntimeConfig samo je specijalizirana verzija MachineConfiga, tako da možemo vidjeti rezultat gledajući relevantne retke u MachineConfigs:
oc get MachineConfigs | grep rendered
Zaključak:
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
Imajte na umu da je rezultirajuća konfiguracijska datoteka za glavne čvorove bila novija verzija od originalnih konfiguracija. Da biste ga vidjeli, pokrenite sljedeću naredbu. Usput, napominjemo da je ovo možda jedan od najboljih one-linera u povijesti Kubernetesa:
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
Zaključak:
pids_limit = 2048
Sada provjerimo je li konfiguracija primijenjena na sve glavne čvorove. Prvo dobivamo popis čvorova u klasteru:
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
Sada pogledajmo instaliranu datoteku. Vidjet ćete da je datoteka ažurirana novim vrijednostima za direktive pid i debug koje smo naveli u resursu ContainerRuntimeConfig. Sama elegancija:
oc debug node/ip-10-0-135-153.us-east-2.compute.internal — cat /host/etc/crio/crio.conf | egrep 'debug||pid’
Zaključak:
...
pids_limit = 2048
...
log_level = "debug"
...
Sve ove promjene u klasteru napravljene su bez pokretanja SSH-a. Sav posao obavljen je pristupom glavnom čvoru Kuberentes. Odnosno, ti novi parametri konfigurirani su samo na glavnim čvorovima. Radnički čvorovi nisu se promijenili, što pokazuje prednosti Kubernetesove metodologije korištenja specificiranih i stvarnih stanja u odnosu na hostove spremnika i motore spremnika s izmjenjivim elementima.
Gornji primjer pokazuje mogućnost unošenja izmjena u mali klaster OpenShift Container Platform 4 s tri proizvodna čvora ili veliki proizvodni klaster s 3000 čvorova. U svakom slučaju, količina posla bit će ista - i vrlo mala - samo konfigurirajte datoteku ContainerRuntimeConfig i promijenite jednu oznaku u MachineConfigPoolu. A to možete učiniti s bilo kojom verzijom OpenShift Container Platform 4.X koja pokreće Kubernetes tijekom svog životnog ciklusa.
Često se tehnološke tvrtke razvijaju tako brzo da ne možemo objasniti zašto odabiremo određene tehnologije za temeljne komponente. Kontejnerski motori su kroz povijest bili komponenta s kojom korisnici izravno komuniciraju. Budući da je popularnost kontejnera prirodno počela s pojavom kontejnerskih motora, korisnici često pokazuju interes za njih. Ovo je još jedan razlog zašto je Red Hat odabrao CRI-O. Kontejneri se razvijaju s fokusom sada na orkestraciju, a otkrili smo da CRI-O pruža najbolje iskustvo pri radu s OpenShift 4.
Izvor: www.habr.com