CRI-O bħala sostitut għal Docker bħala ambjent ta 'runtime għal Kubernetes: setup fuq CentOS 8

Bongu! Jisimni Sergey, jien DevOps fuq Surf. Id-dipartiment DevOps f'Surf jimmira mhux biss li jistabbilixxi interazzjoni bejn speċjalisti u jintegra l-proċessi tax-xogħol, iżda wkoll li jirriċerka b'mod attiv u jimplimenta t-teknoloġiji attwali kemm fl-infrastruttura tiegħu stess kif ukoll fl-infrastruttura tal-klijent.

Hawn taħt se nitkellem ftit dwar il-bidliet fil-munzell tat-teknoloġija għall-kontenituri li ltqajna magħhom waqt li nistudjaw id-distribuzzjoni CentOS 8 u dwar dak li hu CRI-O u kif twaqqaf malajr ambjent eżekutibbli għal Kubernetes.

CRI-O bħala sostitut għal Docker bħala ambjent ta 'runtime għal Kubernetes: setup fuq CentOS 8

Għaliex Docker mhux inkluż f'CentOS 8?

Wara l-installazzjoni l-aħħar ħarġiet maġġuri rhel 8 jew CentOS 8 wieħed ma jistax ma jinnotax: dawn id-distribuzzjonijiet u repożitorji uffiċjali ma fihomx l-applikazzjoni Docker, li ideoloġikament u funzjonalment jissostitwixxu l-pakketti podman, Buildah (preżenti fid-distribuzzjoni awtomatikament) u CRI-O. Dan huwa dovut għall-implimentazzjoni prattika ta’ standards żviluppati, fost affarijiet oħra, minn Red Hat bħala parti mill-proġett Open Container Initiative (OCI).

L-għan ta 'OCI, li huwa parti minn The Linux Foundation, huwa li toħloq standards industrijali miftuħa għal formati ta' kontenitur u runtimes li jsolvu diversi problemi f'daqqa. L-ewwelnett, ma kkontradixxewx il-filosofija tal-Linux (pereżempju, fil-parti li kull programm għandu jwettaq azzjoni waħda, u Docker hija tip ta 'all-in-one combine). It-tieni, jistgħu jeliminaw in-nuqqasijiet kollha eżistenti fis-softwer Docker. It-tielet, ikunu kompletament kompatibbli mar-rekwiżiti tan-negozju ta 'pjattaformi kummerċjali ewlenin għall-iskjerament, il-ġestjoni u s-servizz ta' applikazzjonijiet fil-kontejners (pereżempju, Red Hat OpenShift).

Limitazzjonijiet Docker u l-vantaġġi tas-softwer il-ġdid diġà ġew deskritti f'xi dettall fi Dan l-artikolu, u deskrizzjoni dettaljata tal-munzell tas-softwer kollu offrut fi ħdan il-proġett OCI u l-karatteristiċi arkitettoniċi tiegħu jistgħu jinstabu fid-dokumentazzjoni uffiċjali u l-artikoli minn Red Hat innifsu (mhux ħażin artikolu fil-blog ta’ Red Hat) u f’partijiet terzi reviżjonijiet.

Huwa importanti li wieħed jinnota liema funzjonalità għandhom il-komponenti tal-munzell propost:

  • podman — interazzjoni diretta mal-kontenituri u l-ħażna tal-immaġni permezz tal-proċess runC;
  • Buildah — l-assemblaġġ u t-tlugħ ta' immaġini fir-reġistru;
  • CRI-O — ambjent eżekutibbli għal sistemi ta' orkestrazzjoni tal-kontejners (pereżempju, Kubernetes).

Naħseb li biex tifhem l-iskema ġenerali ta 'interazzjoni bejn il-komponenti tal-munzell, huwa rakkomandabbli li tipprovdi dijagramma ta' konnessjoni hawn Kubernetes c runC u libreriji ta' livell baxx bl-użu CRI-O:

CRI-O bħala sostitut għal Docker bħala ambjent ta 'runtime għal Kubernetes: setup fuq CentOS 8

CRI-O и Kubernetes jaderixxu mal-istess ċiklu ta 'rilaxx u appoġġ (il-matriċi ta' kompatibilità hija sempliċi ħafna: verżjonijiet ewlenin Kubernetes и CRI-O jikkoinċidu), u dan, b'kont meħud tal-fokus fuq l-ittestjar komplut u komprensiv tal-operat ta 'dan il-munzell mill-iżviluppaturi, jagħtina d-dritt li nistennew l-istabbiltà massima li tista' tinkiseb fl-operazzjoni taħt kwalunkwe xenarju ta 'użu (il-ħeffa relattiva hija wkoll ta' benefiċċju hawnhekk CRI-O meta mqabbel ma ' Docker minħabba limitazzjoni intenzjonata tal-funzjonalità).

Meta tkun qed tinstalla Kubernetes "mod it-tajjeb" mod (skond OCI, ovvjament) bl-użu CRI-O fuq CentOS 8 Iltqajna ma’ xi diffikultajiet żgħar, li, madankollu, għelbuhom b’suċċess. Inkun kuntent li naqsam miegħek struzzjonijiet ta 'installazzjoni u konfigurazzjoni, li b'kollox se jieħdu madwar 10 minuti.

Kif tuża Kubernetes fuq CentOS 8 billi tuża l-qafas CRI-O

Prerekwiżiti: preżenza ta 'mill-inqas host wieħed (2 cores, 4 GB RAM, mill-inqas 15 GB ħażna) b'installat CentOS 8 (il-profil ta 'installazzjoni "Server" huwa rakkomandat), kif ukoll daħliet għalih fid-DNS lokali (bħala l-aħħar għażla, tista' tgħaddi minn dħul f'/etc/hosts). U tinsiex jiskonnettja tpartit.

Aħna nwettqu l-operazzjonijiet kollha fuq il-host bħala l-utent għerq, oqgħod attent.

  1. Fl-ewwel pass, aħna ser tikkonfigura l-OS, ninstallaw u nikkonfiguraw dipendenzi preliminari għal CRI-O.
    • Ejja naġġornaw l-OS:
      dnf -y update
      

    • Sussegwentement għandek bżonn tikkonfigura l-firewall u SELinux. Hawnhekk kollox jiddependi fuq l-ambjent li fih se jaħdmu l-host jew hosts tagħna. Tista 'jew twaqqaf firewall skond ir-rakkomandazzjonijiet minn dokumentazzjoni, jew, jekk inti fuq netwerk ta 'fiduċja jew tuża firewall ta' parti terza, ibdel iż-żona default għal fiduċja jew itfi l-firewall:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Biex itfi l-firewall tista' tuża l-kmand li ġej:

      systemctl disable --now firewalld
      

      SELinux jeħtieġ li jintefa jew jinxtegħel għall-modalità "permissiva":

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

    • Tgħabbi l-moduli u l-pakketti tal-kernel meħtieġa, ikkonfigura t-tagħbija awtomatika tal-modulu "br_netfilter" fl-istartjar tas-sistema:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Biex nattivaw it-trażmissjoni tal-pakketti u jikkoreġu l-ipproċessar tat-traffiku, aħna se nagħmlu s-settings xierqa:
      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
      

      applika s-settings li saru:

      sysctl --system

    • issettja l-verżjoni meħtieġa CRI-O (verżjoni ewlenija CRI-O, kif diġà ssemma, jaqblu mal-verżjoni meħtieġa Kubernetes), mill-aħħar verżjoni stabbli Kubernetes bħalissa 1.18:
      export REQUIRED_VERSION=1.18
      

      żid ir-repożitorji meħtieġa:

      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

    • issa nistgħu ninstallaw CRI-O:
      dnf -y install cri-o
      

      Oqgħod attent għall-ewwel sfumatura li niltaqgħu magħhom matul il-proċess ta 'installazzjoni: għandek bżonn teditja l-konfigurazzjoni CRI-O qabel ma jibda s-servizz, peress li l-komponent komuni meħtieġ għandu post differenti minn dak speċifikat:

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

      Issa tista 'tattiva u tibda d-daemon CRI-O:

      systemctl enable --now crio
      

      Tista' tiċċekkja l-istatus tad-daemon:

      systemctl status crio
      

  2. Installazzjoni u attivazzjoni Kubernetes.
    • Ejja nżidu r-repożitorju meħtieġ:
      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
      

      Issa nistgħu ninstallaw Kubernetes (verżjoni 1.18, kif imsemmi hawn fuq):

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

    • It-tieni sfumatura importanti: peress li aħna ma nużawx daemon Docker, iżda nużaw id-daemon CRI-O, qabel it-tnedija u l-inizjalizzazzjoni Kubernetes trid tagħmel is-settings xierqa fil-fajl tal-konfigurazzjoni /var/lib/kubelet/config.yaml, wara li l-ewwel ħoloq id-direttorju mixtieq:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • It-tielet punt importanti li niltaqgħu magħhom waqt l-installazzjoni: minkejja l-fatt li indikajna s-sewwieq użat cgroup, u l-konfigurazzjoni tagħha permezz tal-argumenti mgħoddija kubelet hija skaduta (kif iddikjarat b'mod espliċitu fid-dokumentazzjoni), irridu nżidu argumenti mal-fajl, inkella l-cluster tagħna mhux se jiġi inizjalizzat:
      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

    • Issa nistgħu nattivaw id-daemon kubelet:
      sudo systemctl enable --now kubelet
      

      Biex tippersonalizza pjan ta' kontroll jew ħaddiem nodi f'minuti, tista 'tuża b’din l-iskrittura.

  3. Wasal iż-żmien li inizjalizzaw il-cluster tagħna.
    • Biex tibda l-cluster, mexxi l-kmand:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Kun żgur li tikteb il-kmand biex tingħaqad mal-cluster "kubeadm join ...", li inti mitlub tuża fl-aħħar tal-output, jew għall-inqas it-tokens speċifikati.

    • Ejja ninstallaw il-plugin (CNI) għan-netwerk Pod. Nirrakkomanda li tuża Calico. Possibilment aktar popolari Flannel għandu kwistjonijiet ta 'kompatibilità ma' nftables, iva u Calico - l-unika implimentazzjoni tas-CNI rakkomandata u ttestjata bis-sħiħ mill-proġett Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Biex tgħaqqad node tal-ħaddiem mal-cluster tagħna, trid tikkonfigurah skont l-istruzzjonijiet 1 u 2, jew tuża iskrittura, imbagħad mexxi l-kmand mill-output "kubeadm init..." li ktibna fil-pass preċedenti:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Ejja niċċekkjaw li l-cluster tagħna huwa inizjalizzat u beda jaħdem:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Lest! Diġà tista' tospita payloads fuq il-cluster K8s tiegħek.

Dak li jistenniena 'l quddiem

Nittama li l-istruzzjonijiet ta 'hawn fuq għenuk tiffranka ftit ħin u nervi.
Ir-riżultat tal-proċessi li jseħħu fl-industrija ħafna drabi jiddependi fuq kif jiġu aċċettati mill-biċċa l-kbira tal-utenti finali u l-iżviluppaturi ta 'softwer ieħor fin-niċċa korrispondenti. Għadu mhux ċar għal kollox għal xiex se jwasslu l-inizjattivi OCI fi ftit snin, iżda se nkunu qed naraw bi pjaċir. Tista' taqsam l-opinjoni tiegħek issa fil-kummenti.

Soġġorn sintonizzat!

Dan l-artiklu deher grazzi għas-sorsi li ġejjin:



Sors: www.habr.com

Żid kumment