CRI-O kui Dockeri asendus Kubernetese käituskeskkonnana: seadistamine CentOS 8-s

Tere! Minu nimi on Sergey, ma olen DevOps Surfis. Surfi DevOpsi osakonna eesmärk on mitte ainult luua spetsialistide vahelist suhtlust ja integreerida tööprotsesse, vaid ka aktiivselt uurida ja rakendada praeguseid tehnoloogiaid nii enda kui ka kliendi infrastruktuuris.

Allpool räägin veidi muudatustest konteinerite tehnoloogilises virnas, millega puutusime kokku distributsiooni uurimisel 8 CentOS ja selle kohta, mis see on CRI-O ja kuidas kiiresti täitmiskeskkonda seadistada Kubernetes.

CRI-O kui Dockeri asendus Kubernetese käituskeskkonnana: seadistamine CentOS 8-s

Miks ei ole Dockerit CentOS 8-s?

Pärast viimaste suuremate väljaannete installimist rhel 8 või 8 CentOS ei saa jätta märkamata: need distributsioonid ja ametlikud hoidlad ei sisalda rakendust laevalaadija, mis asendavad ideoloogiliselt ja funktsionaalselt pakette podman, Buildah (vaikimisi jaotuses olemas) ja CRI-O. Selle põhjuseks on muu hulgas Red Hati projekti Open Container Initiative (OCI) raames välja töötatud standardite praktiline rakendamine.

The Linux Foundationi osaks oleva OCI eesmärk on luua avatud tööstusstandardid konteinerivormingute ja käitusaegade jaoks, mis lahendavad mitu probleemi korraga. Esiteks ei läinud need vastuollu Linuxi filosoofiaga (näiteks selles osas, et iga programm peaks sooritama ühe toimingu ja laevalaadija on omamoodi kõik-ühes kombain). Teiseks saaksid need kõrvaldada kõik olemasolevad tarkvarapuudused laevalaadija. Kolmandaks oleksid need täielikult ühilduvad juhtivate kommertsplatvormide ärinõuetega konteinerrakenduste juurutamiseks, haldamiseks ja teenindamiseks (nt Red Hat OpenShift).

Piirangud laevalaadija ja uue tarkvara eeliseid on juba üksikasjalikult kirjeldatud see artikkel, ning kogu OCI projekti raames pakutava tarkvarapinu ja selle arhitektuursete omaduste üksikasjaliku kirjelduse leiate Red Hati enda ametlikust dokumentatsioonist ja artiklitest (pole paha artikkel Red Hati ajaveebis) ja kolmanda osapoole veebisaidil arvustused.

Oluline on märkida, millised funktsioonid on pakutud virna komponentidel:

  • podman — otsene suhtlus konteinerite ja kujutiste salvestamisega runC protsessi kaudu;
  • Buildah — piltide koostamine ja registrisse üleslaadimine;
  • CRI-O — täitmiskeskkond konteinerite orkestreerimissüsteemide jaoks (näiteks Kubernetes).

Arvan, et virna komponentide interaktsiooni üldise skeemi mõistmiseks on soovitatav siin esitada ühendusskeem Kubernetes c runC ja madala taseme raamatukogud kasutavad CRI-O:

CRI-O kui Dockeri asendus Kubernetese käituskeskkonnana: seadistamine CentOS 8-s

CRI-O и Kubernetes järgige sama väljalaske- ja tugitsüklit (ühilduvusmaatriks on väga lihtne: peamised versioonid Kubernetes и CRI-O langeb kokku) ja see, võttes arvesse keskendumist selle virna toimimise täielikule ja igakülgsele testimisele arendajate poolt, annab meile õiguse eeldada maksimaalset saavutatavat tööstabiilsust mis tahes kasutusstsenaariumi korral (samuti tuleb siin kasuks suhteline kergus). CRI-O võrreldes laevalaadija funktsionaalsuse sihipärase piiramise tõttu).

Paigaldamisel Kubernetes "õige tee" viis (vastavalt OCI-le muidugi) kasutades CRI-O edasi 8 CentOS Meil tekkisid väikesed raskused, millest saime siiski edukalt üle. Hea meelega jagan teiega paigaldus- ja seadistamisjuhiseid, mis kokku võtavad umbes 10 minutit.

Kuidas juurutada Kubernetes CentOS 8-s, kasutades CRI-O raamistikku

Eeltingimused: vähemalt ühe installitud hosti olemasolu (2 tuuma, 4 GB muutmälu, vähemalt 15 GB salvestusruumi) 8 CentOS (soovitatav on installiprofiil "Server"), samuti selle kirjed kohalikus DNS-is (viimase abinõuna saate hakkama kirjega /etc/hosts). Ja ära unusta keelata vahetus.

Teeme kõik toimingud hostiga juurkasutajana, olge ettevaatlik.

  1. Esimeses etapis konfigureerime OS-i, installime ja konfigureerime CRI-O esialgsed sõltuvused.
    • Värskendame OS-i:
      dnf -y update
      

    • Järgmisena peate konfigureerima tulemüüri ja SELinuxi. Siin sõltub kõik keskkonnast, milles meie võõrustaja või võõrustajad töötavad. Võite tulemüüri seadistada vastavalt veebisaidi soovitustele dokumentatsioonvõi kui olete usaldusväärses võrgus või kasutate kolmanda osapoole tulemüüri, muutke vaiketsooniks usaldusväärne või lülitage tulemüür välja:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Tulemüüri väljalülitamiseks võite kasutada järgmist käsku:

      systemctl disable --now firewalld
      

      SELinux tuleb välja lülitada või lülitada lubavasse režiimi:

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

    • Laadige vajalikud kerneli moodulid ja paketid, konfigureerige mooduli “br_netfilter” automaatne laadimine süsteemi käivitamisel:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Pakettide edastamise aktiveerimiseks ja liikluse korrektseks töötlemiseks teeme vastavad seaded:
      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
      

      rakendage tehtud sätteid:

      sysctl --system

    • määrake vajalik versioon CRI-O (peamine versioon CRI-O, nagu juba mainitud, vastavad vajalikule versioonile Kubernetes), alates viimasest stabiilsest versioonist Kubernetes hetkel 1.18:
      export REQUIRED_VERSION=1.18
      

      lisage vajalikud hoidlad:

      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

    • nüüd saame installida CRI-O:
      dnf -y install cri-o
      

      Pöörake tähelepanu esimesele nüansile, millega installimisprotsessi käigus kokku puutume: peate konfiguratsiooni muutma CRI-O enne teenuse käivitamist, kuna nõutav ühiskomponent asub määratud asukohast erinevas asukohas:

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

      Nüüd saate deemoni aktiveerida ja käivitada CRI-O:

      systemctl enable --now crio
      

      Deemoni olekut saate kontrollida:

      systemctl status crio
      

  2. Paigaldamine ja aktiveerimine Kubernetes.
    • Lisame vajaliku hoidla:
      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
      

      Nüüd saame installida Kubernetes (versioon 1.18, nagu eespool mainitud):

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

    • Teine oluline nüanss: kuna me ei kasuta deemonit laevalaadija, kuid me kasutame deemonit CRI-O, enne käivitamist ja lähtestamist Kubernetes peate konfiguratsioonifailis /var/lib/kubelet/config.yaml tegema vastavad sätted, olles esmalt loonud soovitud kataloogi:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Kolmas oluline punkt, millega me installimisel kokku puutume: hoolimata asjaolust, et oleme kasutanud draiverit märkinud cgrupp, ja selle konfigureerimine edastatud argumentide kaudu kubelet on aegunud (nagu dokumentatsioonis selgesõnaliselt öeldud), peame failile argumendid lisama, vastasel juhul meie klastrit ei lähtestata:
      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

    • Nüüd saame deemoni aktiveerida kubelet:
      sudo systemctl enable --now kubelet
      

      Kohandamiseks juhttasand või töötaja sõlmed minutitega, saate kasutada selle skriptiga.

  3. On aeg meie klaster lähtestada.
    • Klastri lähtestamiseks käivitage käsk:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Kirjutage kindlasti üles klastriga liitumise käsk “kubeadm join …”, mida palutakse kasutada väljundi lõpus või vähemalt määratud märgid.

    • Installime Pod-võrgu pistikprogrammi (CNI). Soovitan kasutada Calico. Võimalik, et populaarsem Flanell on ühilduvusprobleemid nftables, ja Calico - ainus projekti poolt soovitatud ja täielikult testitud CNI-rakendus Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Töötaja sõlme ühendamiseks meie klastriga peate selle konfigureerima vastavalt juhistele 1 ja 2 või kasutama stsenaarium, seejärel käivitage käsk väljundist "kubeadm init...", mille me eelmises etapis üles kirjutasime:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Kontrollime, kas meie klaster on lähtestatud ja tööle hakanud:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Valmis! Saate juba oma K8 klastris kasulikke koormusi hostida.

Mis meid ees ootab

Loodan, et ülaltoodud juhised aitasid teil aega ja närve säästa.
Tööstuses toimuvate protsesside tulemus sõltub sageli sellest, kuidas enamik lõppkasutajaid ja muu vastavas nišis oleva tarkvara arendajaid neid vastu võtab. Pole veel päris selge, milleni OCI algatused mõne aasta pärast kaasa toovad, kuid jääme mõnuga jälgima. Saate oma arvamust kohe kommentaarides jagada.

Hoia!

See artikkel ilmus tänu järgmistele allikatele:



Allikas: www.habr.com

Lisa kommentaar