CRI-O jako náhrada za Docker jako běhové prostředí pro Kubernetes: nastavení na CentOS 8

Ahoj! Jmenuji se Sergey a jsem DevOps ve společnosti Surf. Oddělení DevOps ve společnosti Surf si klade za cíl nejen navázat interakci mezi specialisty a integrovat pracovní procesy, ale také aktivně zkoumat a implementovat současné technologie jak ve vlastní infrastruktuře, tak v infrastruktuře zákazníka.

Níže budu mluvit trochu o změnách v technologickém zásobníku pro kontejnery, se kterými jsme se setkali při studiu distribuce CentOS 8 a o tom, co je vytvořit to a jak rychle nastavit spustitelné prostředí pro Kubernetes.

CRI-O jako náhrada za Docker jako běhové prostředí pro Kubernetes: nastavení na CentOS 8

Proč není Docker součástí CentOS 8?

Po instalaci nejnovějších hlavních verzí RHEL 8 nebo CentOS 8 nelze si nevšimnout: tyto distribuce a oficiální úložiště neobsahují aplikaci přístavní dělník, které ideově a funkčně nahrazují balíčky Podman, Buildah (ve výchozím nastavení přítomno v distribuci) a vytvořit to. Je to dáno praktickou implementací standardů vyvinutých mimo jiné společností Red Hat v rámci projektu Open Container Initiative (OCI).

Cílem OCI, která je součástí The Linux Foundation, je vytvořit otevřené průmyslové standardy pro formáty kontejnerů a runtime, které řeší několik problémů najednou. Za prvé, nebyly v rozporu s filozofií Linuxu (například v části, že každý program by měl provádět jednu akci, a přístavní dělník je druh all-in-one kombajnu). Za druhé, mohli odstranit všechny existující nedostatky v softwaru přístavní dělník. Za třetí, budou plně kompatibilní s obchodními požadavky předních komerčních platforem pro zavádění, správu a obsluhu kontejnerových aplikací (například Red Hat OpenShift).

Omezení přístavní dělník a výhody nového softwaru již byly podrobně popsány v tento článek, a podrobný popis celého softwarového stacku nabízeného v rámci projektu OCI a jeho architektonických prvků najdete v oficiální dokumentaci a článcích samotného Red Hatu (není špatný článek na blogu Red Hat) a na třetí straně recenze.

Je důležité si uvědomit, jakou funkcionalitu mají součásti navrhovaného zásobníku:

  • Podman — přímá interakce s kontejnery a ukládáním obrázků prostřednictvím procesu runC;
  • Buildah — sestavení a nahrání obrázků do registru;
  • vytvořit to — spustitelné prostředí pro systémy orchestrace kontejnerů (například Kubernetes).

Myslím, že pro pochopení obecného schématu interakce mezi komponentami zásobníku je vhodné poskytnout zde schéma zapojení Kubernetes c runC a nízkoúrovňové knihovny používající vytvořit to:

CRI-O jako náhrada za Docker jako běhové prostředí pro Kubernetes: nastavení na CentOS 8

vytvořit to и Kubernetes dodržovat stejný cyklus vydávání a podpory (matice kompatibility je velmi jednoduchá: hlavní verze Kubernetes и vytvořit to shodují se), a to, s přihlédnutím k zaměření na kompletní a komplexní testování provozu tohoto stacku vývojáři, nám dává právo očekávat maximální dosažitelnou stabilitu v provozu za jakýchkoliv scénářů použití (relativní lehkost je výhodná i zde vytvořit to ve srovnání s přístavní dělník z důvodu účelového omezení funkčnosti).

Při instalaci Kubernetes "správným způsobem" způsobem (podle OCI, samozřejmě) pomocí vytvořit to na CentOS 8 Narazili jsme na drobné potíže, které jsme však úspěšně překonali. Rád se s vámi podělím o návod na instalaci a konfiguraci, což celkem zabere asi 10 minut.

Jak nasadit Kubernetes na CentOS 8 pomocí frameworku CRI-O

Předpoklady: přítomnost alespoň jednoho hostitele (2 jádra, 4 GB RAM, alespoň 15 GB úložiště) s nainstalovaným CentOS 8 (doporučuje se instalační profil „Server“) a také jeho záznamy v místním DNS (jako poslední možnost si vystačíte se záznamem v /etc/hosts). A nezapomeň zakázat swap.

Veškeré operace provádíme na hostiteli jako uživatel root, buďte opatrní.

  1. V prvním kroku nakonfigurujeme OS, nainstalujeme a nakonfigurujeme předběžné závislosti pro CRI-O.
    • Pojďme aktualizovat OS:
      dnf -y update
      

    • Dále musíte nakonfigurovat firewall a SELinux. Zde vše závisí na prostředí, ve kterém bude náš hostitel nebo hostitelé pracovat. Firewall si můžete buď nastavit podle doporučení z dokumentacenebo, pokud jste v důvěryhodné síti nebo používáte bránu firewall třetí strany, změňte výchozí zónu na důvěryhodnou nebo bránu firewall vypněte:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      K vypnutí brány firewall můžete použít následující příkaz:

      systemctl disable --now firewalld
      

      SELinux je třeba vypnout nebo přepnout do „povolovacího“ režimu:

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

    • Načtěte potřebné moduly jádra a balíčky, nakonfigurujte automatické načítání modulu „br_netfilter“ při startu systému:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Abychom aktivovali předávání paketů a správné zpracování provozu, provedeme příslušná nastavení:
      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žít provedená nastavení:

      sysctl --system

    • nastavte požadovanou verzi vytvořit to (hlavní verze vytvořit to, jak již bylo zmíněno, odpovídat požadované verzi Kubernetes), od nejnovější stabilní verze Kubernetes aktuálně 1.18:
      export REQUIRED_VERSION=1.18
      

      přidejte potřebná úložiště:

      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

    • nyní můžeme nainstalovat vytvořit to:
      dnf -y install cri-o
      

      Věnujte pozornost první nuanci, se kterou se setkáme během procesu instalace: musíte upravit konfiguraci vytvořit to před spuštěním služby, protože požadovaná běžná komponenta má jiné umístění, než je zadané:

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

      Nyní můžete aktivovat a spustit démona vytvořit to:

      systemctl enable --now crio
      

      Stav démona můžete zkontrolovat:

      systemctl status crio
      

  2. Instalace a aktivace Kubernetes.
    • Přidáme požadované úložiště:
      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
      

      Nyní můžeme nainstalovat Kubernetes (verze 1.18, jak je uvedeno výše):

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

    • Druhá důležitá nuance: protože nepoužíváme démona přístavní dělník, ale používáme démona vytvořit to, před spuštěním a inicializací Kubernetes musíte provést příslušná nastavení v konfiguračním souboru /var/lib/kubelet/config.yaml po vytvoření požadovaného adresáře:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Třetí důležitý bod, na který narazíme při instalaci: přesto, že jsme uvedli použitý ovladač cgroupa jeho konfiguraci prostřednictvím předávaných argumentů kubelet je zastaralý (jak je výslovně uvedeno v dokumentaci), musíme do souboru přidat argumenty, jinak nebude náš cluster inicializován:
      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

    • Nyní můžeme aktivovat démona kubelet:
      sudo systemctl enable --now kubelet
      

      K přizpůsobení řídicí rovina nebo pracovník uzly během několika minut, můžete použít s tímto skriptem.

  3. Je čas inicializovat náš cluster.
    • Chcete-li inicializovat cluster, spusťte příkaz:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Nezapomeňte si zapsat příkaz pro připojení ke clusteru „kubeadm join…“, o jehož použití budete požádáni na konci výstupu, nebo alespoň zadané tokeny.

    • Nainstalujme plugin (CNI) pro síť Pod. Doporučuji používat Kaliko. Možná populárnější Flanel má problémy s kompatibilitou nftables, a Kaliko - jediná implementace CNI doporučená a plně otestovaná projektem Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Chcete-li připojit pracovní uzel k našemu clusteru, musíte jej nakonfigurovat podle pokynů 1 a 2 nebo použít skripta poté spusťte příkaz z výstupu „kubeadm init...“, který jsme si zapsali v předchozím kroku:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Zkontrolujeme, zda je náš cluster inicializován a začal fungovat:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Připraveno! Na clusteru K8s již můžete hostovat užitečné zatížení.

Co nás čeká dál

Doufám, že vám výše uvedené pokyny pomohly ušetřit čas a nervy.
Výsledek procesů probíhajících v tomto odvětví často závisí na tom, jak jsou přijímány většinou koncových uživatelů a vývojářů jiného softwaru v odpovídajícím výklenku. Zatím není zcela jasné, k čemu povedou iniciativy OCI za pár let, ale budeme s potěšením sledovat. O svůj názor se můžete podělit už teď v komentářích.

Zůstaňte naladěni!

Tento článek se objevil díky následujícím zdrojům:



Zdroj: www.habr.com

Přidat komentář