CRI-O yn lle Docker fel amgylchedd amser rhedeg ar gyfer Kubernetes: gosod ar CentOS 8

Helo! Fy enw i yw Sergey, DevOps ydw i yn Surf. Mae adran DevOps yn Surf yn anelu nid yn unig at sefydlu rhyngweithio rhwng arbenigwyr ac integreiddio prosesau gwaith, ond hefyd i fynd ati i ymchwilio a gweithredu technolegau cyfredol yn ei seilwaith ei hun ac yn seilwaith y cwsmer.

Isod byddaf yn siarad ychydig am y newidiadau yn y pentwr technoleg ar gyfer cynwysyddion y daethom ar eu traws wrth astudio'r dosbarthiad CentOS 8 ac am yr hyn ydyw CRI-O a sut i sefydlu amgylchedd gweithredadwy yn gyflym ar gyfer Kubernetes.

CRI-O yn lle Docker fel amgylchedd amser rhedeg ar gyfer Kubernetes: gosod ar CentOS 8

Pam nad yw Docker wedi'i gynnwys yn CentOS 8?

Ar ôl gosod y datganiadau mawr diweddaraf RHEL 8 neu CentOS 8 ni all un helpu ond sylwi: nid yw'r dosraniadau a'r ystorfeydd swyddogol hyn yn cynnwys y cais Docker, sy'n disodli pecynnau yn ideolegol ac yn swyddogaethol podman, Adeilada (yn bresennol yn y dosbarthiad yn ddiofyn) a CRI-O. Mae hyn oherwydd gweithrediad ymarferol y safonau a ddatblygwyd, ymhlith pethau eraill, gan Red Hat fel rhan o brosiect Menter Cynhwysydd Agored (OCI).

Nod OCI, sy'n rhan o The Linux Foundation, yw creu safonau diwydiant agored ar gyfer fformatau cynwysyddion ac amseroedd rhedeg sy'n datrys sawl problem ar unwaith. Yn gyntaf, nid oeddent yn gwrth-ddweud athroniaeth Linux (er enghraifft, yn y rhan y dylai pob rhaglen gyflawni un weithred, a Docker yn fath o gyfuniad popeth-mewn-un). Yn ail, gallent ddileu'r holl ddiffygion presennol yn y meddalwedd Docker. Yn drydydd, byddent yn gwbl gydnaws â gofynion busnes llwyfannau masnachol blaenllaw ar gyfer defnyddio, rheoli a gwasanaethu cymwysiadau mewn cynwysyddion (er enghraifft, Red Hat OpenShift).

Cyfyngiadau Docker ac mae manteision y feddalwedd newydd eisoes wedi'u disgrifio'n eithaf manwl yn Mae'r erthygl hon yn, a disgrifiad manwl o'r pentwr meddalwedd cyfan a gynigir o fewn y prosiect OCI a'i nodweddion pensaernïol i'w gweld yn y dogfennau swyddogol ac erthyglau gan Red Hat ei hun (nid drwg erthygl mewn blog Red Hat) ac mewn trydydd parti adolygiadau.

Mae'n bwysig nodi pa swyddogaethau sydd gan gydrannau'r pentwr arfaethedig:

  • podman — rhyngweithio uniongyrchol â chynwysyddion a storio delweddau trwy'r broses runC;
  • Adeilada — cydosod a llwytho delweddau i'r gofrestrfa;
  • CRI-O — amgylchedd gweithredadwy ar gyfer systemau offeryniaeth cynwysyddion (er enghraifft, Kubernetes).

Rwy'n meddwl, er mwyn deall y cynllun cyffredinol o ryngweithio rhwng cydrannau'r pentwr, ei bod yn ddoeth darparu diagram cysylltiad yma. Kubernetes c rhedegC a llyfrgelloedd lefel isel yn defnyddio CRI-O:

CRI-O yn lle Docker fel amgylchedd amser rhedeg ar gyfer Kubernetes: gosod ar CentOS 8

CRI-O и Kubernetes cadw at yr un cylch rhyddhau a chymorth (mae'r matrics cydweddoldeb yn syml iawn: fersiynau mawr Kubernetes и CRI-O cyd-fynd), ac mae hyn, gan ystyried y ffocws ar brofi cyflawn a chynhwysfawr o weithrediad y pentwr hwn gan ddatblygwyr, yn rhoi'r hawl i ni ddisgwyl y sefydlogrwydd mwyaf posibl ar waith o dan unrhyw senarios defnydd (mae ysgafnder cymharol hefyd yn fuddiol yma CRI-O o'i gymharu â Docker oherwydd cyfyngiad pwrpasol ar ymarferoldeb).

Wrth osod Kubernetes ffordd "iawn" (yn ôl OCI, wrth gwrs) gan ddefnyddio CRI-O ar CentOS 8 Daethom ar draws rhai mân anawsterau, ond fe wnaethom lwyddo i’w goresgyn. Byddaf yn hapus i rannu cyfarwyddiadau gosod a ffurfweddu gyda chi, a fydd yn cymryd tua 10 munud i gyd.

Sut i ddefnyddio Kubernetes ar CentOS 8 gan ddefnyddio'r fframwaith CRI-O

Rhagofynion: presenoldeb o leiaf un gwesteiwr (2 graidd, 4 GB RAM, o leiaf storfa 15 GB) gyda gosod CentOS 8 (argymhellir y proffil gosod “Gweinydd”), yn ogystal â chofnodion ar ei gyfer yn y DNS lleol (fel dewis olaf, gallwch fynd heibio gyda chofnod yn /etc/hosts). A pheidiwch ag anghofio analluogi cyfnewid.

Rydym yn perfformio'r holl weithrediadau ar y gwesteiwr fel y defnyddiwr gwraidd, byddwch yn ofalus.

  1. Yn y cam cyntaf, byddwn yn ffurfweddu'r OS, yn gosod ac yn ffurfweddu dibyniaethau rhagarweiniol ar gyfer CRI-O.
    • Gadewch i ni ddiweddaru'r OS:
      dnf -y update
      

    • Nesaf mae angen i chi ffurfweddu'r wal dân a SELinux. Yma mae popeth yn dibynnu ar yr amgylchedd y bydd ein gwesteiwr neu'n gwesteiwr yn gweithio ynddo. Gallwch naill ai sefydlu wal dân yn unol â'r argymhellion gan dogfennaeth, neu, os ydych ar rwydwaith dibynadwy neu'n defnyddio wal dân trydydd parti, newidiwch y parth rhagosodedig i'r wal dân y gellir ymddiried ynddo neu trowch oddi ar:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      I ddiffodd y wal dân gallwch ddefnyddio'r gorchymyn canlynol:

      systemctl disable --now firewalld
      

      Mae angen diffodd SELinux neu ei newid i'r modd “caniataol”:

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

    • Llwythwch y modiwlau a'r pecynnau cnewyllyn angenrheidiol, ffurfweddwch lwytho'r modiwl “br_netfilter” yn awtomatig wrth gychwyn y system:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Er mwyn ysgogi anfon pecynnau a phrosesu traffig cywir, byddwn yn gwneud y gosodiadau priodol:
      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
      

      cymhwyso'r gosodiadau a wnaed:

      sysctl --system

    • gosod y fersiwn gofynnol CRI-O (fersiwn mawr CRI-O, fel y crybwyllwyd eisoes, yn cyd-fynd â'r fersiwn ofynnol Kubernetes), ers y fersiwn sefydlog ddiweddaraf Kubernetes 1.18 ar hyn o bryd:
      export REQUIRED_VERSION=1.18
      

      ychwanegu'r storfeydd angenrheidiol:

      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

    • nawr gallwn osod CRI-O:
      dnf -y install cri-o
      

      Rhowch sylw i'r naws cyntaf y deuwn ar ei draws yn ystod y broses osod: mae angen i chi olygu'r ffurfweddiad CRI-O cyn dechrau'r gwasanaeth, gan fod gan y gydran conmon ofynnol leoliad gwahanol i'r un penodedig:

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

      Nawr gallwch chi actifadu a dechrau'r daemon CRI-O:

      systemctl enable --now crio
      

      Gallwch wirio statws yr ellyll:

      systemctl status crio
      

  2. Gosod ac actifadu Kubernetes.
    • Gadewch i ni ychwanegu'r storfa ofynnol:
      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
      

      Nawr gallwn osod Kubernetes (fersiwn 1.18, fel y crybwyllwyd uchod):

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

    • Yr ail naws bwysig: gan nad ydym yn defnyddio ellyll Docker, ond defnyddiwn yr ellyll CRI-O, cyn lansio a chychwyn Kubernetes mae angen i chi wneud y gosodiadau priodol yn y ffeil ffurfweddu /var/lib/kubelet/config.yaml, ar ôl creu'r cyfeiriadur dymunol yn gyntaf:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Y trydydd pwynt pwysig yr ydym yn dod ar ei draws yn ystod y gosodiad: er gwaethaf y ffaith ein bod wedi nodi'r gyrrwr a ddefnyddiwyd cgroup, a'i gyfluniad trwy y dadleuon a basiwyd cubelet yn hen ffasiwn (fel y nodir yn benodol yn y ddogfennaeth), mae angen i ni ychwanegu dadleuon at y ffeil, fel arall ni fydd ein clwstwr yn cael ei gychwyn:
      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

    • Nawr gallwn actifadu'r ellyll cubelet:
      sudo systemctl enable --now kubelet
      

      I addasu rheoli-awyren neu gweithiwr nodau mewn munudau, gallwch chi eu defnyddio gyda'r sgript hon.

  3. Mae'n bryd cychwyn ein clwstwr.
    • I gychwyn y clwstwr, rhedwch y gorchymyn:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Gwnewch yn siŵr eich bod yn ysgrifennu'r gorchymyn i ymuno â'r clwstwr “kubeadm join…”, y gofynnir i chi ei ddefnyddio ar ddiwedd yr allbwn, neu o leiaf y tocynnau penodedig.

    • Gadewch i ni osod yr ategyn (CNI) ar gyfer y rhwydwaith Pod. Rwy'n argymell defnyddio Calico. Mwy poblogaidd o bosib Flannel â phroblemau cydnawsedd â nftables, ie a Calico - yr unig weithrediad CNI a argymhellwyd ac a brofwyd yn llawn gan y prosiect Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • I gysylltu nod gweithiwr â'n clwstwr, mae angen i chi ei ffurfweddu yn unol â chyfarwyddiadau 1 a 2, neu defnyddiwch sgript, yna rhedeg y gorchymyn o'r allbwn “kubeadm init...” a ysgrifennwyd gennym yn y cam blaenorol:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Gadewch i ni wirio bod ein clwstwr wedi'i gychwyn a'i fod wedi dechrau gweithio:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Barod! Gallwch chi eisoes gynnal llwythi tâl ar eich clwstwr K8s.

Beth sy'n ein disgwyl ymlaen

Gobeithio bod y cyfarwyddiadau uchod wedi helpu i arbed peth amser a nerfau i chi.
Mae canlyniad prosesau sy'n digwydd yn y diwydiant yn aml yn dibynnu ar sut y cânt eu derbyn gan y mwyafrif o ddefnyddwyr terfynol a datblygwyr meddalwedd arall yn y gilfach gyfatebol. Nid yw'n gwbl glir eto beth fydd mentrau OCI yn arwain ato mewn ychydig flynyddoedd, ond byddwn yn gwylio gyda phleser. Gallwch chi rannu eich barn ar hyn o bryd yn y sylwadau.

Arhoswch tuned!

Ymddangosodd yr erthygl hon diolch i'r ffynonellau canlynol:



Ffynhonnell: hab.com

Ychwanegu sylw