CRI-O as 'n plaasvervanger vir Docker as 'n runtime-omgewing vir Kubernetes: opstel op CentOS 8

Hallo! My naam is Sergey, ek is DevOps by Surf. Die DevOps-afdeling by Surf poog nie net om interaksie tussen spesialiste te vestig en werkprosesse te integreer nie, maar ook om huidige tegnologieë aktief na te vors en te implementeer, beide in sy eie infrastruktuur en in die kliënt se infrastruktuur.

Hieronder sal ek 'n bietjie praat oor die veranderinge in die tegnologiestapel vir houers wat ons teëgekom het terwyl ons die verspreiding bestudeer het CentOS 8 en oor wat dit is CRI-O en hoe om vinnig 'n uitvoerbare omgewing op te stel vir Kubernetes.

CRI-O as 'n plaasvervanger vir Docker as 'n runtime-omgewing vir Kubernetes: opstel op CentOS 8

Waarom is Docker nie by CentOS 8 ingesluit nie?

Na die installering van die nuutste groot vrystellings rhel 8 of CentOS 8 mens kan nie anders as om op te let nie: hierdie verspreidings en amptelike bewaarplekke het nie die toepassing nie Docker, wat ideologies en funksioneel pakkette vervang podman, Buildah (by verstek teenwoordig in die verspreiding) en CRI-O. Dit is te danke aan die praktiese implementering van standaarde wat onder meer deur Red Hat ontwikkel is as deel van die Open Container Initiative (OCI)-projek.

Die doel van OCI, wat deel is van The Linux Foundation, is om oop industriestandaarde te skep vir houerformate en looptye wat verskeie probleme gelyktydig oplos. Eerstens het hulle nie die filosofie van Linux weerspreek nie (byvoorbeeld in die deel dat elke program een ​​aksie moet uitvoer, en Docker is 'n soort alles-in-een-kombinasie). Tweedens kan hulle alle bestaande tekortkominge in die sagteware uitskakel Docker. Derdens sal hulle ten volle versoenbaar wees met die besigheidsvereistes van toonaangewende kommersiële platforms vir die ontplooiing, bestuur en bediening van houertoepassings (byvoorbeeld Red Hat OpenShift).

Beperkings Docker en die voordele van die nuwe sagteware is reeds in 'n mate beskryf in Hierdie artikel, en 'n gedetailleerde beskrywing van die hele sagtewarestapel wat binne die OCI-projek aangebied word en sy argitektoniese kenmerke kan gevind word in die amptelike dokumentasie en artikels van Red Hat self (nie sleg nie статья in Red Hat-blog) en in derdeparty resensies.

Dit is belangrik om daarop te let watter funksionaliteit die komponente van die voorgestelde stapel het:

  • podman — direkte interaksie met houers en beeldberging deur die runC-proses;
  • Buildah - samestelling en oplaai van beelde na die register;
  • CRI-O — 'n uitvoerbare omgewing vir houerorkestrasiestelsels (byvoorbeeld Kubernetes).

Ek dink dat om die algemene skema van interaksie tussen die komponente van die stapel te verstaan, dit raadsaam is om 'n verbindingsdiagram hier te verskaf Kubernetes c hardloopC en lae-vlak biblioteke gebruik CRI-O:

CRI-O as 'n plaasvervanger vir Docker as 'n runtime-omgewing vir Kubernetes: opstel op CentOS 8

CRI-O и Kubernetes hou by dieselfde vrystelling en ondersteuningsiklus (die verenigbaarheidsmatriks is baie eenvoudig: hoof weergawes Kubernetes и CRI-O saamval), en dit, met inagneming van die fokus op volledige en omvattende toetsing van die werking van hierdie stapel deur ontwikkelaars, gee ons die reg om die maksimum haalbare stabiliteit in werking te verwag onder enige gebruikscenario's (relatiewe ligtheid is ook hier voordelig) CRI-O in vergelyking met Docker as gevolg van doelgerigte beperking van funksionaliteit).

By die installering Kubernetes "regte manier" manier (volgens OCI, natuurlik) gebruik CRI-O op CentOS 8 Ons het 'n paar klein probleme ondervind, wat ons egter suksesvol oorkom het. Ek sal met graagte installasie- en konfigurasie-instruksies met jou deel, wat in totaal ongeveer 10 minute sal neem.

Hoe om Kubernetes op CentOS 8 te ontplooi met behulp van die CRI-O-raamwerk

Voorvereistes: teenwoordigheid van ten minste een gasheer (2 kerns, 4 GB RAM, ten minste 15 GB berging) met geïnstalleerde CentOS 8 (die “Server”-installasieprofiel word aanbeveel), sowel as inskrywings daarvoor in die plaaslike DNS (as 'n laaste uitweg kan jy klaarkom met 'n inskrywing in /etc/hosts). En moenie vergeet nie deaktiveer ruil.

Ons voer alle bewerkings uit op die gasheer as die wortelgebruiker, wees versigtig.

  1. In die eerste stap sal ons die bedryfstelsel opstel, voorlopige afhanklikhede vir CRI-O installeer en instel.
    • Kom ons werk die OS op:
      dnf -y update
      

    • Vervolgens moet u die firewall en SELinux konfigureer. Hier hang alles af van die omgewing waarin ons gasheer of gashere sal werk. U kan óf 'n firewall opstel volgens die aanbevelings van dokumentasie, of, as jy op 'n vertroude netwerk is of 'n derdeparty-brandmuur gebruik, verander die versteksone na vertroud of skakel die brandmuur af:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Om die firewall af te skakel, kan jy die volgende opdrag gebruik:

      systemctl disable --now firewalld
      

      SELinux moet afgeskakel word of oorgeskakel word na "permissiewe" modus:

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

    • Laai die nodige kernmodules en -pakkette, konfigureer die outomatiese laai van die "br_netfilter"-module by die opstart van die stelsel:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Om pakkie-aanstuur en korrekte verkeersverwerking te aktiveer, sal ons die toepaslike instellings maak:
      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
      

      pas die instellings wat gemaak is toe:

      sysctl --system

    • stel die vereiste weergawe in CRI-O (hoof weergawe CRI-O, soos reeds genoem, pas by die vereiste weergawe Kubernetes), sedert die nuutste stabiele weergawe Kubernetes tans 1.18:
      export REQUIRED_VERSION=1.18
      

      voeg die nodige bewaarplekke by:

      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

    • nou kan ons installeer CRI-O:
      dnf -y install cri-o
      

      Gee aandag aan die eerste nuanse wat ons tydens die installasieproses teëkom: u moet die konfigurasie wysig CRI-O voordat die diens begin word, aangesien die vereiste algemene komponent 'n ander ligging het as die gespesifiseerde een:

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

      Nou kan jy die daemon aktiveer en begin CRI-O:

      systemctl enable --now crio
      

      U kan die daemonstatus nagaan:

      systemctl status crio
      

  2. Installasie en aktivering Kubernetes.
    • Kom ons voeg die vereiste bewaarplek by:
      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
      

      Nou kan ons installeer Kubernetes (weergawe 1.18, soos hierbo genoem):

      dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes

    • Die tweede belangrike nuanse: aangesien ons nie 'n daemoon gebruik nie Docker, maar ons gebruik die daemoon CRI-O, voor bekendstelling en inisialisering Kubernetes jy moet die toepaslike instellings in die konfigurasielêer /var/lib/kubelet/config.yaml maak, nadat jy eers die verlangde gids geskep het:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Die derde belangrike punt wat ons tydens die installasie teëkom: ten spyte van die feit dat ons die bestuurder aangedui het wat gebruik word cgroep, en die konfigurasie daarvan deur die argumente wat deurgegee is kubelet verouderd is (soos uitdruklik in die dokumentasie genoem word), moet ons argumente by die lêer voeg, anders sal ons groepie nie geïnisialiseer word nie:
      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

    • Nou kan ons die daemon aktiveer kubelet:
      sudo systemctl enable --now kubelet
      

      Om aan te pas beheer-vlak of werker nodusse binne minute, kan jy gebruik met hierdie skrif.

  3. Dit is tyd om ons cluster te inisialiseer.
    • Om die groepie te inisialiseer, voer die opdrag uit:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Maak seker dat jy die opdrag neerskryf om by die groep “kubeadm join …” aan te sluit, wat jy gevra word om aan die einde van die afvoer te gebruik, of ten minste die gespesifiseerde tokens.

    • Kom ons installeer die inprop (CNI) vir die Pod-netwerk. Ek beveel aan om te gebruik Calico. Moontlik meer gewild flanel het verenigbaarheidsprobleme met nftables, ja en Calico - die enigste CNI-implementering wat deur die projek aanbeveel en volledig getoets is Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Om 'n werkernodus aan ons groepering te koppel, moet jy dit volgens instruksies 1 en 2 opstel, of gebruik skrif, voer dan die opdrag uit die "kubeadm init..."-uitvoer wat ons in die vorige stap neergeskryf het:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Kom ons kyk of ons groepering geïnisialiseer is en begin werk het:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Klaar! Jy kan reeds loonvragte op jou K8s-groep huisves.

Wat wag op ons vorentoe

Ek hoop dat die instruksies hierbo gehelp het om jou tyd en senuwees te bespaar.
Die uitkoms van prosesse wat in die bedryf plaasvind, hang dikwels af van hoe dit deur die meeste eindgebruikers en ontwikkelaars van ander sagteware in die ooreenstemmende nis aanvaar word. Dit is nog nie heeltemal duidelik waartoe die OCI-inisiatiewe oor 'n paar jaar gaan lei nie, maar ons sal met plesier kyk. Jy kan jou mening dadelik in die kommentaar deel.

Bly ingeskakel!

Hierdie artikel het te danke aan die volgende bronne verskyn:



Bron: will.com

Voeg 'n opmerking