CRI-O som alternativ till Docker som körmiljö för Kubernetes: installation pÄ CentOS 8

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.

CRI-O som alternativ till Docker som körmiljö för Kubernetes: installation pÄ CentOS 8

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 denna artikel, 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 artikeln i Red Hat-bloggen) och externa recensioner.

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 som alternativ till Docker som körmiljö för Kubernetes: installation pÄ CentOS 8

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 att stÀnga av swap.

Alla operationer pÄ vÀrden utförs som anvÀndaren root, var vÀnlig var försiktig.

  1. 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 dokumentationen, 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 --reload

      För att stÀnga av brandvÀggen kan följande kommando anvÀndas:

      systemctl disable --now firewalld
      

      SELinux 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
      EOF
      

      TillÀ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.18
      

      LÀ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-o
      

      Observera 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.conf

      Nu kan vi aktivera och starta demon CRI-O:

      systemctl enable --now crio
      

      Du kan kontrollera demonens status:

      systemctl status crio
      

  2. 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
      EOF
      

      Nu 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 kubelet
      

      För att konfigurera kontrollplan eller arbetare noder pÄ bara nÄgra minuter kan du anvÀnda detta skript.

  3. 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/16
      

      Se 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 skript, 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.

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:



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