CRI-O kao zamjena za Docker kao runtime okruženje za Kubernetes: postavljanje na CentOS 8

Zdravo! Moje ime je Sergej, ja sam DevOps u Surfu. DevOps odjel u Surf-u ima za cilj ne samo uspostavljanje interakcije između stručnjaka i integraciju radnih procesa, već i aktivno istraživanje i implementaciju trenutnih tehnologija kako u vlastitu infrastrukturu tako i u infrastrukturu korisnika.

U nastavku ću malo govoriti o promjenama u tehnološkom steku za kontejnere na koje smo naišli dok smo proučavali distribuciju CentOS 8 i o tome šta je CRI-O i kako brzo postaviti izvršno okruženje za Kubernet.

CRI-O kao zamjena za Docker kao runtime okruženje za Kubernetes: postavljanje na CentOS 8

Zašto Docker nije uključen u CentOS 8?

Nakon instaliranja najnovijih velikih izdanja rhel 8 ili CentOS 8 ne može se ne primijetiti: ove distribucije i službena spremišta nemaju aplikaciju doker, koji ideološki i funkcionalno zamjenjuju pakete podman, Buildah (prisutno u distribuciji po defaultu) i CRI-O. To je zbog praktične implementacije standarda koje je, između ostalog, razvio Red Hat u sklopu projekta Open Container Initiative (OCI).

Cilj OCI-ja, koji je dio The Linux Foundation, je stvaranje otvorenih industrijskih standarda za formate kontejnera i vremena izvršavanja koji rješavaju nekoliko problema odjednom. Prvo, nisu bili u suprotnosti sa filozofijom Linuxa (na primjer, u dijelu da svaki program treba da izvrši jednu radnju, a doker je neka vrsta kombajna sve u jednom). Drugo, mogli bi eliminisati sve postojeće nedostatke u softveru doker. Treće, oni bi bili u potpunosti kompatibilni sa poslovnim zahtjevima vodećih komercijalnih platformi za implementaciju, upravljanje i opsluživanje kontejnerskih aplikacija (na primjer, Red Hat OpenShift).

mane doker a prednosti novog softvera su već detaljno opisane u ovaj članak, a detaljan opis cjelokupnog softverskog paketa koji se nudi u okviru OCI projekta i njegovih arhitektonskih karakteristika možete pronaći u službenoj dokumentaciji i člancima samog Red Hata (nije loše članak u Red Hat blogu) i treće strane recenzije.

Važno je napomenuti koju funkcionalnost imaju komponente predloženog steka:

  • podman — direktna interakcija sa kontejnerima i skladištenjem slika kroz runC proces;
  • Buildah — sastavljanje i postavljanje slika u registar;
  • CRI-O — izvršno okruženje za sisteme orkestracije kontejnera (na primer, Kubernetes).

Mislim da je za razumijevanje opće sheme interakcije između komponenti steka preporučljivo dati dijagram povezivanja ovdje Kubernet c runC i biblioteke niskog nivoa koje koriste CRI-O:

CRI-O kao zamjena za Docker kao runtime okruženje za Kubernetes: postavljanje na CentOS 8

CRI-O и Kubernet pridržavati se istog ciklusa izdanja i podrške (matrica kompatibilnosti je vrlo jednostavna: glavne verzije Kubernet и CRI-O podudaraju), a to, uzimajući u obzir fokus na potpuno i sveobuhvatno testiranje rada ovog steka od strane programera, daje nam za pravo da očekujemo maksimalnu moguću stabilnost u radu pod bilo kojim scenarijem upotrebe (relativna lakoća je također korisna ovdje CRI-O u poređenju sa doker zbog namjernog ograničenja funkcionalnosti).

Prilikom instaliranja Kubernet "pravi put" način (prema OCI, naravno) korištenje CRI-O na CentOS 8 Naišli smo na manje poteškoće koje smo, međutim, uspješno savladali. Rado ću podijeliti s vama upute za instalaciju i konfiguraciju, što će ukupno trajati oko 10 minuta.

Kako implementirati Kubernetes na CentOS 8 koristeći CRI-O okvir

Preduvjeti: prisustvo najmanje jednog hosta (2 jezgra, 4 GB RAM-a, najmanje 15 GB skladišta) sa instaliranim CentOS 8 (preporučuje se instalacijski profil „Server“), kao i unosi za njega u lokalnom DNS-u (u krajnjem slučaju, možete proći unosom u /etc/hosts). I ne zaboravi onemogućiti swap.

Sve operacije izvodimo na hostu kao root korisnik, budite oprezni.

  1. U prvom koraku ćemo konfigurisati OS, instalirati i konfigurisati preliminarne zavisnosti za CRI-O.
    • Ažurirajmo OS:
      dnf -y update
      

    • Zatim morate konfigurirati firewall i SELinux. Ovdje sve ovisi o okruženju u kojem će naš domaćin ili domaćini raditi. Možete postaviti zaštitni zid prema preporukama iz dokumentaciju, ili, ako ste na pouzdanoj mreži ili koristite zaštitni zid treće strane, promijenite zadanu zonu u pouzdanu ili isključite zaštitni zid:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Da isključite zaštitni zid možete koristiti sljedeću naredbu:

      systemctl disable --now firewalld
      

      SELinux se mora isključiti ili prebaciti u "dozvoljeni" način rada:

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

    • Učitajte potrebne module i pakete kernela, konfigurirajte automatsko učitavanje modula “br_netfilter” pri pokretanju sistema:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Da aktiviramo prosljeđivanje paketa i ispravnu obradu prometa, izvršit ćemo odgovarajuća podešavanja:
      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
      

      primijeniti napravljene postavke:

      sysctl --system

    • postavite potrebnu verziju CRI-O (glavna verzija CRI-O, kao što je već spomenuto, odgovaraju traženoj verziji Kubernet), od najnovije stabilne verzije Kubernet trenutno 1.18:
      export REQUIRED_VERSION=1.18
      

      dodajte potrebna spremišta:

      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

    • sada možemo instalirati CRI-O:
      dnf -y install cri-o
      

      Obratite pažnju na prvu nijansu na koju nailazimo tokom procesa instalacije: morate urediti konfiguraciju CRI-O prije pokretanja usluge, budući da tražena komponenta conmon ima drugačiju lokaciju od navedene:

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

      Sada možete aktivirati i pokrenuti demona CRI-O:

      systemctl enable --now crio
      

      Možete provjeriti status demona:

      systemctl status crio
      

  2. Instalacija i aktivacija Kubernet.
    • Dodajmo potrebno spremište:
      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
      

      Sada možemo instalirati Kubernet (verzija 1.18, kao što je gore navedeno):

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

    • Druga važna nijansa: pošto ne koristimo demona doker, ali mi koristimo demona CRI-O, prije pokretanja i inicijalizacije Kubernet morate napraviti odgovarajuća podešavanja u konfiguracijskoj datoteci /var/lib/kubelet/config.yaml, nakon što ste prvo kreirali željeni direktorij:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Treća važna tačka na koju nailazimo tokom instalacije: uprkos činjenici da smo naveli korišćeni drajver cgroup, i njegovu konfiguraciju kroz proslijeđene argumente kubelet je zastarjela (kao što je eksplicitno navedeno u dokumentaciji), moramo dodati argumente u datoteku, inače naš klaster neće biti inicijaliziran:
      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

    • Sada možemo aktivirati demona kubelet:
      sudo systemctl enable --now kubelet
      

      Za prilagođavanje kontrolni avion ili radnik čvorova za nekoliko minuta, možete koristiti sa ovom skriptom.

  3. Vrijeme je da inicijaliziramo naš klaster.
    • Da biste inicijalizirali klaster, pokrenite naredbu:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Obavezno zapišite naredbu za pridruživanje klasteru “kubeadm join…”, koju se od vas traži da koristite na kraju izlaza, ili barem navedene tokene.

    • Hajde da instaliramo dodatak (CNI) za Pod mrežu. Preporučujem korištenje Calico. Možda i popularniji Flannel ima problema sa kompatibilnošću sa nftables, da i Calico - jedina CNI implementacija preporučena i potpuno testirana od strane projekta Kubernet:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Da povežete radni čvor s našim klasterom, morate ga konfigurirati prema uputama 1 i 2 ili koristiti script, zatim pokrenite naredbu iz “kubeadm init...” izlaza koju smo zapisali u prethodnom koraku:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Provjerimo da li je naš klaster inicijaliziran i počeo s radom:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Spremni! Već možete ugostiti korisna opterećenja na svom K8s klasteru.

Šta nas čeka pred nama

Nadam se da su vam gore navedene upute pomogle da uštedite malo vremena i živaca.
Ishod procesa koji se dešavaju u industriji često zavisi od toga kako ih prihvata većina krajnjih korisnika i programera drugog softvera u odgovarajućoj niši. Još nije sasvim jasno do čega će inicijative OCI-ja dovesti za nekoliko godina, ali ćemo sa zadovoljstvom gledati. Svoje mišljenje možete podijeliti odmah u komentarima.

Stay tuned!

Ovaj se članak pojavio zahvaljujući sljedećim izvorima:



izvor: www.habr.com

Dodajte komentar