CRI-O a Docker helyettesítőjeként a Kubernetes futtatható környezeteként: beállítás CentOS 8 rendszeren

Helló! A nevem Sergey, DevOps vagyok a Surfnál. A Surf DevOps részlegének célja nem csak a szakemberek közötti interakció kialakítása és a munkafolyamatok integrálása, hanem a jelenlegi technológiák aktív kutatása és bevezetése mind saját infrastruktúrájában, mind az ügyfél infrastruktúrájában.

Az alábbiakban beszélek egy kicsit a konténerek technológiai veremében bekövetkezett változásokról, amelyekkel a disztribúció tanulmányozása során találkoztunk 8 CentOS és arról, hogy mi van LÉTREHOZNI és hogyan lehet gyorsan végrehajtani a futtatható környezetet Kubernetes.

CRI-O a Docker helyettesítőjeként a Kubernetes futtatható környezeteként: beállítás CentOS 8 rendszeren

Miért nem szerepel a Docker a CentOS 8-ban?

A legújabb főbb kiadások telepítése után rhel 8 vagy 8 CentOS Nem lehet nem észrevenni: ezek a disztribúciók és hivatalos tárolók nem tartalmazzák az alkalmazást Dokkmunkás, amelyek ideológiailag és funkcionálisan helyettesítik a csomagokat Podman, Buildah (alapértelmezés szerint jelen van a disztribúcióban) és LÉTREHOZNI. Ez többek között a Red Hat által az Open Container Initiative (OCI) projekt részeként kidolgozott szabványok gyakorlati megvalósításának köszönhető.

A The Linux Foundation részét képező OCI célja nyílt iparági szabványok létrehozása a konténerformátumokhoz és futtatókörnyezetekhez, amelyek egyszerre több problémát is megoldanak. Először is, nem mondanak ellent a Linux filozófiájának (például abban, hogy minden programnak egy műveletet kell végrehajtania, és Dokkmunkás egyfajta all-in-one kombájn). Másodszor, kiküszöbölhetik a szoftver összes meglévő hiányosságát Dokkmunkás. Harmadszor, teljes mértékben kompatibilisek lennének a konténeres alkalmazások telepítésére, kezelésére és kiszolgálására vonatkozó vezető kereskedelmi platformok (például Red Hat OpenShift) üzleti követelményeivel.

Korlátozások Dokkmunkás és az új szoftver előnyeit már részletesen leírtuk ezt a cikket, valamint az OCI projektben kínált teljes szoftververem és annak építészeti jellemzőinek részletes leírása megtalálható a hivatalos dokumentációban és magának a Red Hatnek a cikkeiben (nem rossz cikk a Red Hat blogban) és harmadik féltől vélemények.

Fontos megjegyezni, hogy a javasolt verem összetevői milyen funkciókkal rendelkeznek:

  • Podman — közvetlen interakció a tárolókkal és a képtárral a runC folyamaton keresztül;
  • Buildah — képek összeállítása és feltöltése a nyilvántartóba;
  • LÉTREHOZNI — végrehajtható környezet konténer-hangszerelési rendszerek számára (például Kubernetes).

Úgy gondolom, hogy a verem összetevői közötti interakció általános sémájának megértéséhez célszerű itt megadni egy kapcsolódási diagramot Kubernetes c runC és alacsony szintű könyvtárak segítségével LÉTREHOZNI:

CRI-O a Docker helyettesítőjeként a Kubernetes futtatható környezeteként: beállítás CentOS 8 rendszeren

LÉTREHOZNI и Kubernetes ugyanazt a kiadási és támogatási ciklust tartsa be (a kompatibilitási mátrix nagyon egyszerű: főbb verziók Kubernetes и LÉTREHOZNI egybeesik), és ez, figyelembe véve, hogy a fejlesztők a verem működésének teljes és átfogó tesztelésére összpontosítanak, jogot ad számunkra, hogy bármilyen felhasználási forgatókönyv esetén a maximálisan elérhető működési stabilitást várjuk el (itt a relatív könnyűség is előnyös LÉTREHOZNI összehasonlítva Dokkmunkás a funkcionalitás szándékos korlátozása miatt).

Telepítéskor Kubernetes "helyes út" módon (természetesen az OCI szerint) használatával LÉTREHOZNI on 8 CentOS Kisebb nehézségekbe ütköztünk, amelyeket azonban sikeresen leküzdöttünk. Szívesen megosztom Önnel a telepítési és konfigurációs utasításokat, amelyek összesen körülbelül 10 percet vesznek igénybe.

A Kubernetes telepítése CentOS 8 rendszeren a CRI-O keretrendszer használatával

Előfeltételek: legalább egy gazdagép megléte (2 mag, 4 GB RAM, legalább 15 GB tárhely) telepített 8 CentOS (a „Server” telepítési profil ajánlott), valamint a helyi DNS-ben található bejegyzések (végső lehetőségként az /etc/hosts bejegyzéssel is meg lehet oldani). És ne felejtsd el csere letiltása.

Minden műveletet root felhasználóként hajtunk végre a gazdagépen, legyen óvatos.

  1. Az első lépésben konfiguráljuk az operációs rendszert, telepítjük és beállítjuk a CRI-O előzetes függőségeit.
    • Frissítsük az operációs rendszert:
      dnf -y update
      

    • Ezután be kell állítania a tűzfalat és a SELinuxot. Itt minden attól függ, hogy a házigazdánk vagy házigazdáink milyen környezetben fognak dolgozni. Beállíthat egy tűzfalat a webhely ajánlásai szerint dokumentáció, vagy ha megbízható hálózaton van, vagy harmadik féltől származó tűzfalat használ, módosítsa az alapértelmezett zónát megbízhatóra, vagy kapcsolja ki a tűzfalat:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      A tűzfal kikapcsolásához használja a következő parancsot:

      systemctl disable --now firewalld
      

      A SELinuxot ki kell kapcsolni, vagy „megengedő” módba kell kapcsolni:

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

    • Töltse be a szükséges kernel modulokat és csomagokat, állítsa be a „br_netfilter” modul automatikus betöltését a rendszer indításakor:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • A csomagtovábbítás aktiválásához és a megfelelő forgalomfeldolgozáshoz elvégezzük a megfelelő beállításokat:
      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
      

      alkalmazza a megadott beállításokat:

      sysctl --system

    • állítsa be a kívánt verziót LÉTREHOZNI (fő verzió LÉTREHOZNI, mint már említettük, megfeleljen a kívánt verziónak Kubernetes), a legújabb stabil verzió óta Kubernetes jelenleg 1.18:
      export REQUIRED_VERSION=1.18
      

      adja hozzá a szükséges tárolókat:

      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

    • most telepíthetjük LÉTREHOZNI:
      dnf -y install cri-o
      

      Ügyeljen az első árnyalatra, amellyel a telepítés során találkozunk: szerkesztenie kell a konfigurációt LÉTREHOZNI a szolgáltatás elindítása előtt, mivel a szükséges közös összetevő a megadotttól eltérő helyen található:

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

      Most aktiválhatja és elindíthatja a démont LÉTREHOZNI:

      systemctl enable --now crio
      

      A démon állapotát ellenőrizheti:

      systemctl status crio
      

  2. Telepítés és aktiválás Kubernetes.
    • Adjuk hozzá a szükséges tároló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
      

      Most telepíthetjük Kubernetes (1.18-as verzió, a fent említettek szerint):

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

    • A második fontos árnyalat: mivel nem használunk démont Dokkmunkás, de a démont használjuk LÉTREHOZNI, indítás és inicializálás előtt Kubernetes el kell végeznie a megfelelő beállításokat a /var/lib/kubelet/config.yaml konfigurációs fájlban, miután először létrehozta a kívánt könyvtárat:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • A harmadik fontos pont, amellyel a telepítés során találkozunk: annak ellenére, hogy feltüntettük a használt illesztőprogramot cgroup, és konfigurációja az átadott argumentumokon keresztül kubelet elavult (ahogy a dokumentációban kifejezetten szerepel), argumentumokat kell hozzáadnunk a fájlhoz, különben a fürt nem inicializálódik:
      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

    • Most aktiválhatjuk a démont kubelet:
      sudo systemctl enable --now kubelet
      

      A testreszabáshoz irányító-sík vagy munkás csomópontokat percek alatt használhatja ezzel a forgatókönyvvel.

  3. Ideje inicializálni a klaszterünket.
    • A fürt inicializálásához futtassa a következő parancsot:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Feltétlenül írja le a „kubeadm join…” fürthöz való csatlakozás parancsát, amelyet a kimenet végén kell használnia, vagy legalább a megadott tokeneket.

    • Telepítsük a bővítményt (CNI) a Pod hálózathoz. Javaslom a használatát Karton. Esetleg népszerűbb Flanel kompatibilitási problémái vannak nftables, igen és Karton - a projekt által ajánlott és teljes körűen tesztelt egyetlen CNI implementáció Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Ahhoz, hogy egy dolgozó csomópontot fürtünkhöz csatlakoztasson, be kell állítania az 1. és 2. utasítás szerint, vagy forgatókönyv, majd futtassa a parancsot a „kubeadm init...” kimenetből, amelyet az előző lépésben írtunk le:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Ellenőrizzük, hogy a klaszterünk inicializálva van-e, és elkezdett-e működni:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Kész! Már tárolhat hasznos terheket a K8s-fürtön.

Mi vár ránk előttünk

Remélem, hogy a fenti utasítások segítségével időt és idegeket takarított meg.
Az iparágban lezajló folyamatok kimenetele gyakran attól függ, hogy a végfelhasználók és a megfelelő résbe tartozó egyéb szoftverek fejlesztői hogyan fogadják azokat. Egyelőre nem teljesen világos, hogy néhány év múlva mihez vezetnek az OCI-kezdeményezések, de örömmel figyeljük. Most megoszthatja véleményét a megjegyzésekben.

Maradjon velünk!

Ez a cikk a következő forrásoknak köszönhetően jelent meg:



Forrás: will.com

Hozzászólás