CRI-O som ersättning för Docker som körtidsmiljö för Kubernetes: installation på CentOS 8

Hallå! Jag heter Sergey, jag är DevOps på Surf. DevOps-avdelningen på Surf syftar inte bara till att etablera interaktion mellan specialister och integrera arbetsprocesser, utan också att aktivt forska och implementera aktuella teknologier både i sin egen infrastruktur och i kundens infrastruktur.

Nedan kommer jag att prata lite om förändringarna i teknologistacken för containrar som vi stötte på när vi studerade distributionen 8 CentOS och om vad som är SKAPA DET och hur man snabbt ställer in en körbar miljö för Kubernetes.

CRI-O som ersättning för Docker som körtidsmiljö för Kubernetes: installation på CentOS 8

Varför ingår inte Docker i CentOS 8?

Efter att ha installerat de senaste större utgåvorna RHEL 8 eller 8 CentOS man kan inte låta bli att lägga märke till: dessa distributioner och officiella arkiv innehåller inte applikationen Hamnarbetare, som ideologiskt och funktionellt ersätter paket poddman, Buildah (finns som standard i distributionen) och SKAPA DET. Detta beror på den praktiska implementeringen av standarder som bland annat utvecklats av Red Hat som en del av projektet Open Container Initiative (OCI).

Målet med OCI, som är en del av The Linux Foundation, är att skapa öppna industristandarder för containerformat och körtider som löser flera problem samtidigt. För det första motsäger de inte Linux-filosofin (till exempel i den delen att varje program ska utföra en åtgärd, och Hamnarbetare är en sorts allt-i-ett-tröska). För det andra skulle de kunna eliminera alla befintliga brister i programvaran Hamnarbetare. För det tredje skulle de vara helt kompatibla med affärskraven för ledande kommersiella plattformar för att distribuera, hantera och betjäna containeriserade applikationer (till exempel Red Hat OpenShift).

Begränsningar Hamnarbetare och fördelarna med den nya mjukvaran har redan beskrivits i detalj i den här artikeln, och en detaljerad beskrivning av hela mjukvarustacken som erbjuds inom OCI-projektet och dess arkitektoniska funktioner finns i den officiella dokumentationen och artiklar från Red Hat själv (inte dåligt artikel i Red Hat-bloggen) och i tredje part recensioner.

Det är viktigt att notera vilken funktionalitet komponenterna i den föreslagna stacken har:

  • poddman — Direkt interaktion med behållare och bildlagring genom runC-processen.
  • Buildah — Sammansättning och uppladdning av bilder till registret.
  • SKAPA DET — En körbar miljö för containerorkestreringssystem (till exempel Kubernetes).

Jag tror att för att förstå det allmänna schemat för interaktion mellan stackens komponenter är det lämpligt att tillhandahålla ett anslutningsdiagram här Kubernetes c runC och lågnivåbibliotek som använder SKAPA DET:

CRI-O som ersättning för Docker som körtidsmiljö för Kubernetes: installation på CentOS 8

SKAPA DET и Kubernetes följ samma release- och supportcykel (kompatibilitetsmatrisen är mycket enkel: större versioner Kubernetes и SKAPA DET sammanfaller), och detta, med hänsyn till fokus på fullständig och omfattande testning av driften av denna stack av utvecklare, ger oss rätten att förvänta oss den maximala uppnåeliga stabiliteten i drift under alla användningsscenarier (relativ lätthet är också fördelaktigt här SKAPA DET jämfört med Hamnarbetare på grund av avsiktlig begränsning av funktionalitet).

När du installerar Kubernetes "rätt sätt" sätt (enligt OCI, naturligtvis) att använda SKAPA DET8 CentOS Vi stötte på några mindre svårigheter, som vi dock lyckades övervinna. Jag delar gärna med mig av installations- och konfigurationsinstruktioner, som totalt tar cirka 10 minuter.

Hur man distribuerar Kubernetes på CentOS 8 med CRI-O-ramverket

Förutsättningar: närvaro av minst en värd (2 kärnor, 4 GB RAM, minst 15 GB lagring) med installerad 8 CentOS (Installationsprofilen “Server” rekommenderas), såväl som poster för den i den lokala DNS (som en sista utväg kan du klara dig med en post i /etc/hosts). Och glöm inte inaktivera swap.

Vi utför alla operationer på värden som rotanvändare, var försiktig.

  1. I det första steget kommer vi att konfigurera operativsystemet, installera och konfigurera preliminära beroenden för CRI-O.
    • Låt oss uppdatera OS:
      dnf -y update
      

    • Därefter måste du konfigurera brandväggen och SELinux. Här beror allt på i vilken miljö vår värd eller värdar kommer att arbeta. Du kan antingen sätta upp en brandvägg enligt rekommendationerna från dokumentation, eller, om du är på ett pålitligt nätverk eller använder en brandvägg från tredje part, ändra standardzonen till pålitlig eller stäng av brandväggen:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      För att stänga av brandväggen kan du använda följande kommando:

      systemctl disable --now firewalld
      

      SELinux måste stängas av eller växlas till "tillåtande" läge:

      setenforce 0
      
      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

    • Ladda de nödvändiga kärnmodulerna och paketen, konfigurera den automatiska laddningen 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 vidarebefordran av paket och korrekt trafikhantering kommer vi att göra lämpliga 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

    • ställ in önskad version SKAPA DET (huvudversion SKAPA DET, som redan nämnts, matcha den version som krävs Kubernetes), sedan den senaste stabila versionen Kubernetes för närvarande 1.18:
      export REQUIRED_VERSION=1.18
      

      lägg till nödvändiga förråd:

      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 SKAPA DET:
      dnf -y install cri-o
      

      Var uppmärksam på den första nyansen som vi stöter på under installationsprocessen: du måste redigera konfigurationen SKAPA DET innan du startar tjänsten, eftersom den nödvändiga conmon-komponenten har en annan plats än den angivna:

      sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.conf

      Nu kan du aktivera och starta demonen SKAPA DET:

      systemctl enable --now crio
      

      Du kan kontrollera demonens status:

      systemctl status crio
      

  2. Installation och aktivering Kubernetes.
    • Låt oss lägga till det nödvändiga arkivet:
      cat <<EOF > /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 nyansen: eftersom vi inte använder en demon Hamnarbetare, men vi använder demonen SKAPA DET, före start och initiering Kubernetes du måste göra lämpliga inställningar i konfigurationsfilen /var/lib/kubelet/config.yaml, efter att först ha skapat den önskade katalogen:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Den tredje viktiga punkten som vi stöter på under installationen: trots att vi har angett vilken drivrutin som används c-grupp, och dess konfiguration genom argumenten som skickas kublett är föråldrad (som uttryckligen anges i dokumentationen), måste vi lägga till argument till filen, annars kommer vårt kluster inte att initieras:
      cat /dev/null > /etc/sysconfig/kubelet
      
      cat <<EOF > /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 demonen kublett:
      sudo systemctl enable --now kubelet
      

      Att anpassa kontrollplan eller arbetstagaren noder på några minuter kan du använda med detta manus.

  3. Det är dags att initiera vårt kluster.
    • För att initiera klustret, kör kommandot:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Var noga med att skriva ner kommandot för att gå med i klustret "kubeadm join ...", som du ombeds använda i slutet av utdata, eller åtminstone de angivna tokens.

    • Låt oss installera plugin (CNI) för Pod-nätverket. Jag rekommenderar att använda Kalikå. Kanske mer populärt Flanell har kompatibilitetsproblem med nftables, Ja och Kalikå - den enda CNI-implementering som rekommenderas och testas fullständigt av projektet Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • För att ansluta en arbetarnod till vårt kluster måste du konfigurera den enligt instruktionerna 1 och 2, eller använda manus, kör sedan kommandot från "kubeadm init..."-utgången som vi skrev ner i föregående steg:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Låt oss kontrollera att vårt kluster är initierat och börjat fungera:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Redo! Du kan redan vara värd för nyttolaster på ditt K8s-kluster.

Vad som väntar oss framåt

Jag hoppas att instruktionerna ovan hjälpte dig att spara lite tid och nerver.
Resultatet av processer som sker i branschen beror ofta på hur de accepteras av huvuddelen av slutanvändare och utvecklare av annan mjukvara i motsvarande nisch. Det är ännu inte helt klart vad OCI-initiativen kommer att leda till om några år, men vi kommer att följa med glädje. Du kan dela din åsikt just nu i kommentarerna.

Håll dig igång!

Den här artikeln dök upp tack vare följande källor:



Källa: will.com

Lägg en kommentar