CRI-O kiel anstataŭaĵo por Docker kiel rultempa medio por Kubernetes: agordo sur CentOS 8

Saluton! Mi nomiĝas Sergey, mi estas DevOps ĉe Surf. La fako DevOps ĉe Surf celas ne nur establi interagadon inter specialistoj kaj integri laborprocezojn, sed ankaŭ aktive esplori kaj efektivigi aktualajn teknologiojn kaj en sia propra infrastrukturo kaj en la infrastrukturo de la kliento.

Malsupre mi parolos iomete pri la ŝanĝoj en la teknologia stako por ujoj, kiujn ni renkontis dum studado de la distribuo. CentOS 8 kaj pri kio ĝi estas CRI-O kaj kiel rapide agordi plenumeblan medion por Kubernetoj.

CRI-O kiel anstataŭaĵo por Docker kiel rultempa medio por Kubernetes: agordo sur CentOS 8

Kial Docker ne estas inkluzivita en CentOS 8?

Post instalo de la plej novaj ĉefaj eldonoj rhel 8CentOS 8 oni ne povas ne rimarki: ĉi tiuj distribuaĵoj kaj oficialaj deponejoj ne enhavas la aplikaĵon Docker, kiuj ideologie kaj funkcie anstataŭigas pakaĵojn podman, Buildah (ĉeestas en la distribuo defaŭlte) kaj CRI-O. Ĉi tio ŝuldiĝas al la praktika efektivigo de normoj evoluigitaj, interalie, de Red Hat kiel parto de la projekto Open Container Initiative (OCI).

La celo de OCI, kiu estas parto de The Linux Foundation, estas krei malfermajn industriajn normojn por ujformatoj kaj rultempoj, kiuj solvas plurajn problemojn samtempe. Unue, ili ne kontraŭdiris la filozofion de Linukso (ekzemple, en la parto, ke ĉiu programo devas plenumi unu agon, kaj Docker estas speco de ĉio-en-unu kombinaĵo). Due, ili povus forigi ĉiujn ekzistantajn mankojn en la programaro Docker. Trie, ili estus plene kongruaj kun la komercaj postuloj de gvidaj komercaj platformoj por disfaldi, administri kaj servi kontenerigitajn aplikojn (ekzemple Red Hat OpenShift).

mankoj Docker kaj la avantaĝoj de la nova programaro jam iom detale estis priskribitaj en ĉi tiu artikolo, kaj detala priskribo de la tuta programaro-stako ofertita ene de la OCI-projekto kaj ĝiaj arkitekturaj trajtoj troveblas en la oficiala dokumentaro kaj artikoloj de Red Hat mem (ne malbona artikolo en Red Hat-blogo) kaj en triaj recenzoj.

Gravas noti kian funkciecon havas la komponentoj de la proponita stako:

  • podman — rekta interago kun ujoj kaj bildstokado per la procezo runC;
  • Buildah — muntado kaj alŝutado de bildoj al la registro;
  • CRI-O — efektivigebla medio por uj-orkestradsistemoj (ekzemple, Kubernetes).

Mi pensas, ke por kompreni la ĝeneralan skemon de interago inter la komponantoj de la stako, estas konsilinde provizi ĉi tie konektan diagramon. Kubernetoj c kuriC kaj malaltnivelaj bibliotekoj uzante CRI-O:

CRI-O kiel anstataŭaĵo por Docker kiel rultempa medio por Kubernetes: agordo sur CentOS 8

CRI-O и Kubernetoj aliĝu al la sama eldono kaj subtena ciklo (la kongrua matrico estas tre simpla: ĉefaj versioj Kubernetoj и CRI-O koincidas), kaj ĉi tio, konsiderante la fokuson pri kompleta kaj ampleksa testado de la funkciado de ĉi tiu stako fare de programistoj, donas al ni la rajton atendi la maksimuman atingeblan stabilecon en funkciado sub iuj uzaj scenaroj (relativa malpezeco ankaŭ estas utila ĉi tie. CRI-O kompare kun Docker pro celkonscia limigo de funkcieco).

Dum instalado Kubernetoj "ĝusta vojo" maniero (laŭ OCI, kompreneble) uzanta CRI-O sur CentOS 8 Ni renkontis kelkajn etajn malfacilaĵojn, kiujn ni tamen sukcese venkis. Mi volonte dividos kun vi instrukciojn pri instalado kaj agordo, kiuj entute daŭros ĉirkaŭ 10 minutojn.

Kiel disfaldi Kubernetes sur CentOS 8 uzante la kadron CRI-O

Antaŭkondiĉoj: ĉeesto de almenaŭ unu gastiganto (2 kernoj, 4 GB RAM, almenaŭ 15 GB stokado) kun instalita CentOS 8 (la "Servilo" instala profilo estas rekomendita), same kiel enskribojn por ĝi en la loka DNS (kiel lasta rimedo, vi povas elteni per eniro en /etc/hosts). Kaj ne forgesu malŝalti interŝanĝon.

Ni plenumas ĉiujn operaciojn sur la gastiganto kiel la radika uzanto, atentu.

  1. En la unua paŝo, ni agordos la OS, instalos kaj agordos preparajn dependecojn por CRI-O.
    • Ni ĝisdatigu la OS:
      dnf -y update
      

    • Poste vi devas agordi la fajroŝirmilon kaj SELinux. Ĉi tie ĉio dependas de la medio en kiu laboros niaj gastigantoj aŭ gastigantoj. Vi povas aŭ starigi fajroŝirmilon laŭ la rekomendoj de dokumentado, aŭ, se vi estas en fidinda reto aŭ uzas triapartan fajroŝirmilon, ŝanĝu la defaŭltan zonon al fidinda aŭ malŝaltu la fajroŝirmilon:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Por malŝalti la fajroŝirmilon vi povas uzi la jenan komandon:

      systemctl disable --now firewalld
      

      SELinux devas esti malŝaltita aŭ ŝanĝita al "permesema" reĝimo:

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

    • Ŝarĝu la necesajn kernajn modulojn kaj pakaĵojn, agordu la aŭtomatan ŝarĝon de la modulo "br_netfilter" ĉe la ekfunkciigo de la sistemo:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Por aktivigi pakaĵeton kaj ĝustan trafikan prilaboradon, ni faros la taŭgajn agordojn:
      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
      

      apliki la agordojn faritajn:

      sysctl --system

    • starigu la bezonatan version CRI-O (ĉefa versio CRI-O, kiel jam menciite, kongruas kun la bezonata versio Kubernetoj), ekde la plej nova stabila versio Kubernetoj nuntempe 1.18:
      export REQUIRED_VERSION=1.18
      

      aldonu la necesajn deponejojn:

      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

    • nun ni povas instali CRI-O:
      dnf -y install cri-o
      

      Atentu la unuan nuancon, kiun ni renkontas dum la instala procezo: vi devas redakti la agordon CRI-O antaŭ ol komenci la servon, ĉar la bezonata komuna komponanto havas malsaman lokon ol la specifita:

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

      Nun vi povas aktivigi kaj komenci la demonon CRI-O:

      systemctl enable --now crio
      

      Vi povas kontroli la demonan staton:

      systemctl status crio
      

  2. Instalado kaj aktivigo Kubernetoj.
    • Ni aldonu la bezonatan deponejon:
      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
      

      Nun ni povas instali Kubernetoj (versio 1.18, kiel menciite supre):

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

    • La dua grava nuanco: ĉar ni ne uzas demonon Docker, sed ni uzas la demonon CRI-O, antaŭ lanĉo kaj inicialigo Kubernetoj vi devas fari la taŭgajn agordojn en la agorda dosiero /var/lib/kubelet/config.yaml, unue kreinte la deziratan dosierujon:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • La tria grava punkto, kiun ni renkontas dum instalado: malgraŭ tio, ke ni indikis la ŝoforon uzatan cgroup, kaj ĝia agordo tra la argumentoj pasis kubeto estas malaktuala (kiel estas eksplicite dirite en la dokumentaro), ni devas aldoni argumentojn al la dosiero, alie nia areto ne estos pravigita:
      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

    • Nun ni povas aktivigi la demonon kubeto:
      sudo systemctl enable --now kubelet
      

      Por personecigi kontrol-aviadilolaboristo nodoj en minutoj, vi povas uzi kun ĉi tiu skripto.

  3. Estas tempo pravalorigi nian areton.
    • Por pravalorigi la areton, rulu la komandon:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Nepre skribu la komandon por aliĝi al la areto "kubeadm join ...", kiun vi petas uzi ĉe la fino de la eligo, aŭ almenaŭ la specifitajn ĵetonojn.

    • Ni instalu la kromprogramon (CNI) por la Pod-reto. Mi rekomendas uzi Kalico. Eble pli populara Fandalo havas kongruajn problemojn kun nftables, jes kaj Kalico - la sola CNI-efektivigo rekomendita kaj plene provita de la projekto Kubernetoj:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Por konekti laboran nodon al nia areto, vi devas agordi ĝin laŭ instrukcioj 1 kaj 2, aŭ uzi skripto, tiam rulu la komandon el la eligo "kubeadm init...", kiun ni skribis en la antaŭa paŝo:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Ni kontrolu, ke nia areto estas pravigita kaj ekfunkciis:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Preta! Vi jam povas gastigi utilajn ŝarĝojn sur via K8s-areto.

Kio atendas nin antaŭen

Mi esperas, ke la supraj instrukcioj helpis ŝpari al vi tempon kaj nervojn.
La rezulto de procezoj okazantaj en la industrio ofte dependas de kiel ili estas akceptitaj de la plejparto de finaj uzantoj kaj programistoj de aliaj programoj en la responda niĉo. Ankoraŭ ne estas tute klare, al kio la OCI-iniciatoj kondukos post kelkaj jaroj, sed ni rigardos kun plezuro. Vi povas dividi vian opinion nun en la komentoj.

Restu agordita!

Ĉi tiu artikolo aperis danke al la jenaj fontoj:



fonto: www.habr.com

Aldoni komenton