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

Përshëndetje! Quhem Sergey, unë jam DevOps në Surf. Departamenti i DevOps në Surf ka si qëllim jo vetëm të ndihmojë në ndërveprimin mes specialistëve dhe integrimin e proceseve të punës, por gjithashtu të kryejë kërkime aktive dhe të zbatoj teknologjitë më të fundit si në infrastrukturën e tij ashtu edhe në infrastrukturën e klientëve.

Më poshtë do të flas pak për ndryshimet në stivin teknologjik për kontejnerët, me të cilët u takuam gjatë studimit të distribucionit. CentOS 8 dhe për atë që është CRI-O dhe si të konfigurojmë shpejt një mjedis ekzekutiv me ndihmën e tij. Kubernetes.

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

Pse Docker mungon në paketimin standard të CentOS 8

Pas instalimit të versioneve të fundit të mëdha, RHEL 8 ose CentOS 8 nuk mund të mos vëreni: në këto distribucione dhe në depot zyrtare mungon aplikacioni, Dockeri cili ideologjikisht dhe funksionalisht zëvendëson paketat Podman, Buildah (të pranishme në distribuirim si default) dhe CRI-O. Kjo është e lidhur me implementimin praktik të standardeve që po zhvillohen, ndër të tjera, nga kompanitë Red Hat në kuadër të projektit Open Container Initiative (OCI).

Qëllimi i OCI, i cili është pjesë e The Linux Foundation, është krijimi i standardeve të hapura industriale për format dhe mjediset ekzekutive të kontejnerëve, të cilat do të zgjidhnin disa probleme. Së pari, të mos përputhen me filozofinë e Linux (p.sh., në atë pjesë të saj që çdo program duhet të kryejë një veprim të vetëm, ndërsa Docker është një kombinim i gjithçkaje në një). Së dyti, të mundësonin eliminimin e të gjithë mangësive ekzistuese në softuer. DockerSë treti, të ishin plotësisht të përputhshme me kërkesat biznesore të paraqitura nga platformat kryesore komerciale për implementimin, menaxhimin dhe mirëmbajtjen e aplikacioneve të kontejnerizuara (p.sh., Red Hat OpenShift).

Disavantazhet Docker Dhe meritat e softuerit të ri janë përshkruar mjaft hollësisht në këtë artikull, dhe për një përshkrim të detajuar të gjithçkaje që ofrohet në kuadër të projektit OCI dhe veçoritë e tij arkitekturore, mund të konsultoheni me dokumentacionin zyrtar dhe artikujt nga Red Hat vetë (një artikull në blogun e Red Hat), si dhe në burime të palëve të treta. në shqyrtime.

ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se cilat funksionalitete kanĂ« komponentĂ«t e ofruar tĂ« stakut:

  • Podman — ndĂ«rveprimi direkt me kontejnerĂ«t dhe magazinat e imazheve pĂ«rmes procesit runC;
  • Buildah — ndĂ«rtimi dhe ngarkimi nĂ« regjistrin e imazheve;
  • CRI-O — mjedisi ekzekutiv pĂ«r sistemet e orkestrimit tĂ« kontejnerĂ«ve (p.sh., Kubernetes).

Mendoj se është e përshtatshme të jap një diagram të lidhjeve Kubernetes me runC dhe bibliotekave të nivelit 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 e mëdha Kubernetes dhe CRI-O përputhen), dhe kjo, duke marrë parasysh orientimin për testimin e plotë dhe të gjithanshëm të funksionimit të këtij staku nga zhvilluesit, na jep të drejtën të presim stabilitetin më të lartë të mundshëm në punë në çdo skenar përdorimi (dhe këtu ndihmon edhe peshorja_relative CRI-O në krahasim me Docker për shkak të kufizimit të fokusuar të funksionalitetit).

Gjatë instalimit Kubernetes Në mënyrën "e duhur" (sipas OCI, sigurisht) duke përdorur CRI-O në CentOS 8 u takuam me disa vështirësi të vogla, të cilat, megjithatë, i kaluam me sukses. Do të isha i lumtur të ndaj me ju një udhëzues për instalimin dhe konfigurimin, i cili në total do të marrë maksimumi 10 minuta.

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

Kushtet paraprake: të ketë të paktën një host (2 cores, 4 GB RAM, ruajtje të paktën 15 GB) me CentOS 8 (preferohet profili i instalimit "Server"), dhe gjithashtu një hyrje për të në DNS lokal (në rast ekstrem, mund të mjaftojë një hyrje në /etc/hosts). Dhe mos harroni të çaktivizoni swap..

Të gjitha operacionet në host bëhen me emrin e përdoruesit root, tregoni kujdes.

  1. Në hapin e parë do të konfiguroni OS, do të instaloni dhe konfiguroni varësitë paraprake për CRI-O.
    • Do tĂ« azhurnoni OS-nĂ«:
      dnf -y update
      

    • MĂ« pas ne duhet tĂ« konfiguroni firewall-in dhe SELinux. KĂ«tu ne jemi tĂ« varur nga ambienti nĂ« tĂ« cilin do tĂ« punojnĂ« hosti ose hostet tona. Ju mund tĂ« konfiguroni firewall-in sipas rekomandimeve nga dokumentacion, ose, nĂ«se jeni nĂ« njĂ« rrjet tĂ« besueshĂ«m ose pĂ«rdorni njĂ« firewall tĂ« palĂ«ve tĂ« treta, ndryshoni zonĂ«n e parazgjedhur nĂ« tĂ« besueshme ose ç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ë vendoset në modin "permissive":

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

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

    • pĂ«r aktivizimin e pĂ«rparimit tĂ« paketave dhe pĂ«rpunimin e saktĂ« tĂ« trafikut, do tĂ« bĂ«jmĂ« konfigurimet 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
      

      do të aplikojmë konfigurimet e bëra:

      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 i qĂ«ndrueshĂ«m Kubernetes momentalisht Ă«shtĂ« 1.18:
      export REQUIRED_VERSION=1.18
      

      do të shtojmë repositorët e nevojshëm:

      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
      

      Kujdes në detajin e parë që hasim gjatë instalimit: duhet të editoni konfigurimin CRI-O para se të aktivizoni shërbimin, pasi komponenti i kërkuar conmon 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 filloni demonin CRI-O:

      systemctl enable --now crio
      

      Mund të kontrolloni statusin e demonit:

      systemctl status crio
      

  2. Instalimi dhe aktivizimi Kubernetes.
    • Le tĂ« shtojmĂ« repositorin e nevojshĂ«m:
      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

    • Detaji i dytĂ« i rĂ«ndĂ«sishĂ«m: pasi ne nuk po pĂ«rdorim demon Docker, por po pĂ«rdorim demon CRI-O, para aktivizimit dhe inicializimit Kubernetes duhen bĂ«rĂ« konfigurimet pĂ«rkatĂ«se nĂ« dosjen e konfigurimit /var/lib/kubelet/config.yaml, duke krijuar mĂ« parĂ« katalogun e nevojshĂ«m:
      mkdir /var/lib/kubelet
      
      cat < /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Moment i tretĂ« i rĂ«ndĂ«sishĂ«m qĂ« hasim gjatĂ« instalimit: ndonĂ«se kemi specifikuar driver-in e pĂ«rdorur cgroup, dhe konfigurimi i tij pĂ«rmes argumenteve tĂ« dhĂ«na kubelet Ă«shtĂ« vjetĂ«ruar (siç Ă«shtĂ« e qartĂ« nĂ« dokumentacion), na nevojitet tĂ« shtojmĂ« argumentet nĂ« skedarin, nd otherwise cluster-i ynĂ« nuk do tĂ« 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 tĂ« aktivizoni demonin kubelet:
      sudo systemctl enable --now kubelet
      

      Për të konfiguruar control-plane ose worker nodat në disa minuta, mund të përdorni këtë skript.

  3. Koha për të inicializuar cluster-in tonë.
    • PĂ«r tĂ« inicializuar cluster-in, ekzekutoni komandĂ«n:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Sigurohuni të shkruani komandën për t'u bashkuar në cluster 'kubeadm join 
', të cilën sugjerohet ta përdorni në fund të daljes, ose nga të paktën, tokenat e përmendur.

    • Le tĂ« instalojmĂ« plugin-in (CNI) pĂ«r tĂ« punuar me rrjetin e Pod. Rekomandoj pĂ«rdorimin e Calico. Mund tĂ« ketĂ« njĂ« popullaritet mĂ« tĂ« madh Flannel ka probleme me pĂ«rputhshmĂ«rinĂ« me nftables, gjithashtu Calico — zbatimi i vetĂ«m 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 nodĂ«n punuese me cluster-in tonĂ«, duhet ta konfigurojmĂ« sipas pikave tĂ« udhĂ«zimit 1 dhe 2, ose tĂ« pĂ«rdorim skritp, pastaj ekzekutoni komandĂ«n nga dalja 'kubeadm init 
', tĂ« cilĂ«n e kemi shkruar nĂ« fazĂ«n e kaluar:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Le tĂ« kontrollojmĂ« nĂ«se cluster-i ynĂ« Ă«shtĂ« inicializuar dhe ka filluar tĂ« funksionojĂ«:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Gati! Tani mund të vendosni ngarkesën e nevojshme në cluster-in tuaj K8s.

ÇfarĂ« na pret pĂ«rpara

Shpresoj se ky udhëzim më sipër ka ndihmuar në kursimin e disa kohës dhe nervave tuaja.
Shprehja e proceseve që ndodhin në industri shpesh varet nga si i pranon shumica e përdoruesve përfundimtarë dhe zhvilluesve të softuerëve të tjerë në nisën përkatëse. Ende nuk është e qartë se ku do të përfundojnë iniciativat OCI pas disa viteve, por do të jetë kënaqësi të ndjekim këtë. Mund të ndani mendimin tuaj menjëherë në komentet.

Qëndroni të informuar!

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



Burimi: habr.com

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