CRI-O kot zamenjava za Docker kot izvršljivo okolje za Kubernetes: nastavitev na CentOS 8

Zdravo! Moje ime je Sergey, sem DevOps pri Surfu. Oddelek DevOps pri Surfu si prizadeva ne le za vzpostavitev interakcije med strokovnjaki in integracijo delovnih procesov, temveč tudi za aktivno raziskovanje in implementacijo trenutnih tehnologij tako v lastno infrastrukturo kot v infrastrukturo stranke.

Spodaj bom nekaj govoril o spremembah v tehnološkem skladu za vsebnike, na katere smo naleteli med preučevanjem distribucije 8 CentOS in o tem, kaj je CRI-O in kako hitro nastaviti izvršljivo okolje za Kubernetes.

CRI-O kot zamenjava za Docker kot izvršljivo okolje za Kubernetes: nastavitev na CentOS 8

Zakaj Docker ni vključen v CentOS 8?

Po namestitvi najnovejših večjih izdaj RHEL 8 ali 8 CentOS ne moremo si pomagati, da ne bi opazili: te distribucije in uradni repozitoriji ne vsebujejo aplikacije Lučki delavec, ki idejno in funkcionalno nadomeščajo pakete podman, Buildah (privzeto prisoten v distribuciji) in CRI-O. To je posledica praktične implementacije standardov, ki jih je med drugim razvil Red Hat v okviru projekta Open Container Initiative (OCI).

Cilj OCI, ki je del The Linux Foundation, je ustvariti odprte industrijske standarde za vsebniške formate in izvajalne čase, ki rešujejo več težav hkrati. Prvič, niso bili v nasprotju s filozofijo Linuxa (na primer v delu, da mora vsak program izvesti eno dejanje in Lučki delavec je neke vrste kombajn vse v enem). Drugič, odpravili bi lahko vse obstoječe pomanjkljivosti v programski opremi Lučki delavec. Tretjič, bili bi popolnoma združljivi s poslovnimi zahtevami vodilnih komercialnih platform za uvajanje, upravljanje in streženje kontejnerskih aplikacij (na primer Red Hat OpenShift).

Omejitve Lučki delavec in prednosti nove programske opreme so bile podrobneje opisane že v ta članek, podroben opis celotnega sklada programske opreme, ki je na voljo znotraj projekta OCI, in njegovih arhitekturnih značilnosti pa lahko najdete v uradni dokumentaciji in člankih samega Red Hata (ni slabo članek v blogu Red Hat) in pri drugih ponudnikih ocene.

Pomembno je upoštevati, kakšno funkcionalnost imajo komponente predlaganega sklada:

  • podman — neposredna interakcija z vsebniki in shranjevanje slik prek procesa runC;
  • Buildah — sestavljanje in nalaganje slik v register;
  • CRI-O — izvedljivo okolje za vsebniške orkestralne sisteme (na primer Kubernetes).

Menim, da je za razumevanje splošne sheme interakcije med komponentami sklada priporočljivo tukaj navesti povezovalni diagram Kubernetes c tečiC in uporabo nizkonivojskih knjižnic CRI-O:

CRI-O kot zamenjava za Docker kot izvršljivo okolje za Kubernetes: nastavitev na CentOS 8

CRI-O и Kubernetes držite se istega cikla izdaje in podpore (matrika združljivosti je zelo preprosta: glavne različice Kubernetes и CRI-O sovpadajo), in to nam, ob upoštevanju osredotočenosti na popolno in celovito testiranje delovanja tega sklada s strani razvijalcev, daje pravico, da pričakujemo največjo dosegljivo stabilnost delovanja v vseh scenarijih uporabe (tukaj je koristna tudi relativna lahkotnost CRI-O v primerjavi z Lučki delavec zaradi namenskega omejevanja funkcionalnosti).

Pri namestitvi Kubernetes »pravi način« (seveda po OCI) z uporabo CRI-O o 8 CentOS Naleteli smo na nekaj manjših težav, ki pa smo jih uspešno premagali. Z veseljem bom delil z vami navodila za namestitev in konfiguracijo, kar bo skupaj vzelo približno 10 minut.

Kako namestiti Kubernetes na CentOS 8 z uporabo ogrodja CRI-O

Pogoji: prisotnost vsaj enega gostitelja (2 jedri, 4 GB RAM, vsaj 15 GB pomnilnika) z nameščenim 8 CentOS (priporočen je namestitveni profil “Server”), kot tudi vnose zanj v lokalnem DNS (v skrajnem primeru se lahko rešite z vnosom v /etc/hosts). In ne pozabite onemogoči zamenjavo.

Vse operacije na gostitelju izvajamo kot korenski uporabnik, bodite previdni.

  1. V prvem koraku bomo konfigurirali OS, namestili in konfigurirali predhodne odvisnosti za CRI-O.
    • Posodobimo OS:
      dnf -y update
      

    • Nato morate konfigurirati požarni zid in SELinux. Tukaj je vse odvisno od okolja, v katerem bo naš gostitelj ali gostitelji deloval. Požarni zid lahko nastavite v skladu s priporočili iz dokumentacijoali, če ste v zaupanja vrednem omrežju ali uporabljate požarni zid drugega proizvajalca, spremenite privzeto območje v zaupanja vredno ali izklopite požarni zid:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Če želite izklopiti požarni zid, lahko uporabite naslednji ukaz:

      systemctl disable --now firewalld
      

      SELinux je treba izklopiti ali preklopiti v »permisivni« način:

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

    • Naložite potrebne module in pakete jedra, konfigurirajte samodejno nalaganje modula »br_netfilter« ob zagonu sistema:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Za aktiviranje posredovanja paketov in pravilno obdelavo prometa bomo naredili ustrezne nastavitve:
      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
      

      uporabite narejene nastavitve:

      sysctl --system

    • nastavite zahtevano različico CRI-O (glavna različica CRI-O, kot že omenjeno, ustrezajo zahtevani različici Kubernetes), od najnovejše stabilne različice Kubernetes trenutno 1.18:
      export REQUIRED_VERSION=1.18
      

      dodajte potrebna skladišča:

      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

    • zdaj lahko namestimo CRI-O:
      dnf -y install cri-o
      

      Bodite pozorni na prvi odtenek, na katerega naletimo med postopkom namestitve: urediti morate konfiguracijo CRI-O pred zagonom storitve, ker ima zahtevana conmon komponenta drugačno lokacijo od podane:

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

      Zdaj lahko aktivirate in zaženete demon CRI-O:

      systemctl enable --now crio
      

      Stanje demona lahko preverite:

      systemctl status crio
      

  2. Namestitev in aktivacija Kubernetes.
    • Dodajmo zahtevano skladišče:
      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
      

      Zdaj lahko namestimo Kubernetes (različica 1.18, kot je navedeno zgoraj):

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

    • Drugi pomemben odtenek: ker ne uporabljamo demona Lučki delavec, vendar uporabljamo daemon CRI-O, pred zagonom in inicializacijo Kubernetes v konfiguracijski datoteki /var/lib/kubelet/config.yaml morate narediti ustrezne nastavitve, pri čemer ste najprej ustvarili želeni imenik:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Tretja pomembna točka, s katero se srečamo med namestitvijo: kljub dejstvu, da smo navedli uporabljeni gonilnik cgroupin njegovo konfiguracijo prek posredovanih argumentov kocka je zastarel (kot je izrecno navedeno v dokumentaciji), moramo v datoteko dodati argumente, sicer naša gruča ne bo inicializirana:
      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

    • Zdaj lahko aktiviramo demona kocka:
      sudo systemctl enable --now kubelet
      

      Za prilagajanje nadzorna ravnina ali delavec vozlišča v minutah, lahko uporabite s tem scenarijem.

  3. Čas je, da inicializiramo našo gručo.
    • Če želite inicializirati gručo, zaženite ukaz:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Ne pozabite zapisati ukaza za pridružitev gruči »kubeadm join …«, ki ga morate uporabiti na koncu izhoda, ali vsaj navedenih žetonov.

    • Namestimo vtičnik (CNI) za omrežje Pod. Priporočam uporabo Calico. Morda bolj priljubljena Flannel ima težave z združljivostjo nftables, in Calico - edina implementacija CNI, ki jo priporoča in v celoti testira projekt Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Če želite povezati delovno vozlišče z našo gručo, ga morate konfigurirati v skladu z navodili 1 in 2 ali uporabiti scenarij, nato zaženite ukaz iz izhoda »kubeadm init ...«, ki smo ga zapisali v prejšnjem koraku:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Preverimo, ali je naša gruča inicializirana in je začela delovati:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    pripravljena! Koristne obremenitve lahko že gostite v gruči K8s.

Kaj nas čaka naprej

Upam, da so vam zgornja navodila pomagala prihraniti nekaj časa in živcev.
Rezultat procesov, ki se pojavljajo v industriji, je pogosto odvisen od tega, kako jih sprejema večina končnih uporabnikov in razvijalcev druge programske opreme v ustrezni niši. Ni še povsem jasno, kaj bodo pobude OCI pripeljale čez nekaj let, bomo pa z veseljem spremljali. Svoje mnenje lahko delite zdaj v komentarjih.

Ostani na vezi!

Ta članek se je pojavil zahvaljujoč naslednjim virom:



Vir: www.habr.com

Dodaj komentar