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

Zdravo! Moje ime je Sergey, ja sam DevOps u Surfu. DevOps odjel u Surfu ima za cilj ne samo uspostaviti interakciju između stručnjaka i integrirati radne procese, već i aktivno istraživati ​​i implementirati trenutne tehnologije kako u vlastitoj infrastrukturi tako iu infrastrukturi korisnika.

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

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 8 CentOS ne možemo ne primijetiti: ove distribucije i službena spremišta ne sadrže aplikaciju Lučki radnik, koji ideološki i funkcionalno zamjenjuju pakete podman, Buildah (prisutno u distribuciji prema zadanim postavkama) i CRI-O. To je zbog praktične primjene 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 stvoriti otvorene industrijske standarde za formate spremnika i runtimee koji rješavaju nekoliko problema odjednom. Prvo, nisu proturječili filozofiji Linuxa (npr. u dijelu da svaki program treba izvršiti jednu radnju, a Lučki radnik je vrsta kombajna sve u jednom). Drugo, mogli bi eliminirati sve postojeće nedostatke u softveru Lučki radnik. Treće, bili bi potpuno kompatibilni s poslovnim zahtjevima vodećih komercijalnih platformi za implementaciju, upravljanje i posluživanje kontejnerskih aplikacija (na primjer, Red Hat OpenShift).

Ograničenja Lučki radnik a prednosti novog softvera već su detaljno opisane u ovaj članak, a detaljan opis cjelokupnog softverskog paketa koji se nudi unutar OCI projekta i njegovih arhitektonskih značajki može se pronaći u službenoj dokumentaciji i člancima samog Red Hata (nije loše članak u Red Hat blogu) i kod trećih strana recenzije.

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

  • podman — izravna interakcija sa spremnicima i pohranjivanje slika kroz runC proces;
  • Buildah — sastavljanje i učitavanje slika u registar;
  • CRI-O — izvršno okruženje za sustave orkestracije spremnika (na primjer, Kubernetes).

Mislim da je za razumijevanje opće sheme interakcije između komponenti stoga preporučljivo ovdje dati dijagram veze Kubernetes c trčanjeC i knjižnice niske razine pomoću CRI-O:

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

CRI-O и Kubernetes pridržavati se istog ciklusa izdanja i podrške (matrica kompatibilnosti je vrlo jednostavna: glavne verzije Kubernetes и CRI-O podudaraju), a to, uzimajući u obzir usmjerenost na potpuno i sveobuhvatno testiranje rada ovog skupa od strane programera, daje nam pravo očekivati ​​maksimalnu postižnu stabilnost u radu u svim scenarijima upotrebe (relativna lakoća je također korisna ovdje CRI-O u usporedbi s Lučki radnik zbog namjernog ograničenja funkcionalnosti).

Pri instalaciji Kubernetes "pravi način" način (prema OCI, naravno) koristeći CRI-O na 8 CentOS Nailazili smo na manje poteškoće koje smo, međutim, uspješno prebrodili. Rado ću s vama podijeliti upute za instalaciju i konfiguraciju, što će ukupno trajati oko 10 minuta.

Kako implementirati Kubernetes na CentOS 8 pomoću okvira CRI-O

Preduvjeti: prisutnost barem jednog hosta (2 jezgre, 4 GB RAM-a, najmanje 15 GB prostora za pohranu) s instaliranim 8 CentOS (preporuča se instalacijski profil “Server”), kao i unose za njega u lokalnom DNS-u (u krajnjem slučaju, možete proći unosom u /etc/hosts). I ne zaboravite onemogućiti zamjenu.

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

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

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

      Za isključivanje vatrozida možete koristiti sljedeću naredbu:

      systemctl disable --now firewalld
      

      SELinux treba isključiti ili prebaciti u "permisivni" 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 sustava:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Za aktiviranje prosljeđivanja paketa i ispravnu obradu prometa napravit ćemo odgovarajuće postavke:
      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
      

      primijenite napravljene postavke:

      sysctl --system

    • postavite potrebnu verziju CRI-O (glavna verzija CRI-O, kao što je već spomenuto, odgovaraju traženoj verziji Kubernetes), od najnovije stabilne verzije Kubernetes 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 pozornost na prvu nijansu s kojom se susrećemo tijekom postupka instalacije: morate urediti konfiguraciju CRI-O prije pokretanja usluge, jer potrebna conmon komponenta 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 Kubernetes.
    • 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 Kubernetes (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: budući da ne koristimo demona Lučki radnik, ali koristimo daemon CRI-O, prije pokretanja i inicijalizacije Kubernetes trebate izvršiti odgovarajuće postavke u konfiguracijskoj datoteci /var/lib/kubelet/config.yaml, nakon što ste prvo stvorili ž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 točka s kojom se susrećemo tijekom instalacije: unatoč činjenici da smo naveli korišteni upravljački program cgrupa, i njegovu konfiguraciju kroz proslijeđene argumente kubelet je zastario (kao što je izričito 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 prilagodbu kontrolna ravnina ili radnik čvorova za nekoliko minuta, možete koristiti s 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
      

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

    • Instalirajmo dodatak (CNI) za Pod mrežu. Preporučujem korištenje platno. Možda i popularniji Flanel ima problema s kompatibilnošću nftables, i platno - jedina CNI implementacija preporučena i potpuno testirana u projektu Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Da biste povezali radni čvor s našim klasterom, morate ga konfigurirati prema uputama 1 i 2 ili koristiti skripta, zatim pokrenite naredbu iz "kubeadm init..." izlaza koji smo zapisali u prethodnom koraku:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

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

    Spreman! Već možete ugostiti korisni teret na svom K8s klasteru.

Što nas čeka naprijed

Nadam se da su vam gornje upute pomogle uštedjeti vrijeme i živce.
Ishod procesa koji se odvijaju u industriji često ovisi o tome kako ih prihvaća većina krajnjih korisnika i programera drugog softvera u odgovarajućoj niši. Još nije sasvim jasno do čega će OCI inicijative dovesti za nekoliko godina, ali ćemo sa zadovoljstvom gledati. Svoje mišljenje možete podijeliti odmah u komentarima.

Ostani u tunelu!

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



Izvor: www.habr.com

Dodajte komentar