CRI-O ako náhrada za Docker ako spustiteľné prostredie pre Kubernetes: nastavenie na CentOS 8

Ahoj! Moje meno je Sergey, som DevOps v Surf. Cieľom oddelenia DevOps v Surf je nielen nadviazať interakciu medzi špecialistami a integrovať pracovné procesy, ale aj aktívne skúmať a implementovať súčasné technológie vo vlastnej infraštruktúre aj v infraštruktúre zákazníka.

Nižšie porozprávam trochu o zmenách v zásobníku technológií pre kontajnery, s ktorými sme sa stretli pri štúdiu distribúcie 8 CentOS a o čom to je CRI-O a ako rýchlo nastaviť spustiteľné prostredie pre Kubernetes.

CRI-O ako náhrada za Docker ako spustiteľné prostredie pre Kubernetes: nastavenie na CentOS 8

Prečo nie je Docker súčasťou CentOS 8?

Po inštalácii najnovších hlavných vydaní RHEL 8 alebo 8 CentOS nemožno si nevšimnúť: tieto distribúcie a oficiálne úložiská neobsahujú aplikáciu prístavný robotník, ktoré ideovo a funkčne nahrádzajú balíčky podmaní, Buildah (v distribúcii sa štandardne nachádza) a CRI-O. Je to spôsobené praktickou implementáciou štandardov vyvinutých okrem iného spoločnosťou Red Hat v rámci projektu Open Container Initiative (OCI).

Cieľom OCI, ktorý je súčasťou The Linux Foundation, je vytvoriť otvorené priemyselné štandardy pre formáty kontajnerov a runtime, ktoré riešia niekoľko problémov naraz. Po prvé, neboli v rozpore s filozofiou Linuxu (napríklad v časti, že každý program by mal vykonávať jednu akciu a prístavný robotník je akýmsi kombajnom typu všetko v jednom). Po druhé, mohli by odstrániť všetky existujúce nedostatky v softvéri prístavný robotník. Po tretie, boli by plne kompatibilné s obchodnými požiadavkami popredných komerčných platforiem na nasadenie, správu a obsluhu kontajnerových aplikácií (napríklad Red Hat OpenShift).

Obmedzenie prístavný robotník a výhody nového softvéru už boli dosť podrobne opísané v v tomto článkua podrobný popis celého softvérového zásobníka ponúkaného v rámci projektu OCI a jeho architektonických prvkov nájdete v oficiálnej dokumentácii a článkoch samotného Red Hatu (nie je to zlé článok v blogu Red Hat) a v tretej strane recenzie.

Je dôležité poznamenať, aké funkcie majú komponenty navrhovaného zásobníka:

  • podmaní — priama interakcia s kontajnermi a ukladanie obrázkov prostredníctvom procesu runC;
  • Buildah — zostavovanie a nahrávanie obrázkov do registra;
  • CRI-O — spustiteľné prostredie pre systémy na orchestráciu kontajnerov (napríklad Kubernetes).

Myslím si, že na pochopenie všeobecnej schémy interakcie medzi komponentmi zásobníka je vhodné poskytnúť tu schému zapojenia Kubernetes c runC a nízkoúrovňové knižnice používajúce CRI-O:

CRI-O ako náhrada za Docker ako spustiteľné prostredie pre Kubernetes: nastavenie na CentOS 8

CRI-O и Kubernetes dodržiavať rovnaký cyklus vydávania a podpory (matica kompatibility je veľmi jednoduchá: hlavné verzie Kubernetes и CRI-O sa zhodujú), a to, berúc do úvahy zameranie sa na úplné a komplexné testovanie prevádzky tohto zásobníka vývojármi, nám dáva právo očakávať maximálnu dosiahnuteľnú stabilitu v prevádzke pri akýchkoľvek scenároch použitia (relatívna ľahkosť je tu tiež prospešná CRI-O v porovnaní s prístavný robotník z dôvodu účelového obmedzenia funkčnosti).

Pri inštalácii Kubernetes „správnym spôsobom“ (samozrejme podľa OCI) pomocou CRI-O na 8 CentOS Narazili sme na menšie ťažkosti, ktoré sme však úspešne zvládli. Rád sa s vami podelím o návod na inštaláciu a konfiguráciu, čo celkovo zaberie asi 10 minút.

Ako nasadiť Kubernetes na CentOS 8 pomocou rámca CRI-O

Predpoklady: prítomnosť aspoň jedného hostiteľa (2 jadrá, 4 GB RAM, aspoň 15 GB úložisko) s nainštalovaným 8 CentOS (odporúča sa inštalačný profil „Server“), ako aj jeho záznamy v lokálnom DNS (ako posledná možnosť si vystačíte so záznamom v /etc/hosts). A nezabudni zakázať výmenu.

Všetky operácie vykonávame na hostiteľovi ako užívateľ root, buďte opatrní.

  1. V prvom kroku nakonfigurujeme OS, nainštalujeme a nakonfigurujeme predbežné závislosti pre CRI-O.
    • Poďme aktualizovať OS:
      dnf -y update
      

    • Ďalej musíte nakonfigurovať firewall a SELinux. Tu všetko závisí od prostredia, v ktorom bude náš hostiteľ alebo hostitelia pracovať. Firewall môžete nastaviť buď podľa odporúčaní z dokumentáciualebo ak ste v dôveryhodnej sieti alebo používate bránu firewall tretej strany, zmeňte predvolenú zónu na dôveryhodnú alebo bránu firewall vypnite:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Na vypnutie brány firewall môžete použiť nasledujúci príkaz:

      systemctl disable --now firewalld
      

      SELinux je potrebné vypnúť alebo prepnúť do „povoleného“ režimu:

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

    • Načítajte potrebné moduly jadra a balíky, nakonfigurujte automatické načítanie modulu „br_netfilter“ pri štarte systému:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Aby sme aktivovali presmerovanie paketov a správne spracovanie prevádzky, vykonáme príslušné nastavenia:
      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
      

      použiť vykonané nastavenia:

      sysctl --system

    • nastavte požadovanú verziu CRI-O (hlavná verzia CRI-O, ako už bolo spomenuté, zodpovedajú požadovanej verzii Kubernetes), od najnovšej stabilnej verzie Kubernetes momentálne 1.18:
      export REQUIRED_VERSION=1.18
      

      pridajte potrebné úložiská:

      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

    • teraz môžeme nainštalovať CRI-O:
      dnf -y install cri-o
      

      Venujte pozornosť prvej nuancii, s ktorou sa stretneme počas procesu inštalácie: musíte upraviť konfiguráciu CRI-O pred spustením služby, pretože požadovaný bežný komponent má iné umiestnenie, než je zadané:

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

      Teraz môžete aktivovať a spustiť démona CRI-O:

      systemctl enable --now crio
      

      Stav démona môžete skontrolovať:

      systemctl status crio
      

  2. Inštalácia a aktivácia Kubernetes.
    • Pridajme požadované úložisko:
      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
      

      Teraz môžeme nainštalovať Kubernetes (verzia 1.18, ako je uvedené vyššie):

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

    • Druhá dôležitá nuansa: keďže nepoužívame démona prístavný robotník, ale používame démona CRI-O, pred spustením a inicializáciou Kubernetes musíte vykonať príslušné nastavenia v konfiguračnom súbore /var/lib/kubelet/config.yaml po vytvorení požadovaného adresára:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Tretí dôležitý bod, s ktorým sa stretávame pri inštalácii: napriek tomu, že sme uviedli použitý ovládač cgroupa jeho konfiguráciu prostredníctvom odovzdaných argumentov kocka je zastaraný (ako je výslovne uvedené v dokumentácii), musíme do súboru pridať argumenty, inak nebude náš klaster inicializovaný:
      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

    • Teraz môžeme aktivovať démona kocka:
      sudo systemctl enable --now kubelet
      

      Prispôsobiť kontrolná rovina alebo robotník uzly za pár minút, môžete použiť s týmto skriptom.

  3. Je čas inicializovať náš klaster.
    • Ak chcete inicializovať klaster, spustite príkaz:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Nezabudnite si zapísať príkaz na pripojenie ku klastru „kubeadm join…“, ktorý sa od vás požaduje použiť na konci výstupu, alebo aspoň zadané tokeny.

    • Nainštalujeme plugin (CNI) pre sieť Pod. Odporúčam používať kaliko. Možno viac populárne flanel má problémy s kompatibilitou nftables, áno a áno kaliko - jediná implementácia CNI odporúčaná a plne otestovaná projektom Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Ak chcete pripojiť pracovný uzol k nášmu klastru, musíte ho nakonfigurovať podľa pokynov 1 a 2 alebo použiť skript, potom spustite príkaz z výstupu „kubeadm init...“, ktorý sme si zapísali v predchádzajúcom kroku:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Skontrolujeme, či je náš klaster inicializovaný a začal pracovať:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Pripravený! Už môžete hostiť užitočné zaťaženia na svojom klastri K8s.

Čo nás čaká ďalej

Dúfam, že vám vyššie uvedené pokyny pomohli ušetriť čas a nervy.
Výsledok procesov vyskytujúcich sa v tomto odvetví často závisí od toho, ako ich akceptuje väčšina koncových používateľov a vývojári iného softvéru v príslušnom výklenku. Zatiaľ nie je celkom jasné, k čomu povedú iniciatívy OCI o pár rokov, no budeme s radosťou sledovať. O svoj názor sa môžete podeliť už teraz v komentároch.

Zostaňte naladení!

Tento článok sa objavil vďaka nasledujúcim zdrojom:



Zdroj: hab.com

Pridať komentár