CRI-O cum'è un sustitutu di Docker cum'è un ambiente di runtime per Kubernetes: setup in CentOS 8

Bonghjornu! Mi chjamu Sergey, sò DevOps à Surf. U dipartimentu DevOps in Surf ùn hà micca solu scopu di stabilisce l'interazzione trà i specialisti è integrà i prucessi di travagliu, ma ancu di ricerca attivamente è implementà e tecnulugia attuali sia in a so propria infrastruttura sia in l'infrastruttura di u cliente.

Quì sottu parleraghju un pocu di i cambiamenti in a pila di tecnulugia per i cuntenituri chì avemu scontru mentre studiava a distribuzione. CentOS 8 è circa ciò chì hè CRI-O è cumu stabilisce rapidamente un ambiente eseguibile per Kubernetes.

CRI-O cum'è un sustitutu di Docker cum'è un ambiente di runtime per Kubernetes: setup in CentOS 8

Perchè Docker ùn hè micca inclusu in CentOS 8?

Dopu avè installatu l'ultime versioni maiò rilu 8 o CentOS 8 ùn si pò fà di nutà : sti distribuzioni è i repositori ufficiali ùn cuntenenu micca l'applicazione Docker, chì sustituisce ideologicamente è funziunale i pacchetti podman, Custruì (presente in a distribuzione per difettu) è CRI-O. Questu hè duvuta à l'implementazione pratica di i normi sviluppati, frà altri cose, da Red Hat in parte di u prughjettu Open Container Initiative (OCI).

L'obiettivu di l'OCI, chì face parte di a Fundazione Linux, hè di creà standard di l'industria aperti per formati di cuntenituri è runtimes chì risolve parechji prublemi à una volta. Prima, ùn anu micca cuntraditu a filusufìa di Linux (per esempiu, in a parte chì ogni prugramma duverebbe fà una azione, è Docker hè una spezia di combinazione all-in-one). Siconda, puderanu eliminà tutte e carenze esistenti in u software Docker. In terzu, seranu cumplettamente cumpatibili cù i bisogni di l'affari stabiliti da e piattaforme cummirciali principali per implementà, gestisce è serve applicazioni containerizzate (per esempiu, Red Hat OpenShift).

shortcomings Docker è i vantaghji di u novu software sò digià stati descritti in qualchì dettagliu in stu articulu, è una descrizzione dettagliata di tutta a pila di software offerta in u prughjettu OCI è e so caratteristiche architettoniche ponu esse truvate in a documentazione ufficiale è l'articuli di Red Hat stessu (micca male. un articulu in u blog Red Hat) è in terzu recensioni.

Hè impurtante di nutà chì funziunalità sò i cumpunenti di a pila pruposta:

  • podman - interazione diretta cù i cuntenituri è u almacenamentu di l'imaghjini attraversu u prucessu runC;
  • Custruì - assemblea è carica di l'imaghjini à u registru;
  • CRI-O - un ambiente eseguibile per i sistemi di orchestrazione di cuntainer (per esempiu, Kubernetes).

Pensu chì per capisce u schema generale di l'interazzione trà i cumpunenti di a pila, hè cunsigliatu di furnisce un diagramma di cunnessione quì. Kubernetes c corre C è biblioteche di livellu bassu utilizendu CRI-O:

CRI-O cum'è un sustitutu di Docker cum'è un ambiente di runtime per Kubernetes: setup in CentOS 8

CRI-O и Kubernetes aderisce à u stessu ciculu di liberazione è supportu (a matrice di cumpatibilità hè assai simplice: versioni maiò Kubernetes и CRI-O coincide), è questu, tenendu in contu l'enfasi di a prova cumpleta è cumpleta di u funziunamentu di sta pila da i sviluppatori, ci dà u dirittu di aspittà a stabilità massima ottenibile in operazione in ogni scenariu d'usu (a ligerezza relativa hè ancu benefica quì. CRI-O paragunatu à Docker a causa di una limitazione intenzionale di funziunalità).

Quandu stallate Kubernetes "modu ghjustu" modu (sicondu l'OCI, sicuru) utilizendu CRI-O nantu CentOS 8 Avemu scontru alcune difficultà minori, chì, però, avemu superatu cù successu. Seraghju felice di sparte cun voi l'istruzzioni di installazione è di cunfigurazione, chì in totale duranu circa 10 minuti.

Cumu implementà Kubernetes in CentOS 8 utilizendu u framework CRI-O

Prerequisiti: presenza di almenu un host (2 core, 4 GB RAM, almenu 15 GB almacenamiento) cù installatu CentOS 8 (U prufilu d'installazione "Server" hè cunsigliatu), è ancu entrate per ellu in u DNS locale (cum'è l'ultimu risorsu, pudete fà cun una entrata in /etc/hosts). È ùn vi scurdate disattivà u scambiu.

Facemu tutte l'operazioni nantu à l'ospitu cum'è l'utilizatore root, attentu.

  1. In u primu passu, cunfiguremu u SO, installate è cunfigurà dipendenze preliminari per CRI-O.
    • Aggiornemu l'OS:
      dnf -y update
      

    • Dopu avete bisognu di cunfigurà u firewall è SELinux. Quì tuttu dipende di l'ambienti in quale u nostru ospite o l'ospiti travaglià. Pudete sia stallà un firewall secondu i cunsiglii da ducumentazione, o, sè site in una reta di fiducia o utilizate un firewall di terzu, cambiate a zona predeterminata in fiducia o disattivate u firewall:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Per disattivà u firewall, pudete aduprà u cumandimu seguente:

      systemctl disable --now firewalld
      

      SELinux deve esse disattivatu o cambiatu à u modu "permissivu":

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

    • Caricate i moduli è i pacchetti di kernel necessarii, cunfigurate a carica automatica di u modulu "br_netfilter" à l'iniziu di u sistema:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Per attivà l'invio di pacchetti è u trattamentu currettu di u trafficu, faremu i paràmetri adatti:
      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
      

      applicà i paràmetri fatti:

      sysctl --system

    • stabilisce a versione necessaria CRI-O (versione maiò CRI-O, cum'è digià dettu, currisponde à a versione necessaria Kubernetes), dapoi l'ultima versione stabile Kubernetes attualmente 1.18:
      export REQUIRED_VERSION=1.18
      

      aghjunghje i repositori necessarii:

      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

    • avà pudemu stallà CRI-O:
      dnf -y install cri-o
      

      Prestate attenzione à a prima sfumatura chì avemu scontru durante u prucessu di stallazione: avete bisognu di edità a cunfigurazione CRI-O prima di inizià u serviziu, postu chì u cumpunente cumunu necessariu hà un locu sfarente da quellu specificatu:

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

      Avà pudete attivà è inizià u daemon CRI-O:

      systemctl enable --now crio
      

      Pudete cuntrollà u statu di daemon:

      systemctl status crio
      

  2. Installazione è attivazione Kubernetes.
    • Aghjunghjemu u repositoriu necessariu:
      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
      

      Avà pudemu stallà Kubernetes (versione 1.18, cum'è citatu sopra):

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

    • A seconda sfumatura impurtante: postu chì ùn avemu micca usatu un daemon Docker, ma avemu aduprà u demone CRI-O, prima di u lanciu è l'inizializazione Kubernetes avete bisognu di fà i paràmetri adatti in u schedariu di cunfigurazione /var/lib/kubelet/config.yaml, avè prima creatu u cartulare desideratu:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • U terzu puntu impurtante chì avemu scontru durante a stallazione: malgradu u fattu chì avemu indicatu u driver utilizatu cgroup, è a so cunfigurazione attraversu l'argumenti passati kubelet hè obsoleto (cum'è esplicitamente dichjaratu in a ducumentazione), avemu bisognu di aghjunghje argumenti à u schedariu, altrimenti u nostru cluster ùn hà micca inizializatu:
      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

    • Avà pudemu attivà u daemon kubelet:
      sudo systemctl enable --now kubelet
      

      Per persunalizà pianu di cuntrollu o travagliadori nodes in minuti, pudete aduprà cù stu script.

  3. Hè ora di inizializà u nostru cluster.
    • Per inizializà u cluster, eseguite u cumandimu:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Assicuratevi di scrive u cumandamentu per unisce à u cluster "kubeadm join ...", chì vi hè dumandatu à aduprà à a fine di l'output, o almenu i tokens specificati.

    • Installemu u plugin (CNI) per a reta Pod. Vi cunsigliu d'utilizà Calico. Possibile più populari Flannel hà prublemi di cumpatibilità cù nftables, iè è Calico - l'unica implementazione CNI cunsigliata è cumpletamente pruvata da u prugettu Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Per cunnette un nodu di u travagliu à u nostru cluster, avete bisognu di cunfigurà secondu l'istruzzioni 1 è 2, o l'utilizanu script, poi eseguite u cumandamentu da a pruduzzioni "kubeadm init..." chì avemu scrittu in u passu precedente:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Cuntrollamu chì u nostru cluster hè inizializatu è hà cuminciatu à travaglià:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Pronti ! Pudete digià ospitare carichi utili nantu à u vostru cluster K8s.

Ciò chì ci aspetta avanti

Spergu chì l'istruzzioni sopra anu aiutatu à salvà un pocu di tempu è nervi.
U risultatu di i prucessi chì si trovanu in l'industria spessu depende di cumu sò accettati da a maiò parte di l'utilizatori finali è di i sviluppatori di altre software in u nichu currispondente. Ùn hè ancu chjaramente chjaru ciò chì l'iniziativi di l'OCI portanu in qualchì annu, ma fighjeremu cun piacè. Pudete sparte a vostra opinione avà in i cumenti.

Resta attenti!

Questu articulu hè apparsu grazia à e seguenti fonti:



Source: www.habr.com

Add a comment