Container – i pipeline: CRI-O Ă€r nu som standard i OpenShift Container Platform 4

Plattform Red Hat OpenShift Container Platform 4 möjliggör att strömlinjeforma skapandet av vÀrdar för distribution av containrar, inklusive i infrastruktur frÄn molnleverantörer, pÄ virtualisering plattformar eller i bare-metal system. För att skapa en verkligt molnbaserad plattform var vi tvungna att ha strikt kontroll över alla anvÀnda komponenter och pÄ sÄ sÀtt öka tillförlitligheten i den komplexa automatiseringsprocessen.

Container – i pipeline: CRI-O Ă€r nu som standard i OpenShift Container Platform 4

En uppenbar lösning var att anvĂ€nda Red Hat Enterprise Linux CoreOS (en variant av Red Hat Enterprise Linux) och CRI-O som standard, och hĂ€r Ă€r varför


Eftersom sjöfartstema Ă€r en mycket lyckad analogi för att förklara hur Kubernetes och containrar fungerar, lĂ„t oss illustrera de affĂ€rsproblem som CoreOS och CRI-O löser med hjĂ€lp av Brunels uppfinning för produktion av riggbockar. År 1803 stĂ€lldes Mark Brunel inför uppgiften att tillverka 100 000 riggbockar för behovet hos Storbritanniens vĂ€xande flotta. En riggbock Ă€r en typ av utrustning som anvĂ€nds för att fĂ€sta rep vid segel. Fram till början av 1800-talet tillverkades dessa block för hand, men Brunel lyckades automatisera produktionen och börja tillverka standardiserade block med hjĂ€lp av maskiner. Automatiseringen av denna process innebar att alla block fick en nĂ€stan identisk utformning, kunde enkelt bytas ut vid skada och kunde produceras i stora mĂ€ngder.

Och nu, förestĂ€ll dig att Brunel skulle behöva utföra detta arbete för 20 olika modeller av fartyg (versioner av Kubernetes) och för fem olika planeter med helt olika havsströmmar och vindar (molnleverantörer). Dessutom var det nödvĂ€ndigt att alla fartyg (OpenShift-kluster), oavsett vilka planeter de navigerade i, uppförde sig likadant ur kaptenernas (operatörer som styr kluster) perspektiv. FortsĂ€tter vi med sjöanalogin, sĂ„ spelar det ingen roll för kaptenerna vilka riggbockar (CRI-O) som anvĂ€nds pĂ„ deras fartyg – det som verkligen rĂ€knas Ă€r att dessa block Ă€r hĂ„llbara och pĂ„litliga.

Inför OpenShift 4 stÄr en mycket liknande affÀrsutmaning. Nya noder mÄste skapas vid klusterets skapande, vid ett fel pÄ en av noderna, eller vid skalning av klustret. Vid skapande och initiering av en ny nod mÄste Àven vÀrdens kritiska komponenter konfigureras, inklusive CRI-O. Precis som i vilken annan produktion som helst mÄste "rÄvaror" tillhandahÄllas i början. I fallet med fartyg utgör metall och trÀ rÄvarorna. Men vid skapandet av en vÀrd för distribuerade containrar i OpenShift 4 mÄste konfigurationsfiler och tillgÀngliga API-servrar finnas som input. DÀrefter kommer OpenShift att sÀkerstÀlla rÀtt nivÄ av automatisering under hela livscykeln, erbjuda nödvÀndigt produktstöd för slutanvÀndare och pÄ sÄ sÀtt Äterbetala investeringarna i plattformen.

OpenShift 4 skapades för att möjliggöra smidiga systemuppdateringar under hela plattformens livscykel (för versioner 4.X) för alla större leverantörer av molntjÀnster, virtualiseringsplattformar och till och med bare metal-system. För detta behöver noder skapas baserat pÄ utbytbara enheter. NÀr klustret krÀver en ny version av Kubernetes fÄr det ocksÄ den motsvarande versionen av CRI-O pÄ CoreOS. Eftersom versionen av CRI-O Àr direkt kopplad till Kubernetes förenklar detta i hög grad alla omarrangemang för testande, felsökning eller support. Dessutom möjliggör ett sÄdant tillvÀgagÄngssÀtt att sÀnka kostnaderna för slutanvÀndarna och Red Hat.

Detta Ă€r en principiellt ny syn pĂ„ Kubernetes-kluster, vilket lĂ€gger grunden för planering av nya mycket anvĂ€ndbara och attraktiva funktioner. CRI-O (Container Runtime Interface - Open Container Initiative, förkortat CRI-OCI) har visat sig vara det mest lyckade valet för massproduktion av noder som behövs för att arbeta med OpenShift. CRI-O ersĂ€tter den tidigare anvĂ€nda Docker-motorn och erbjuder OpenShift-anvĂ€ndare en kostnadseffektiv, stabil, enkel och trĂ„kig – ja, ni hörde rĂ€tt – en trĂ„kig container-motor, skapad specifikt för att fungera med Kubernetes.

VÀrlden av öppna containrar

VÀrlden har lÀnge rört sig mot öppna containrar. Oavsett om det Àr i Kubernetes eller pÄ lÀgre nivÄer, utvecklingen av containernormer leder till en innovationsekosystem pÄ varje nivÄ.

Allt började med skapandet av Open Containers Initiative i juni 2015. Under denna tidiga fas formades specifikationer för containern bild (image) och körmiljö (runtime). Detta sÀkerstÀllde att verktygen kunde anvÀnda en gemensam standard för containrar och ett enhetligt format för att arbeta med dem. Senare lades specifikationerna för distribution (distribution), vilket gjorde det möjligt för anvÀndare att enkelt dela containrar.

DÀrefter utvecklade Kubernetes-gemenskapen en enhetlig pluggbar grÀnssnitt (pluggable interface) som fick namnet Container Runtime Interface (CRI). Tack vare detta kunde anvÀndare av Kubernetes ansluta olika motorer för att arbeta med containrar utöver Docker.

Ingenjörer frÄn Red Hat och Google sÄg en befintlig marknadsbehov för en containermotor som kunde ta emot begÀrningar frÄn Kubelet via CRI-protokollet och presenterade containrar som var kompatibla med de nÀmnda OCI-specifikationerna. SÄ fanns OCID. Men vÀnta, vi sa ju att detta material skulle handla om CRI-O? Faktum Àr att det Àr sant, bara att med lanseringen av version 1.0 projektet döptes om till CRI-O.

Fig. 1.

Container – i pipeline: CRI-O Ă€r nu som standard i OpenShift Container Platform 4

Innovationer med CRI-O och CoreOS

Med lanseringen av OpenShift 4 Àndrades den containermotor, som anvÀndes som standard i plattformen, och CRI-O ersatte Docker, vilket erbjöd en kostnadseffektiv, stabil, enkel och trÄkig miljö för att köra containrar som utvecklas parallellt med Kubernetes. Detta förenklar tydligt underhÄll och konfiguration av klustret. Konfiguration av containermotorer och vÀrdar, samt hantering av dem, blir automatiserat inom OpenShift 4.

VÀnta, hur gÄr det till?

Precis sÄ, med anloningen av OpenShift 4, finns det ingen anledning att lÀngre ansluta till separata vÀrdar och installera containermotorer, konfigurera lagringslösningar, stÀlla in servrar för att söka eller konfigurera nÀtverk. OpenShift 4-plattformen har helt omarbetats för att anvÀnda den Operator Framework inte bara ur perspektivet av slutanvÀndarapplikationer, utan ocksÄ ur perspektivet av grundlÀggande operationer pÄ plattformnivÄ, sÄsom distribution av bilder, systemkonfiguration eller installation av uppdateringar.

Kubernetes har alltid tillÄtit anvÀndare att hantera applikationer genom att definiera det önskade tillstÄndet och anvÀnda kontroller (Controllers), för att sÀkerstÀlla att det faktiska tillstÄndet sÄ mycket som möjligt motsvarar det angivna tillstÄndet. Denna metod med att anvÀnda det angivna tillstÄndet och det faktiska tillstÄndet öppnar stora möjligheter bÄde ur utvecklings- och driftsynpunkt. Utvecklare kan definiera det önskade tillstÄndet, överlÀmna det till operatören i form av en YAML- eller JSON-fil, och sedan kan operatören skapa den nödvÀndiga applikationsinstansen i produktionsmiljön, med det arbetsmÀssiga tillstÄndet av den instansen fullstÀndigt överensstÀmmande med det angivna.

Genom att anvÀnda operatörer (Operators) i plattformen, inför OpenShift 4 denna nya paradigm (med anvÀndning av begreppet angivet och faktiskt tillstÄnd) i hanteringen av RHEL CoreOS och CRI-O. Uppgifter som konfiguration och versionshantering av operativsystemet och containermotorn automatiseras med hjÀlp av den sÄ kallade maskinkonfigurationsoperatören (Machine Config Operator, MCO). MCO förenklar betydligt arbetet för klusteradministratören, genom att i praktiken automatisera de sista stegen av installationen, samt efterföljande operationer efter installationen (day two operations). Allt detta gör OpenShift 4 till en riktig molnplattform. Vi kommer att gÄ djupare in pÄ detta senare.

Körning av containrar

AnvÀndare har haft möjlighet att anvÀnda CRI-O-motorn i OpenShift-plattformen sedan version 3.7 i statusen Tech Preview och sedan version 3.9 i statusen Generally Available (för nÀrvarande stöds). Dessutom anvÀnder Red Hat i stor utstrÀckning CRI-O för att köra produktionsarbetsbelastningar i OpenShift Online sedan version 3.10. Allt detta har gett teamet som arbetar med CRI-O enorm erfarenhet av massiv körning av containrar pÄ stora Kubernetes-kluster. För att fÄ en grundlÀggande förstÄelse för hur Kubernetes anvÀnder CRI-O, lÄt oss ta en titt pÄ följande illustration som visar hur arkitekturen fungerar.

Fig. 2. Hur containrar fungerar i ett Kubernetes-kluster

Container – i pipeline: CRI-O Ă€r nu som standard i OpenShift Container Platform 4

CRI-O förenklar skapandet av nya behÄllarhostar genom att synkronisera hela den övre nivÄn vid initiering av nya noder, samt vid lansering av nya versioner av OpenShift-plattformen. En granskning av hela plattformen tillÄter transaktionella uppdateringar / ÄterstÀllningar och förhindrar ömsesidig blockering i beroenden mellan kÀrnan i behÄllarhosten, behÄllarmotorn, noderna (Kubelets) och Kubernetes masternod. Genom centraliserad hantering av alla komponenter i plattformen, med kontroll och hantering av versioner, kan man alltid spÄra en tydlig vÀg frÄn tillstÄnd A till tillstÄnd B. Detta förenklar uppdateringsprocessen, ökar sÀkerheten, förbÀttrar rapporteringen om prestanda och hjÀlper till att minska kostnaderna för uppdateringar och installation av nya versioner.

Demonstration av kraften i utbytbara komponenter

Som nÀmnts tidigare ger anvÀndningen av Machine Config Operator för att hantera behÄllarhosten och behÄllar motorn i OpenShift 4 en ny nivÄ av automatisering som inte var möjlig tidigare pÄ Kubernetes-plattformen. För att visa de nya möjligheterna kommer vi att visa hur du kan göra Àndringar i filen crio.conf. För att undvika förvirring i terminologin, försök att fokusera pÄ resultaten.

Först, lÄt oss skapa det som kallas Container Runtime Config. TÀnk pÄ det som en typ av Kubernetes-resurs som representerar konfigurationen för CRI-O. I verkligheten Àr detta en specialiserad version av det som kallas MachineConfig, som representerar vilken konfiguration som helst som distribueras pÄ RHEL CoreOS-maskinen i ett OpenShift-kluster.

Denna anpassade resurs, kallad ContainerRuntimeConfig, har utformats för att underlÀtta för klusteradministratörer att stÀlla in CRI-O. Det Àr ett tillrÀckligt kraftfullt verktyg för att det kan tillÀmpas endast pÄ specifika noder beroende pÄ instÀllningarna för MachineConfigPool. TÀnk pÄ det som en grupp av maskiner som tjÀnar samma syfte.

Observera de tvÄ sista raderna som vi kommer att Àndra i filen /etc/crio/crio.conf. Dessa tvÄ rader liknar vÀldigt mycket raderna i filen crio.conf, de Àr:

vi ContainerRuntimeConfig.yaml

Slutsats:

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

Nu skickar vi den hÀr filen till Kubernetes-klustret och kontrollerar att den verkligen har skapats. Observera att arbetet sker pÄ exakt samma sÀtt som med alla andra Kubernetes-resurser:

oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig

Slutsats:

NAMN              ÅLDER
set-log-and-pid   22h

NÀr vi har skapat ContainerRuntimeConfig behöver vi Àndra en av MachineConfigPools för att informera Kubernetes om att vi vill tillÀmpa denna konfiguration pÄ en viss grupp maskiner i klustret. I det hÀr fallet kommer vi att Àndra MachineConfigPool för master-noder:

oc edit MachineConfigPool/master

Utdata (för tydlighet har vi lÀmnat huvudpunkten):

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

Vid det hÀr laget börjar MCO skapa en ny fil crio.conf för klustret. Den fullstÀndiga konfigurationsfilen kan ses via Kubernetes API. Kom ihÄg, ContainerRuntimeConfig Àr bara en specialiserad version av MachineConfig, sÄ vi kan se resultatet genom att titta pÄ de relevanta raderna i MachineConfigs:

oc get MachineConfigs | grep rendered

Slutsats:

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

Observera att den erhÄllna konfigurationsfilen för master-noder var en nyare version Àn de ursprungliga konfigurationerna. För att visa den, kör följande kommando. LÄt oss ocksÄ notera att detta kan vara ett av de bÀsta enradiga skripten i Kubernetes historia:

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

Slutsats:

pids_limit = 2048

Nu ska vi bekrÀfta att konfigurationen har tillÀmpats pÄ alla master-noder. Först fÄr vi en lista över noder i klustret:

oc get node | grep master

Utdata:

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

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

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

Nu ska vi granska den installerade filen. Du kommer att se att filen har uppdaterats med de nya vÀrdena för direktiven pid och debug som vi angav i ContainerRuntimeConfig-resursen. SjÀlva elegansen:

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

Slutsats:

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

Alla dessa Àndringar i klustret gjordes utan att köra SSH. Hela arbetet utfördes genom att kontakta Kubernetes master-noden. Det vill sÀga, dessa nya parametrar konfigurerades endast pÄ master-noderna. Arbetsnoderna Àndrades inte, vilket visar fördelarna med Kubernetes-metodologin med hjÀlp av specificerade och aktuella tillstÄnd i förhÄllande till containerhosts och containermotorer med utbytbara komponenter.

Exemplet ovan visar möjligheten att göra Ă€ndringar i ett litet OpenShift Container Platform 4-kluster med tre arbetsnoder eller i ett stort produktionskluster med 3000 noder. I bĂ„da fallen kommer arbetsinsatsen att vara densamma – och ganska liten – det rĂ€cker att konfigurera filen ContainerRuntimeConfig och Ă€ndra en etikett i MachineConfigPool. Och du kan göra detta med vilken version av Kubernetes-plattformen OpenShift Container Platform 4.X som helst under hela dess livscykel.

Ofta utvecklas teknikföretag sÄ snabbt att vi inte kan förklara varför vi vÀljer vissa teknologier för grundkomponenterna. Containermotorer har historiskt varit den komponent som anvÀndare interagerar direkt med. Eftersom populariteten av containrar historiskt sett började med framvÀxten av containermotorer, visar anvÀndare ofta intresse för dem. Det Àr Ànnu en anledning till varför Red Hat valde CRI-O. Containrar utvecklas, och idag Àr fokus pÄ orkestrering, och vi har kommit fram till att CRI-O ger den bÀsta upplevelsen med OpenShift 4.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster