CRI-O wekî cîhgirek ji bo Docker wekî jîngehek îcrakar ji bo Kubernetes: sazkirina li ser CentOS 8

Slav! Navê min Sergey e, ez li Surf DevOps im. Daîreya DevOps li Surf ne tenê armanc dike ku têkiliya di navbera pisporan de saz bike û pêvajoyên xebatê yek bike, lê di heman demê de hem di binesaziya xwe û hem jî di binesaziya xerîdar de bi aktîvî lêkolîn û pêkanîna teknolojiyên heyî dike.

Li jêr ez ê hinekî li ser guheztinên di stûna teknolojiyê ya konteynerên ku em di dema xwendina belavkirinê de rastî wan hatin CentOS 8 û li ser çi ye CRI-O û meriv çawa zû ji bo jîngehek îcrakar saz dike Kubernetes.

CRI-O wekî cîhgirek ji bo Docker wekî jîngehek îcrakar ji bo Kubernetes: sazkirina li ser CentOS 8

Çima Docker di CentOS 8 de tune?

Piştî sazkirina weşanên sereke yên herî dawî rhel 8 an CentOS 8 Mirov nikare lê hay jê nebe: ev belavbûn û depoyên fermî serîlêdanê nagirin Docker, ku ji hêla îdeolojîk û fonksiyonel ve şûna pakêtan digirin podman, Buildah (ji hêla xwerû di belavkirinê de heye) û CRI-O. Ev ji ber pêkanîna pratîkî ya standardên ku di nav tiştên din de, ji hêla Red Hat ve wekî beşek ji projeya Înîsiyatîfa Konteynirê Vekirî (OCI) ve hatî pêşve xistin.

Armanca OCI, ku beşek ji Weqfa Linux-ê ye, ew e ku standardên pîşesaziya vekirî yên ji bo formatên konteyneran û demên xebitandinê biafirîne ku çend pirsgirêkan bi yekcarî çareser dike. Ya yekem, ew li dijî felsefeya Linux-ê nebûn (mînak, di beşa ku divê her bername yek çalakiyek pêk bîne, û Docker celebek tevlihevkirina hemî-yek-yek e). Ya duyemîn, ew dikarin hemî kêmasiyên heyî yên di nermalavê de ji holê rakin Docker. Ya sêyemîn, ew ê bi hewcedariyên karsaziyê yên platformên bazirganî yên pêşeng ên ji bo bicihkirin, rêvebirin û xizmetkirina serîlêdanên konteyneran re bi tevahî hevaheng bin (mînak, Red Hat OpenShift).

kêmasiyên Docker û avantajên nermalava nû berê bi hûrgulî di nav de hatine vegotin vê gotara, û danasînek berfireh a tevahiya stoka nermalava ku di nav projeya OCI de hatî pêşkêş kirin û taybetmendiyên wê yên mîmarî dikare di belgeyên fermî û gotarên ji Red Hat bixwe de were dîtin (ne xirab e gotara di bloga Red Hat de) û di partiya sêyemîn de reviews.

Girîng e ku bala xwe bidin ka kîjan fonksiyonên pêkhateyên stacka pêşniyarkirî hene:

  • podman - têkiliya rasterast bi konteyneran û hilanîna wêneyê bi pêvajoya runC re;
  • Buildah - komkirin û barkirina wêneyan li qeydê;
  • CRI-O - Jîngehek îcrakar ji bo pergalên orkestrasyona konteyneran (mînak, Kubernetes).

Ez difikirim ku ji bo têgihîştina nexşeya gelemperî ya danûstendina di navbera pêkhateyên stackê de, tê pêşniyar kirin ku li vir diyagramek pêwendiyê peyda bike Kubernetes c runC û pirtûkxaneyên asta nizm bi kar tînin CRI-O:

CRI-O wekî cîhgirek ji bo Docker wekî jîngehek îcrakar ji bo Kubernetes: sazkirina li ser CentOS 8

CRI-O и Kubernetes bi heman çerxa berdan û piştgirîyê ve girêdayî bin (matrixa lihevhatinê pir hêsan e: guhertoyên sereke Kubernetes и CRI-O hevûdu), û ev yek, li ber çavan girtinê li ser ceribandina bêkêmasî û berfireh a xebata vê stakê ji hêla pêşdebiran ve, mafê me dide ku em di bin her senaryoyên karanîna de li benda aramiya herî zêde ya gihîştî bin di operasyonê de (sivikiya têkildar li vir jî sûdmend e CRI-O danberhev bi Docker ji ber sînorkirina armanckirî ya fonksiyonê).

Dema sazkirinê Kubernetes awayê "rêya rast" (li gorî OCI, bê guman) bikar tîne CRI-O li ser CentOS 8 Em rastî hinek zehmetiyên piçûk hatin, lê belê, me bi serkeftî derbas kir. Ez ê kêfxweş bibim ku rêwerzên sazkirin û veavakirinê bi we re parve bikim, ku bi tevahî dê 10 hûrdeman bigire.

Meriv çawa Kubernetes li ser CentOS 8-ê bi karanîna çarçoweya CRI-O-ê bicîh dike

Pêwîst: hebûna herî kêm yek mêvandar (2 core, 4 GB RAM, herî kêm 15 GB hilanînê) bi sazkirî CentOS 8 (profîla sazkirinê ya "Server" tê pêşniyar kirin), û her weha têketinên wê di DNS-ya herêmî de (wek çareya paşîn, hûn dikarin bi navnîşek /etc/hosts bi dest bixin). Û ji bîr nekin guherandinê neçalak bike.

Em hemî operasyonan li ser mêvandarê wekî bikarhênerê root pêk tînin, baldar bin.

  1. Di gava yekem de, em ê OS-ê mîheng bikin, girêdanên pêşîn ên ji bo CRI-O saz bikin û mîheng bikin.
    • Ka em OS-ê nûve bikin:
      dnf -y update
      

    • Dûv re hûn hewce ne ku dîwar û SELinux-ê mîheng bikin. Li vir her tişt bi hawîrdora ku dê mêvandar an mêvandarên me bixebitin ve girêdayî ye. Hûn dikarin li gorî pêşnîyarên ji êvarê fîşekek saz bikin belgekirin, an jî, heke hûn li ser torgilokek pêbawer in an dîwarek sêyemîn bikar tînin, devera xwerû biguhezînin wekî pêbawer an dîwarê agir vemirînin:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Ji bo vemirandina firewallê hûn dikarin fermana jêrîn bikar bînin:

      systemctl disable --now firewalld
      

      Pêdivî ye ku SELinux were veqetandin an veguheztina moda "destûr":

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

    • Modul û pakêtên kernelê yên pêwîst bar bikin, di destpêka pergalê de barkirina otomatîkî ya modula "br_netfilter" mîheng bikin:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Ji bo çalakkirina şandina pakêtê û rastkirina pêvajoyek trafîkê, em ê mîhengên guncan bikin:
      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
      

      mîhengên çêkirî bicîh bînin:

      sysctl --system

    • guhertoya pêwîst saz bike CRI-O (guhertoya sereke CRI-O, wekî ku berê jî behs kir, guhertoya pêwîst bihevre bikin Kubernetes), ji ber ku guhertoya herî dawî ya stabîl Kubernetes niha 1.18:
      export REQUIRED_VERSION=1.18
      

      depoyên pêwîst zêde bikin:

      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

    • niha em dikarin saz bikin CRI-O:
      dnf -y install cri-o
      

      Bala xwe bidin nuanca yekem a ku em di pêvajoya sazkirinê de pê re rû bi rû dimînin: hûn hewce ne ku veavakirinê biguherînin CRI-O berî destpêkirina karûbarê, ji ber ku pêkhateya konmonê ya pêwîst ji ya diyarkirî cîhek cûda heye:

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

      Naha hûn dikarin daemonê çalak bikin û dest pê bikin CRI-O:

      systemctl enable --now crio
      

      Hûn dikarin rewşa daemon kontrol bikin:

      systemctl status crio
      

  2. Sazkirin û aktîfkirin Kubernetes.
    • Ka em depoya pêwîst lê zêde bikin:
      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
      

      Niha em dikarin saz bikin Kubernetes (guhertoya 1.18, wekî ku li jor hatî destnîşan kirin):

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

    • Nîşaneya duyemîn a girîng: ji ber ku em daemon bikar neynin Docker, lê em daemon bikar tînin CRI-O, berî destpêkirin û destpêkirinê Kubernetes Pêdivî ye ku hûn mîhengên guncan di pelê veavakirinê de bikin /var/lib/kubelet/config.yaml, ku pêşî pelrêça xwestî çêkiribe:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Xala sêyemîn a girîng a ku em di dema sazkirinê de pê re rû bi rû dimînin: tevî vê yekê ku me ajokera ku hatî bikar anîn destnîşan kiriye cgroup, û veavakirina wê bi argumanan derbas bû kubelet kevnar e (wekî ku bi eşkere di belgeyê de tê gotin), pêdivî ye ku em argumanan li pelê zêde bikin, wekî din koma me dê neyê destpêkirin:
      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

    • Niha em dikarin daemon çalak bikin kubelet:
      sudo systemctl enable --now kubelet
      

      To customize kontrol-balafir an karker girêkên di çend hûrdeman de, hûn dikarin bikar bînin bi vê senaryoyê.

  3. Dem dema destpêkirina koma me ye.
    • Ji bo destpêkirina komê, fermanê bişopînin:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Bawer bin ku emrê tevlêbûna koma "kubeadm join ..." binivîsin, ya ku ji we tê xwestin ku hûn di dawiya derketinê de, an bi kêmanî nîşaneyên diyarkirî bikar bînin.

    • Ka em pêvekê (CNI) ji bo tora Pod saz bikin. Ez pêşniyar dikim ku bikar bînin Calico. Dibe ku bêtir populer Flannel pirsgirêkên lihevhatina bi nftable, erê û Calico - yekane pêkanîna CNI ji hêla projeyê ve hatî pêşniyar kirin û bi tevahî ceribandin Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Ji bo girêdana girêkek karker bi koma me re, hûn hewce ne ku wê li gorî rêwerzên 1 û 2 mîheng bikin, an jî bikar bînin nivîs, dûv re emrê ji derana "kubeadm init..." ya ku me di gava berê de nivîsîbû bimeşîne:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Ka em kontrol bikin ka koma me dest pê kiriye û dest bi xebatê kiriye:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Amade! Hûn dikarin berê li ser komê K8s-ê bargiraniyê mêvandar bikin.

Çi li benda me ye

Ez hêvî dikim ku rêwerzên jorîn ji we re bûne alîkar ku hûn hin dem û nervan xilas bikin.
Encama pêvajoyên ku di pîşesaziyê de diqewimin bi gelemperî girêdayî ye ka ew çawa ji hêla piraniya bikarhênerên dawîn û pêşdebirên nermalava din ve di navgîniya têkildar de têne pejirandin. Hîn bi tevahî ne diyar e ku însiyatîfa OCI dê di çend salan de ber bi çi ve bibe, lê em ê bi kêfxweşî temaşe bikin. Hûn dikarin nêrîna xwe niha di şîroveyan de parve bikin.

Bi rê ve bimînin!

Ev gotar bi saya çavkaniyên jêrîn xuya bû:



Source: www.habr.com

Add a comment