Hej! Jag heter Sergej, jag Àr DevOps pÄ Surf. DevOps-avdelningen pÄ Surf har som mÄl att inte bara förbÀttra samarbetet mellan specialister och integrera arbetsprocesser, utan ocksÄ aktivt undersöka och implementera aktuella teknologier bÄde i vÄr egen infrastruktur och i kundens infrastruktur.
Nedan kommer jag att berÀtta lite om förÀndringarna i teknikstacken för containrar som vi stött pÄ vid studiet av distributionen. CentOS 8 och vad som Àr CRI-O och hur man snabbt konfigurerar en körmiljö med hjÀlp av det. Kubernetes.

Varför Docker saknas i standardinstallationen av CentOS 8
Efter installationen av de senaste stora release-versionerna RHEL 8 eller CentOS 8 kan man inte lÄta bli att mÀrka: i dessa distributioner och officiella repositoryn saknas applikationen Docker, som ideologiskt och funktionellt ersÀtter paketen Podman, Buildah (som finns i distributionen som standard) och CRI-O. Detta Àr kopplat till den praktiska implementeringen av standarder, som utvecklas av bland annat Red Hat inom ramarna för Open Container Initiative (OCI).
MÄlet med OCI, som Àr en del av The Linux Foundation, Àr att skapa öppna branschstandarder för format och körmiljöer för containrar, som ska lösa flera uppgifter. För det första, de ska inte strida mot Linux-filosofin (till exempel i den delen att varje program ska utföra en enda uppgift, medan Docker detta Àr en slags allt-i-ett lösning). För det andra, de ska kunna eliminera alla befintliga brister i programvaran. DockerFör det tredje, de ska vara helt kompatibla med affÀrskraven stÀllda av ledande kommersiella plattformar för distribution, hantering och underhÄll av containeriserade applikationer (till exempel Red Hat OpenShift).
Nackdelar Docker och fördelarna med den nya programvaran har redan beskrivits ganska detaljerat i , och en detaljerad beskrivning av all programvara som erbjuds inom ramen för OCI-projektet och dess arkitektoniska sÀrdrag finns i den officiella dokumentationen och artiklar frÄn bÄde Red Hat (bra i Red Hat-bloggen) och externa .
Det Àr viktigt att notera vilken funktionalitet komponenterna i den föreslagna stacken har:
- Podman â direkt interaktion med containrar och bildlagring genom processen runC;
- Buildah â bygga och ladda upp bilder till ett register;
- CRI-O â körmiljö för system för orkestrering av containrar (till exempel Kubernetes).
Jag tror att det Àr lÀmpligt att presentera en översikt av sambanden mellan komponenterna i stacken hÀr. Kubernetes c runC och lÄgnivÄbibliotek med anvÀndning av CRI-O:

CRI-O och Kubernetes följer samma cykel för utgivning och stöd (kompatibilitetsmatrisen Àr vÀldigt enkel: majorversionerna Kubernetes och CRI-O överensstÀmmer), och detta, med tanke pÄ fokus pÄ omfattande och heltÀckande testning av detta stack av utvecklarna, ger oss rÀtt att förvÀnta maximalt uppnÄelig stabilitet i driften vid alla anvÀndningsscenarier (hÀr hjÀlper ocksÄ den relativa lÀttvikten CRI-O jÀmfört med Docker pÄ grund av avsiktlig begrÀnsning av funktionaliteten).
Vid installation Kubernetes pÄ "rÀtt sÀtt" (enligt OCI, naturligtvis) med anvÀndning av CRI-O till CentOS 8 stÀlldes vi inför vissa mindre svÄrigheter, som vi dock framgÄngsrikt övervann. Jag skulle vara glad att dela med mig av installations- och konfigurationsanvisningarna som tillsammans tar högst 10 minuter.
SÄ hÀr distribuerar du Kubernetes pÄ CentOS 8 med hjÀlp av miljön CRI-O
FörutsÀttningar: minst en vÀrd (2 kÀrnor, 4 GB RAM, lagringsutrymme pÄ minst 15 GB) med installerad CentOS 8 (profilen "Server" rekommenderas), samt en post för den i lokal DNS (om det Àr absolut nödvÀndigt kan du klara dig med en post i /etc/hosts). Och glöm inte .
Alla operationer pÄ vÀrden utförs som anvÀndaren root, var vÀnlig var försiktig.
- I det första steget kommer vi att konfigurera OS, installera och konfigurera förhandskraven för CRI-O.
- Uppdatera OS:
dnf -y update
- DÀrefter mÄste vi konfigurera brandvÀggen och SELinux. HÀr beror allt pÄ miljön i vilken vÄr vÀrd eller vÀrdar kommer att arbeta. Du kan antingen konfigurera brandvÀggen enligt rekommendationerna frÄn , eller om du Àr i ett betrott nÀtverk eller anvÀnder en extern brandvÀgg, Àndra standardzonen till betrodd eller stÀnga av brandvÀggen:
firewall-cmd --set-default-zone trusted firewall-cmd --reloadFör att stÀnga av brandvÀggen kan följande kommando anvÀndas:
systemctl disable --now firewalldSELinux mÄste stÀngas av eller sÀttas i "permissive"-lÀge:
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- lÄt oss ladda de nödvÀndiga kÀrnmodulerna och paketen, konfigurera automatisk laddning av modulen "br_netfilter" vid systemstart:
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- För att aktivera paketdirigering och korrekt hantering av trafik ska vi göra följande instÀllningar:
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOFTillÀmpa de gjorda instÀllningarna:
sysctl --system
- Ange den nödvÀndiga versionen CRI-O (huvudversion CRI-O, som nÀmnts tidigare, överensstÀmmer med den krÀvd versionen Kubernetes), dÄ den senaste stabila versionen Kubernetes Àr för nÀrvarande 1.18:
export REQUIRED_VERSION=1.18LÀgg till de nödvÀndiga repositories:
dnf -y install 'dnf-command(copr)' dnf -y copr enable rhcontainerbot/container-selinux curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo
- Nu kan vi installera CRI-O:
dnf -y install cri-oObservera den första detaljen vi stöter pÄ under installationsprocessen: det Àr nödvÀndigt att redigera konfigurationen CRI-O innan tjÀnsten startas, eftersom den nödvÀndiga komponenten conmon har en annan placering Àn den angivna:
sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.confNu kan vi aktivera och starta demon CRI-O:
systemctl enable --now crioDu kan kontrollera demonens status:
systemctl status crio
- Uppdatera OS:
- Installation och aktivering Kubernetes.
- LÀgg till det krÀvs repository:
cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOFNu kan vi installera Kubernetes (version 1.18, som nÀmnts ovan):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- Den andra viktiga detaljen: eftersom vi inte anvÀnder demon Docker, utan anvÀnder demon CRI-O, innan vi startar och initialiserar Kubernetes mÄste vi göra de nödvÀndiga instÀllningarna i konfigurationsfilen /var/lib/kubelet/config.yaml, efter att ha skapat den nödvÀndiga katalogen:
mkdir /var/lib/kubelet cat < /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- Den tredje viktiga punkten vi stöter pÄ under installationen: trots att vi angav den anvÀnda drivrutinen cgroup, och dess konfiguration via överlÀmnade argument kubelet Àr förÄldrad (vilket betecknas tydligt i dokumentationen), behöver vi lÀgga till argument i filen, annars kommer vÄr kluster inte att initialiseras:
cat /dev/null > /etc/sysconfig/kubelet cat < /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' EOF
- Nu kan vi aktivera demon kubelet:
sudo systemctl enable --now kubeletFör att konfigurera kontrollplan eller arbetare noder pÄ bara nÄgra minuter kan du anvÀnda .
- LÀgg till det krÀvs repository:
- Det Àr dags att initiera vÄr kluster.
- För att initiera klustret, kör kommandot:
kubeadm init --pod-network-cidr=10.244.0.0/16Se till att skriva ner kommandot för att ansluta till klustret 'kubeadm join âŠ' som föreslĂ„s i slutet av utskriften, eller Ă„tminstone de angivna token.
- Vi installerar en plugin (CNI) för att arbeta med Pod-nÀtverket. Jag rekommenderar att anvÀnda Calico. Kanske mer populÀr Flannel har kompatibilitetsproblem med nftables, och Calico Àr den enda CNI-implementering som rekommenderas och Àr fullt testad av projektet Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- För att ansluta arbetarnoden till vĂ„rt kluster behöver den konfigureras enligt punkterna i instruktionerna 1 och 2, eller anvĂ€nda , och sedan köra kommandot frĂ„n utskriften 'kubeadm init âŠ' som vi skrev ner i föregĂ„ende steg:
kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN --discovery-token-ca-cert-hash $TOKEN_HASH
- Vi kontrollerar att vÄrt kluster har initierats och börjat fungera:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
Klart! Du kan nu distribuera arbetsbelastning pÄ din K8s-kluster.
- För att initiera klustret, kör kommandot:
Vad vÀntar oss framöver
Jag hoppas att instruktionen ovan har hjÀlpt dig spara lite tid och nervös energi.
Resultatet av processerna som pÄgÄr i branschen beror ofta pÄ hur de tas emot av den stora massan av slutanvÀndare och utvecklare av annan programvara inom den relevanta nischen. Det Àr fortfarande oklart vilket resultat initiative OCI kommer att leda till om nÄgra Är, men vi kommer gÀrna att följa det. Du kan dela med dig av din Äsikt just nu i kommentarerna.
Stay tuned!
Denna artikel har uppstÄtt tack vare följande kÀllor:
- Avsnittet om Container runtimes i
- projektet CRI-O pÄ Internet
- Artiklar pÄ Red Hat-bloggar: , och mÄnga andra
KĂ€lla: habr.com
