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

Përshëndetje! Emri im është Sergey, unë jam DevOps në Surf. Departamenti i DevOps në Surf synon jo vetëm të krijojë ndërveprim midis specialistëve dhe të integrojë proceset e punës, por edhe të hulumtojë dhe zbatojë në mënyrë aktive teknologjitë aktuale si në infrastrukturën e tij ashtu edhe në infrastrukturën e klientit.

Më poshtë do të flas pak për ndryshimet në pirgun e teknologjisë për kontejnerët që kemi hasur gjatë studimit të shpërndarjes CentOS 8 dhe për atë që është CRI-O dhe si të konfiguroni shpejt një mjedis të ekzekutueshëm për Kubernetes.

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

Pse Docker nuk përfshihet në CentOS 8?

Pas instalimit të versioneve kryesore më të fundit REL 8 ose CentOS 8 nuk mund të mos vihet re: këto shpërndarje dhe depo zyrtare nuk e përmbajnë aplikacionin prerës, të cilat ideologjikisht dhe funksionalisht zëvendësojnë paketat podman, Buildah (i pranishëm në shpërndarje si parazgjedhje) dhe CRI-O. Kjo është për shkak të zbatimit praktik të standardeve të zhvilluara, ndër të tjera, nga Red Hat si pjesë e projektit Open Container Initiative (OCI).

Qëllimi i OCI, i cili është pjesë e The Linux Foundation, është të krijojë standarde të hapura të industrisë për formatet e kontejnerëve dhe kohëzgjatjet që zgjidhin disa probleme në të njëjtën kohë. Së pari, ato nuk kundërshtuan filozofinë e Linux (për shembull, në pjesën që çdo program duhet të kryejë një veprim, dhe prerës është një lloj kombinimi të gjitha-në-një). Së dyti, ata mund të eliminojnë të gjitha mangësitë ekzistuese në softuer prerës. Së treti, ato do të ishin plotësisht në përputhje me kërkesat e biznesit të platformave kryesore tregtare për vendosjen, menaxhimin dhe shërbimin e aplikacioneve të kontejnerizuara (për shembull, Red Hat OpenShift).

Kufizimet prerës dhe avantazhet e softuerit të ri janë përshkruar tashmë në disa detaje në Ky artikull, dhe një përshkrim i detajuar i të gjithë grumbullit të softuerit të ofruar në kuadër të projektit OCI dhe veçorive të tij arkitekturore mund të gjenden në dokumentacionin zyrtar dhe artikujt nga vetë Red Hat (jo keq artikull në blogun e Red Hat) dhe në palë të treta komente.

Është e rëndësishme të theksohet se çfarë funksionaliteti kanë komponentët e pirgut të propozuar:

  • podman — ndërveprimi i drejtpërdrejtë me kontejnerët dhe ruajtja e imazheve përmes procesit runC;
  • Buildah — montimi dhe ngarkimi i imazheve në regjistër;
  • CRI-O — një mjedis i ekzekutueshëm për sistemet e orkestrimit të kontejnerëve (për shembull, Kubernetes).

Unë mendoj se për të kuptuar skemën e përgjithshme të ndërveprimit midis përbërësve të pirgut, këshillohet të jepni një diagram lidhjeje këtu Kubernetes c drejtuarC dhe bibliotekat e nivelit të ulët duke përdorur CRI-O:

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

CRI-O и Kubernetes respektoni të njëjtin cikël lëshimi dhe mbështetjeje (matrica e përputhshmërisë është shumë e thjeshtë: versionet kryesore Kubernetes и CRI-O përkojnë), dhe kjo, duke marrë parasysh fokusin në testimin e plotë dhe gjithëpërfshirës të funksionimit të kësaj rafte nga zhvilluesit, na jep të drejtën të presim stabilitetin maksimal të arritshëm në funksionim në çdo skenar përdorimi (lehtësia relative është gjithashtu e dobishme këtu CRI-O krahasuar me prerës për shkak të kufizimit të qëllimshëm të funksionalitetit).

Kur instaloni Kubernetes Mënyra "e drejtë" (sipas OCI, natyrisht) duke përdorur CRI-O mbi CentOS 8 Kemi hasur në disa vështirësi të vogla, të cilat, megjithatë, i kapërcejmë me sukses. Do të jem i lumtur të ndaj me ju udhëzimet e instalimit dhe konfigurimit, të cilat në total do të zgjasin rreth 10 minuta.

Si të vendosni Kubernetes në CentOS 8 duke përdorur kornizën CRI-O

Parakushtet: prania e të paktën një hosti (2 bërthama, 4 GB RAM, të paktën 15 GB memorie) me të instaluar CentOS 8 (Rekomandohet profili i instalimit "Server"), si dhe hyrjet për të në DNS-në lokale (si mjeti i fundit, mund t'ia dilni me një hyrje në /etc/hosts). Dhe mos harroni çaktivizoni shkëmbimin.

Ne kryejmë të gjitha operacionet në host si përdorues rrënjë, kini kujdes.

  1. Në hapin e parë, ne do të konfigurojmë OS, do të instalojmë dhe konfigurojmë varësitë paraprake për CRI-O.
    • Le të përditësojmë OS:
      dnf -y update
      

    • Më pas ju duhet të konfiguroni murin e zjarrit dhe SELinux. Këtu gjithçka varet nga mjedisi në të cilin hosti ose hostet tanë do të punojnë. Ju ose mund të konfiguroni një mur zjarri sipas rekomandimeve nga dokumentacionin, ose, nëse jeni në një rrjet të besuar ose përdorni një mur zjarri të palës së tretë, ndryshoni zonën e paracaktuar në të besuar ose çaktivizoni murin e zjarrit:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Për të fikur murin e zjarrit, mund të përdorni komandën e mëposhtme:

      systemctl disable --now firewalld
      

      SELinux duhet të fiket ose të kalojë në modalitetin "lejues":

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

    • Ngarkoni modulet dhe paketat e nevojshme të kernelit, konfiguroni ngarkimin automatik të modulit "br_netfilter" në fillimin e 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ërcjelljen e paketave dhe përpunimin korrekt të trafikut, ne do të bëjmë cilësimet e duhura:
      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
      

      aplikoni cilësimet e bëra:

      sysctl --system

    • vendosni versionin e kërkuar CRI-O (versioni kryesor CRI-O, siç është përmendur tashmë, përputhen me versionin e kërkuar Kubernetes), që nga versioni më i fundit i qëndrueshëm Kubernetes aktualisht 1.18:
      export REQUIRED_VERSION=1.18
      

      shtoni magazinat 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 ta instalojmë CRI-O:
      dnf -y install cri-o
      

      Kushtojini vëmendje nuancës së parë që hasim gjatë procesit të instalimit: duhet të modifikoni konfigurimin CRI-O para fillimit të shërbimit, pasi komponenti i kërkuar i përbashkët ka një vendndodhje të ndryshme nga ajo e specifikuar:

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

      Tani mund të aktivizoni dhe të filloni demonin CRI-O:

      systemctl enable --now crio
      

      Ju mund të kontrolloni statusin e demonit:

      systemctl status crio
      

  2. Instalimi dhe aktivizimi Kubernetes.
    • Le të shtojmë depon e kërkuar:
      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
      

      Tani mund të instalojmë Kubernetes (versioni 1.18, siç u përmend më lart):

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

    • Nuanca e dytë e rëndësishme: pasi ne nuk përdorim një demon prerës, por ne përdorim demonin CRI-O, përpara nisjes dhe inicializimit Kubernetes duhet të bëni cilësimet e duhura në skedarin e konfigurimit /var/lib/kubelet/config.yaml, duke krijuar fillimisht drejtorinë e dëshiruar:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Pika e tretë e rëndësishme që hasim gjatë instalimit: pavarësisht se kemi treguar drejtuesin e përdorur cgrup, dhe konfigurimin e tij përmes argumenteve të kaluar kubelet është i vjetëruar (siç thuhet shprehimisht në dokumentacion), ne duhet të shtojmë argumente në skedar, përndryshe grupi ynë nuk do të inicializohet:
      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

    • Tani mund të aktivizojmë demonin kubelet:
      sudo systemctl enable --now kubelet
      

      Për të personalizuar aeroplan kontrolli ose punëtor nyjet në minuta, mund t'i përdorni me këtë skenar.

  3. Është koha për të inicializuar grupin tonë.
    • Për të inicializuar grupin, 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 grupin "kubeadm join ...", të cilin ju kërkohet ta përdorni në fund të daljes, ose të paktën shenjat e specifikuara.

    • Le të instalojmë shtojcën (CNI) për rrjetin Pod. Unë rekomandoj përdorimin prej basme. Ndoshta më popullor fanellë ka probleme me përputhshmërinë me nftables, po dhe prej basme - i vetmi zbatim i CNI i rekomanduar dhe i testuar plotësisht nga projekti Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Për të lidhur një nyje punëtore me grupin tonë, duhet ta konfiguroni atë sipas udhëzimeve 1 dhe 2, ose përdorni skenar, më pas ekzekutoni komandën nga dalja "kubeadm init..." që kemi shkruar në hapin e mëparshëm:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Le të kontrollojmë që grupi ynë është inicializuar dhe ka filluar të funksionojë:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Gati! Ju tashmë mund të strehoni ngarkesa në grupin tuaj K8.

Çfarë na pret përpara

Shpresoj se udhëzimet e mësipërme ju kanë ndihmuar të kurseni pak kohë dhe nerva.
Rezultati i proceseve që ndodhin në industri shpesh varet nga mënyra se si ato pranohen nga pjesa më e madhe e përdoruesve fundorë dhe zhvilluesve të softuerëve të tjerë në kamaren përkatëse. Nuk është ende plotësisht e qartë se çfarë do të çojnë iniciativat e OCI pas disa vitesh, por ne do ta shikojmë me kënaqësi. Ju mund të ndani mendimin tuaj tani në komente.

Qëndroni të akorduar!

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



Burimi: www.habr.com

Shto një koment