CRI-O si zëvendësim për Docker si mjedis ekzekutiv për Kubernetes: konfigurimi në CentOS 8

Përshëndetje! Më quajnë Sergei, unë jam DevOps në Surf. Departamenti DevOps në Surf ka për detyrë jo vetëm të krijojë ndërveprimin midis specialistëve dhe të integrojë proceset e punës, por gjithashtu të bëjë kërkime aktive dhe të implementojë teknologjitë aktuale si në infrastrukturën e tij, ashtu edhe në infrastrukturën e klientëve.

Më poshtë do të flas pak për ndryshimet në stakun teknologjik për kontejnerët, me të cilat u përballëm gjatë studimit të distribucionit. CentOS 8 dhe se çfarë është CRI-O dhe si ta konfiguroni shpejt një mjedis ekzekutiv me ndihmën e tij për Kubernetes.

CRI-O si zëvendësim për Docker si mjedis ekzekutiv për Kubernetes: konfigurimi në CentOS 8

Pse Docker nuk është i pranishëm në paketimin standard të CentOS 8.

Pas instalimit të versioneve më të fundit kryesore, RHEL 8 ose CentOS 8 nuk mund të mos vëreni: në këto distribucione dhe në depozitë zyrtare mungon aplikacioni Docker, i cili ideologjikisht dhe funksionalisht zëvendësohet nga paketat Podman, Buildah (të pranishme në distribucion nga default) dhe CRI-O. Kjo është e lidhur me realizimin praktik të standardeve që zhvillohen, përfshirë nga kompania Red Hat brenda projektit Open Container Initiative (OCI).

Qëllimi i OCI, që është pjesë e The Linux Foundation, është krijimi i standardeve të hapura industriale për formatet dhe mjedisin ekzekutiv të kontejnerëve, të cilat do të zgjidhnin menjëherë disa probleme. Së pari, të mos e kundërshtojnë filozofinë e Linux (për shembull, në atë pjesë të saj që çdo program duhet të kryejë një veprim të vetëm, ndërsa Docker përfaqëson një makinë të gjitha-në-një). Së dyti, të mund të eliminojnë të gjitha mangësitë ekzistuese në softuer Docker. Së treti, të ishin plotësisht të përputhshme me kërkesat e biznesit, të cilat janë të paraqitura nga platformat kryesore komerciale për implementimin, menaxhimin dhe mbështetje të aplikacioneve të kontenjerizuara (si Red Hat OpenShift).

Mangësitë Docker dhe avantazhet e softuerit të ri tashmë janë përshkruar mjaft për së mbari në këto artikuj, dhe për një përshkrim të detajuar të gjithçkaje që ofrohet në kuadër të projektit OCI dhe veçoritë e saj arkitektonike, mund të konsultoheni me dokumentacionin zyrtar dhe artikujt si nga vetë Red Hat (një e mirë artikulli në blogun e Red Hat), ashtu edhe në burime të tjera. në shqyrtime.

ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se çfarĂ« funksionaliteti kanĂ« komponentĂ«t e stakut tĂ« ofruar:

  • Podman — ndĂ«rveprimi i drejtpĂ«rdrejtĂ« me kontejnerĂ«t dhe depozitĂ«n e imazheve pĂ«rmes procesit runC;
  • Buildah — ndĂ«rtimi dhe ngarkimi nĂ« regjistrin e imazheve;
  • CRI-O — njĂ« mjedis ekzekutiv pĂ«r sistemet e orkestrimit tĂ« kontejnerĂ«ve (pĂ«r shembull, Kubernetes).

Mendoj se për të kuptuar skemën e përgjithshme të ndërveprimit midis komponentëve të stakut, është e arsyeshme të japim këtu një diagram lidhjesh Kubernetes c runC dhe biblioteka në nivel të ulët duke përdorur CRI-O:

CRI-O si zëvendësim për Docker si mjedis ekzekutiv për Kubernetes: konfigurimi në CentOS 8

CRI-O dhe Kubernetes ndjekin të njëjtin cikël lëshimi dhe mbështetjeje (matrica e përputhshmërisë është shumë e thjeshtë: versionet madhore Kubernetes dhe CRI-O përputhen), dhe kjo, duke marrë parasysh orientimin për testimin e plotë dhe të gjithanshëm të punës së këtij staku nga zhvilluesit, na jep të drejtën të presim stabilitetin më të arritshëm në funksionim në çdo skenar përdorimi (këtu ndihmon edhe relativisht lehtësia CRI-O në krahasim me Docker për shkak të kufizimit të qëllimshëm të funksionalitetit).

Gjatë instalimit Kubernetes në mënyrë «të drejtë» (sipas mendimit të OCI, sigurisht) duke përdorur CRI-O në CentOS 8 u përballëm me disa vështirësi të vogla, të cilat, megjithatë, i kaluam me sukses. Do të më pëlqente të ndaja me ju një udhëzues për instalimin dhe konfigurimin, që në total do të zgjasin maksimumi 10 minuta.

Si të shpërndajmë Kubernetes në CentOS 8 duke përdorur mjedisin CRI-O

Kushtet paraprake: të paktën një host (2 bërthama, 4 GB RAM, hapësirë të paktën 15 GB) me CentOS 8 (preferohet profili i instalimit «Server»), si dhe regjistrime për të në DNS-in lokal (në rastin më të keq, mund të kaloni me një regjistrim në /etc/hosts). Dhe mos harroni të çaktivizoni swap.

Të gjitha operacionet në host duhet të kryhen nga përdoruesi root, mos harroni.

  1. Në hapin e parë do të konfigurojmë sistemin operativ, do të installojmë dhe konfigurojmë varësitë paraprake për CRI-O.
    • Do tĂ« azhurnojmĂ« sistemin operativ:
      dnf -y update
      

    • MĂ« pas duhet tĂ« konfigurojmĂ« firewall-in dhe SELinux. KĂ«tu gjithçka varet nga mjedisi nĂ« tĂ« cilin do tĂ« punojnĂ« hosti ose hostet tona. Ju mund tĂ« konfiguroheni firewall-in sipas rekomandimeve nga dokumentacionin, ose, nĂ«se ndodheni nĂ« njĂ« rrjet tĂ« besueshĂ«m ose pĂ«rdorni njĂ« firewall tĂ« jashtĂ«m, tĂ« ndryshoni zonĂ«n e parazgjedhjes nĂ« tĂ« besueshme ose tĂ« çaktivizoni firewall-in:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Për të çaktivizuar firewall-in mund të përdorni komandën e mëposhtme:

      systemctl disable --now firewalld
      

      SELinux duhet të çaktivizohet ose të kalojë në modin «permissive»:

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

    • do tĂ« ngarkojmĂ« modulet e nevojshme tĂ« bĂ«rthamĂ«s dhe paketat, do tĂ« konfigurojmĂ« ngarkimin automatik tĂ« modulit «br_netfilter» gjatĂ« startit tĂ« sistemit:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • PĂ«r tĂ« aktivizuar pĂ«rparimin e paketave dhe pĂ«r tĂ« pĂ«rpunuar saktĂ«sisht trafikun, do tĂ« bĂ«jmĂ« pĂ«rgatitjet pĂ«rkatĂ«se:
      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
      

      Tani do të aplikojmë përgatitjet që kemi bërë:

      sysctl --system

    • do tĂ« vendosim versionin e nevojshĂ«m CRI-O (versioni kryesor CRI-O, siç u pĂ«rmend, pĂ«rputhen me versionin e kĂ«rkuar Kubernetes), pasi versioni mĂ« i fundit stabil Kubernetes nĂ« kĂ«tĂ« moment Ă«shtĂ« 1.18:
      export REQUIRED_VERSION=1.18
      

      do të shtojmë depozitat e nevojshme:

      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

    • Tani mund tĂ« instalojmĂ« CRI-O:
      dnf -y install cri-o
      

      Kujdesuni për pikën e parë që hasim gjatë instalimit: duhet të redaktojmë konfigurimin CRI-O para se të nisnim shërbimin, pasi komponenti i nevojshëm conmon ka një vendndodhje të ndryshme nga ajo e caktuar:

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

      Tani mund të aktivizojmë dhe nisim demonin CRI-O:

      systemctl enable --now crio
      

      Mund të kontrolloni statusin e demonit:

      systemctl status crio
      

  2. Instalimi dhe aktivizimi Kubernetes.
    • Do tĂ« shtojmĂ« depozitĂ«n e kĂ«rkuar:
      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
      

      Tani mund të instalojmë Kubernetes (versionet 1.18, siç u përmend më sipër):

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

    • Pika e dytĂ« e rĂ«ndĂ«sishme: pasi ne nuk po pĂ«rdorim demonin Docker, por pĂ«rdorim demonin CRI-O, para nisjes dhe inicializimit Kubernetes duhet tĂ« bĂ«jmĂ« pĂ«rgatitjet pĂ«rkatĂ«se nĂ« skedarin e konfigurimit /var/lib/kubelet/config.yaml, duke krijuar mĂ« parĂ« katalogun e dĂ«shiruar:
      mkdir /var/lib/kubelet
      
      cat < /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Pika e tretĂ« e rĂ«ndĂ«sishme me tĂ« cilĂ«n pĂ«rballemi gjatĂ« instalimit: ndonĂ«se ne caktuam driverin e pĂ«rdorur cgroup, dhe konfigurimi i tij pĂ«rmes argumenteve tĂ« kaluara kubelet Ă«shtĂ« e vjetĂ«r (pĂ«r tĂ« cilĂ«n tregohet qartĂ« nĂ« dokumentacion), na nevojitet tĂ« shtojmĂ« argumentet nĂ« skedar, pĂ«rndryshe klusteri ynĂ« nuk inicializohet:
      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

    • Tani mund ta aktivizojmĂ« demonin kubelet:
      sudo systemctl enable --now kubelet
      

      Për të konfiguruar plani-kontrollues ose punëtori nodat në pak minuta, mund të shfrytëzoni këtë skenar.

  3. ËshtĂ« koha tĂ« inicializojmĂ« klasterin tonĂ«.
    • PĂ«r tĂ« inicializuar klasterin ekzekutoni komandĂ«n:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Sigurohuni qĂ« tĂ« shkruani komandĂ«n pĂ«r t'u bashkuar me klasterin «kubeadm join  » e cila ofrohet nĂ« fund tĂ« daljes, ose tĂ« paktĂ«n, tokenat e pĂ«rmendur.

    • Do tĂ« instalojmĂ« njĂ« plugin (CNI) pĂ«r tĂ« punuar me rrjetin e Pod-it. Ju rekomandoj tĂ« pĂ«rdorni Calico. Ndoshta mĂ« popullorja Flannel ka probleme me pĂ«rputhshmĂ«rinĂ« me nftables, gjithashtu Calico — Ă«shtĂ« realizimi i vetĂ«m CNI, i rekomanduar dhe plotĂ«sisht i testuar nga projekti Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • PĂ«r tĂ« lidhur nodĂ«n punĂ«tore me klasterin tonĂ«, duhet ta konfigurojmĂ« sipas pikave 1 dhe 2 tĂ« udhĂ«zimeve, ose tĂ« shfrytĂ«zojmĂ« skenar, pastaj tĂ« ekzekutoni komandĂ«n nga dalja «kubeadm init  », tĂ« cilĂ«n e shkruam nĂ« fazĂ«n e mĂ«parshme:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • TĂ« kontrollojmĂ« qĂ« klasteri ynĂ« Ă«shtĂ« inicializuar dhe ka filluar punĂ«n:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Gati! Tani mund të vendosni ngarkesën tuaj në klasterin tuaj K8s.

ÇfarĂ« na pret pĂ«rpara

Shpresoj që udhëzimi më sipër ju ndihmoi të kurseni pak kohë dhe nerva.
E ardhmja e proceseve nĂ« industri shpesh varet nga mĂ«nyra sesi ato priten nga shumica e pĂ«rdoruesve tĂ« zakonshĂ«m dhe zhvilluesve tĂ« softuerĂ«ve tĂ« tjerĂ« nĂ« nißen pĂ«rkatĂ«se. NdĂ«rsa nuk Ă«shtĂ« shumĂ« e qartĂ« nĂ« cilin pĂ«rfundim do tĂ« çojnĂ« iniciativat OCI pas disa vitesh, ne do tĂ« ndjekim me kĂ«naqĂ«si kĂ«tĂ«. Mund ta ndani mendimin tuaj tani nĂ« komentet.

Qëndroni lidhur!

Ky artikull u shfaq falë burimeve të mëposhtme:



Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster