perron
Den oplagte løsning var at bruge Red Hat Enterprise Linux CoreOS (en variant af Red Hat Enterprise Linux) og CRI-O som standard, og her er hvorfor...
Da emnet sejlads er et meget godt emne til at finde analogier, når vi forklarer arbejdet med Kubernetes og containere, lad os prøve at tale om de forretningsproblemer, som CoreOS og CRI-O løser ved at bruge et eksempel
Forestil dig nu, hvis Brunel skulle udføre dette arbejde for 20 forskellige skibsmodeller (Kubernetes-versioner) og for fem forskellige planeter med helt forskellige havstrømme og vinde (skyudbydere). Derudover krævedes det, at alle skibe (OpenShift-klynger), uanset de planeter, hvorpå der sejles, set fra kaptajnernes synspunkt (operatører, der styrer driften af klyngerne) opfører sig ens. For at fortsætte den maritime analogi er skibskaptajner overhovedet ligeglade med, hvilken slags riggeblokke (CRI-O) der bruges på deres skibe - det vigtigste for dem er, at disse blokke er stærke og pålidelige.
OpenShift 4, som en cloud-platform, står over for en meget lignende forretningsudfordring. Nye noder skal oprettes på tidspunktet for oprettelse af klynge, i tilfælde af fejl i en af noderne, eller ved skalering af klyngen. Når en ny node oprettes og initialiseres, skal kritiske værtskomponenter, inklusive CRI-O, konfigureres i overensstemmelse hermed. Som i enhver anden produktion skal der tilføres "råvarer" i begyndelsen. For skibe er råvarerne metal og træ. Men i tilfælde af at oprette en vært til at implementere containere i en OpenShift 4-klynge, skal du have konfigurationsfiler og API-leverede servere som input. OpenShift vil derefter levere det nødvendige niveau af automatisering gennem hele livscyklussen, tilbyde den nødvendige produktsupport til slutbrugere og dermed tjene på investeringen i platformen.
OpenShift 4 blev skabt på en sådan måde, at det giver mulighed for bekvemt at opdatere systemet gennem hele platformens livscyklus (for version 4.X) for alle større cloud computing-udbydere, virtualiseringsplatforme og endda bare metal-systemer. For at gøre dette skal noder oprettes på basis af udskiftelige elementer. Når en klynge kræver en ny version af Kubernetes, modtager den også den tilsvarende version af CRI-O på CoreOS. Da CRI-O-versionen er knyttet direkte til Kubernetes, forenkler dette i høj grad alle permutationer til test, fejlfinding eller supportformål. Derudover reducerer denne tilgang omkostninger for slutbrugere og Red Hat.
Dette er en fundamentalt ny måde at tænke på Kubernetes-klynger og lægger grundlaget for planlægning af nogle meget nyttige og overbevisende nye funktioner. CRI-O (Container Runtime Interface - Open Container Initiative, forkortet CRI-OCI) viste sig at være det mest succesrige valg til masseoprettelse af noder, der er nødvendige for at arbejde med OpenShift. CRI-O vil erstatte den tidligere brugte Docker-motor, der tilbyder OpenShift-brugere
En verden af åbne containere
Verden har i lang tid bevæget sig mod åbne containere. Uanset om det er i Kubernetes eller på lavere niveauer,
Det hele startede med oprettelsen af Open Containers Initiative
Kubernetes-fællesskabet udviklede derefter en enkelt standard for en pluggbar grænseflade, kaldet
Ingeniører hos Red Hat og Google så et markedsbehov for en containermotor, der kunne acceptere Kubelet-anmodninger over CRI-protokollen, og introducerede containere, der var kompatible med OCI-specifikationerne nævnt ovenfor. Så
Fig. 1.
Innovation med CRI-O og CoreOS
Med lanceringen af OpenShift 4-platformen blev det ændret
Vent, hvordan er det her?
Det er rigtigt, med fremkomsten af OpenShift 4 er der ikke længere behov for at oprette forbindelse til individuelle værter og installere en containermotor, konfigurere lager, konfigurere søgeservere eller konfigurere et netværk. OpenShift 4-platformen er blevet fuldstændig redesignet til at bruge
Kubernetes har altid tilladt brugere at administrere applikationer ved at definere den ønskede tilstand og bruge
Ved at bruge Operators i platformen bringer OpenShift 4 dette nye paradigme (ved hjælp af konceptet set og faktisk tilstand) til styringen af RHEL CoreOS og CRI-O. Opgaverne med at konfigurere og administrere versioner af operativsystemet og containermotoren automatiseres ved hjælp af den såkaldte
Kørende containere
Brugere har haft mulighed for at bruge CRI-O-motoren i OpenShift-platformen siden version 3.7 i Tech Preview-status og fra version 3.9 i Generally Available-status (understøttet i øjeblikket). Derudover bruger Red Hat massivt
Ris. 2. Hvordan containere fungerer i en Kubernetes-klynge
CRI-O forenkler oprettelsen af nye containerværter ved at synkronisere hele topniveauet ved initialisering af nye noder og ved frigivelse af nye versioner af OpenShift-platformen. Revision af hele platformen giver mulighed for transaktionsopdateringer/tilbageføringer og forhindrer også dødvande i afhængigheder mellem containerhalekernen, containermotoren, noderne (Kubelets) og Kubernetes Master-knuden. Ved central styring af alle platformskomponenter, med kontrol og versionering, er der altid en klar vej fra tilstand A til tilstand B. Dette forenkler opdateringsprocessen, forbedrer sikkerheden, forbedrer ydeevnerapportering og hjælper med at reducere omkostningerne ved opdateringer og installationer af nye versioner .
Demonstration af udskiftningselementers kraft
Som tidligere nævnt giver brug af Machine Config Operator til at administrere containerværten og containermotoren i OpenShift 4 et nyt niveau af automatisering, som ikke tidligere var muligt på Kubernetes-platformen. For at demonstrere de nye funktioner viser vi, hvordan du kan foretage ændringer i filen crio.conf. For at undgå at blive forvirret af terminologi, prøv at fokusere på resultaterne.
Lad os først oprette det, der kaldes en container runtime-konfiguration - Container Runtime Config. Tænk på det som en Kubernetes-ressource, der repræsenterer konfigurationen for CRI-O. I virkeligheden er det en specialiseret version af noget kaldet MachineConfig, som er enhver konfiguration, der er implementeret til en RHEL CoreOS-maskine som en del af en OpenShift-klynge.
Denne brugerdefinerede ressource, kaldet ContainerRuntimeConfig, blev oprettet for at gøre det nemmere for klyngeadministratorer at konfigurere CRI-O. Dette værktøj er kraftfuldt nok til, at det kun kan anvendes på visse noder afhængigt af MachineConfigPool-indstillingerne. Tænk på det som en gruppe af maskiner, der tjener samme formål.
Bemærk de sidste to linjer, som vi vil ændre i filen /etc/crio/crio.conf. Disse to linjer ligner meget linjerne i filen crio.conf, de er:
vi ContainerRuntimeConfig.yaml
Konklusion:
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
Lad os nu skubbe denne fil til Kubernetes-klyngen og kontrollere, at den faktisk blev oprettet. Bemærk venligst, at handlingen er nøjagtig den samme som med enhver anden Kubernetes-ressource:
oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig
Konklusion:
NAME AGE
set-log-and-pid 22h
Når vi har oprettet ContainerRuntimeConfig, skal vi ændre en af MachineConfigPools for at signalere til Kubernetes, at vi ønsker at anvende denne konfiguration på en specifik gruppe af maskiner i klyngen. I dette tilfælde vil vi ændre MachineConfigPool for masterknuderne:
oc edit MachineConfigPool/master
Konklusion (for klarhedens skyld er hovedessensen tilbage):
...
metadata:
creationTimestamp: 2019-04-10T23:42:28Z
generation: 1
labels:
debug-crio: config-log-and-pid
operator.machineconfiguration.openshift.io/required-for-upgrade: ""
...
På dette tidspunkt begynder MCO at oprette en ny crio.conf-fil til klyngen. I dette tilfælde kan den fuldstændigt færdige konfigurationsfil ses ved hjælp af Kubernetes API. Husk, ContainerRuntimeConfig er kun en specialiseret version af MachineConfig, så vi kan se resultatet ved at se på de relevante linjer i MachineConfigs:
oc get MachineConfigs | grep rendered
Konklusion:
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
Bemærk venligst, at den resulterende konfigurationsfil for masterknuderne var en nyere version end de originale konfigurationer. For at se den skal du køre følgende kommando. I forbifarten bemærker vi, at dette måske er en af de bedste one-liners i Kubernetes historie:
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
Konklusion:
pids_limit = 2048
Lad os nu sikre os, at konfigurationen er blevet anvendt på alle masterknudepunkter. Først får vi en liste over noder i klyngen:
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
Lad os nu se på den installerede fil. Du vil se, at filen er blevet opdateret med de nye værdier for pid- og debug-direktiverne, som vi specificerede i ContainerRuntimeConfig-ressourcen. Selve elegancen:
oc debug node/ip-10-0-135-153.us-east-2.compute.internal — cat /host/etc/crio/crio.conf | egrep 'debug||pid’
Konklusion:
...
pids_limit = 2048
...
log_level = "debug"
...
Alle disse ændringer i klyngen blev foretaget uden selv at køre SSH. Alt arbejde blev udført ved at få adgang til Kuberentes master node. Det vil sige, at disse nye parametre kun blev konfigureret på masterknudepunkter. Arbejdernoderne ændrede sig ikke, hvilket demonstrerer fordelene ved Kubernetes-metoden ved at bruge specificerede og faktiske tilstande i forhold til containerværter og containermotorer med udskiftelige elementer.
Eksemplet ovenfor viser muligheden for at foretage ændringer i en lille OpenShift Container Platform 4-klynge med tre produktionsnoder eller en enorm produktionsklynge med 3000 noder. Under alle omstændigheder vil mængden af arbejde være den samme - og meget lille - bare konfigurer ContainerRuntimeConfig-filen, og skift en etiket i MachineConfigPool. Og du kan gøre dette med enhver version af OpenShift Container Platform 4.X, der kører Kubernetes gennem hele dens livscyklus.
Ofte udvikler teknologivirksomheder sig så hurtigt, at vi ikke er i stand til at forklare, hvorfor vi vælger bestemte teknologier til de underliggende komponenter. Containermotorer har historisk set været den komponent, som brugerne interagerer direkte med. Da containernes popularitet naturligt begyndte med fremkomsten af containermotorer, viser brugerne ofte interesse for dem. Dette er endnu en grund til, at Red Hat valgte CRI-O. Containere udvikler sig med fokus nu på orkestrering, og vi har fundet ud af, at CRI-O giver den bedste oplevelse, når du arbejder med OpenShift 4.
Kilde: www.habr.com