CRI-O an àite Docker mar àrainneachd so-ghnìomhaichte airson Kubernetes: stèidheachadh air CentOS 8

Halò! Is e m ’ainm Sergey, is mise DevOps aig Surf. Tha roinn DevOps aig Surf ag amas chan ann a-mhàin air eadar-obrachadh a stèidheachadh eadar eòlaichean agus pròiseasan obrach fhilleadh a-steach, ach cuideachd gus teicneòlasan gnàthach a sgrùdadh agus a bhuileachadh an dà chuid anns a ’bhun-structar aige fhèin agus ann am bun-structar an neach-ceannach.

Gu h-ìosal bruidhnidh mi beagan mu na h-atharrachaidhean anns a’ chruach teicneòlais airson soithichean ris an do choinnich sinn fhad ‘s a bha sinn a’ sgrùdadh an t-sgaoilidh CentOS 8 agus mu dheidhinn a tha e CRI-O agus mar as urrainn dhut àrainneachd so-ghnìomhaichte a stèidheachadh gu sgiobalta airson Kubernetes.

CRI-O an àite Docker mar àrainneachd so-ghnìomhaichte airson Kubernetes: stèidheachadh air CentOS 8

Carson nach eil Docker air a thoirt a-steach do CentOS 8?

Às deidh na prìomh sgaoilidhean as ùire a stàladh RHEL 8 no CentOS 8 chan urrainn dha duine cuideachadh ach mothachadh: chan eil an tagradh anns na sgaoilidhean agus na stòran oifigeil sin Docker, a thèid an àite pacaidean gu ideòlach agus gu gnìomh podman, Togah (an làthair anns an sgaoileadh gu bunaiteach) agus CRI-O. Tha seo mar thoradh air buileachadh practaigeach inbhean a chaidh a leasachadh, am measg rudan eile, le Red Hat mar phàirt den phròiseact Open Container Initiative (OCI).

Is e amas OCI, a tha na phàirt de The Linux Foundation, inbhean gnìomhachais fosgailte a chruthachadh airson cruthan soithichean agus amannan ruith a dh’ fhuasgladh grunn dhuilgheadasan aig an aon àm. An toiseach, cha robh iad a’ dol an aghaidh feallsanachd Linux (mar eisimpleir, anns a’ phàirt a bu chòir do gach prògram aon ghnìomh a dhèanamh, agus Docker Is e seòrsa de mheasgachadh uile-ann-aon). San dàrna h-àite, dh'fhaodadh iad cuir às do na h-uireasbhaidhean a th 'ann mar-thà anns a' bhathar-bhog Docker. San treas àite, bhiodh iad gu tur co-chòrdail ris na riatanasan gnìomhachais a tha air an suidheachadh le prìomh àrd-ùrlaran malairteach airson a bhith a’ cleachdadh, a’ riaghladh agus a’ frithealadh thagraidhean so-ghiùlain (mar eisimpleir, Red Hat OpenShift).

uireasbhaidhean Docker agus chaidh buannachdan a’ bhathar-bhog ùr a mhìneachadh gu mionaideach mu thràth ann an an artaigil seo, agus gheibhear tuairisgeul mionaideach air a’ chruach bathar-bog gu lèir a tha air a thabhann taobh a-staigh pròiseact OCI agus na feartan ailtireil aige anns na sgrìobhainnean oifigeil agus artaigilean bho Red Hat fhèin (chan e droch artaigil ann am blog Red Hat) agus ann an treas-phàrtaidh lèirmheasan.

Tha e cudromach toirt fa-near dè an comas-gnìomh a tha aig na pàirtean den stac a thathar a’ moladh:

  • podman - eadar-obrachadh dìreach le soithichean agus stòradh ìomhaighean tron ​​​​phròiseas runC;
  • Togah - cruinneachadh agus luchdachadh suas ìomhaighean chun chlàr;
  • CRI-O - àrainneachd so-ghnìomhaichte airson siostaman orchestration container (mar eisimpleir, Kubernetes).

Tha mi a’ smaoineachadh, gus an sgeama coitcheann de eadar-obrachadh eadar na pàirtean den chruach a thuigsinn, gum biodh e ciallach diagram ceangail a thoirt seachad an seo Kubernetes c ruithC agus leabharlannan aig ìre ìosal a’ cleachdadh CRI-O:

CRI-O an àite Docker mar àrainneachd so-ghnìomhaichte airson Kubernetes: stèidheachadh air CentOS 8

CRI-O и Kubernetes cumail ris an aon chearcall fuasglaidh is taic (tha am matrix co-chòrdalachd gu math sìmplidh: dreachan mòra Kubernetes и CRI-O aig an aon àm), agus tha seo, a’ toirt aire don fhòcas air deuchainn iomlan agus farsaing air obrachadh a’ chruach seo le luchd-leasachaidh, a’ toirt dhuinn còir a bhith a’ dùileachadh an t-seasmhachd as àirde a ghabhas coileanadh ann an suidheachaidhean cleachdaidh sam bith (tha aotromachd coimeasach buannachdail an seo cuideachd. CRI-O an coimeas ri Docker mar thoradh air cuingealachadh adhbharail air comas-gnìomh).

Nuair a bhios tu a 'stàladh Kubernetes dòigh "ceart" (a rèir OCI, gu dearbh) a 'cleachdadh CRI-O air CentOS 8 Thachair sinn ri beagan dhuilgheadasan, a fhuair sinn thairis air, ge-tà. Bidh mi toilichte stiùireadh stàlaidh is rèiteachaidh a cho-roinn riut, a bheir timcheall air 10 mionaidean gu h-iomlan.

Mar a chleachdas tu Kubernetes air CentOS 8 a’ cleachdadh frèam CRI-O

Ro-ghoireasan riatanach: làthaireachd co-dhiù aon aoigh (2 cores, 4 GB RAM, co-dhiù 15 GB de stòradh) le stàladh CentOS 8 (tha am pròifil stàlaidh “Frithealaiche” air a mholadh), a bharrachd air inntrigidhean air a shon san DNS ionadail (mar an roghainn mu dheireadh, gheibh thu le inntrigeadh ann an /etc/hosts). Agus na dìochuimhnich cuir à comas suaip.

Bidh sinn a’ coileanadh a h-uile gnìomh air an òstair mar an neach-cleachdaidh bunaiteach, bi faiceallach.

  1. Anns a’ chiad cheum, rèitichidh sinn an OS, stàlaichidh agus rèiteachaidh sinn eisimeileachd tòiseachaidh airson CRI-O.
    • Nach ùraich sinn an OS:
      dnf -y update
      

    • An uairsin feumaidh tu am balla-teine ​​​​agus SELinux a rèiteachadh. An seo tha a h-uile dad an urra ris an àrainneachd anns am bi an aoigh no an luchd-aoigheachd againn ag obair. Faodaidh tu balla-teine ​​​​a stèidheachadh a rèir nam molaidhean bho sgrìobhainnean, no, ma tha thu air lìonra earbsach no ma chleachdas tu balla-teine ​​​​treas-phàrtaidh, atharraich an sòn bunaiteach gu bhith earbsach no cuir dheth am balla-teine:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Gus am balla-teine ​​​​a chuir dheth faodaidh tu an òrdugh a leanas a chleachdadh:

      systemctl disable --now firewalld
      

      Feumar SELinux a chuir dheth no atharrachadh gu modh “ceadachail”:

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

    • Luchdaich na modalan kernel agus na pacaidean riatanach, rèitich luchdachadh fèin-ghluasadach a ’mhodal“ br_netfilter ”aig toiseach tòiseachaidh an t-siostaim:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Gus cur air adhart pacaid agus làimhseachadh trafaic ceart, nì sinn na roghainnean iomchaidh:
      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
      

      cuir an gnìomh na roghainnean a chaidh a dhèanamh:

      sysctl --system

    • suidhich an dreach a tha a dhìth CRI-O (dreach mòr CRI-O, mar a chaidh ainmeachadh cheana, a 'maidseadh an dreach a tha a dhìth Kubernetes), bhon dreach seasmhach as ùire Kubernetes 1.18 an-dràsta:
      export REQUIRED_VERSION=1.18
      

      cuir ris na stòran-stòraidh riatanach:

      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

    • a-nis is urrainn dhuinn a stàladh CRI-O:
      dnf -y install cri-o
      

      Thoir aire don chiad nuance a choinnicheas sinn tron ​​​​phròiseas stàlaidh: feumar an rèiteachadh a dheasachadh CRI-O mus tòisich thu air an t-seirbheis, leis gu bheil àite eadar-dhealaichte aig a’ phàirt conmon a tha a dhìth bhon fhear ainmichte:

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

      A-nis faodaidh tu an daemon a ghnìomhachadh agus a thòiseachadh CRI-O:

      systemctl enable --now crio
      

      Faodaidh tu sgrùdadh a dhèanamh air inbhe an daemon:

      systemctl status crio
      

  2. Stàladh agus gnìomhachadh Kubernetes.
    • Nach cuir sinn ris an stòr-dàta a tha a dhìth:
      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
      

      A-nis is urrainn dhuinn a stàladh Kubernetes (dreach 1.18, mar a chaidh ainmeachadh gu h-àrd):

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

    • An dàrna nuance cudromach: leis nach bi sinn a’ cleachdadh daemon Docker, ach cleachdaidh sinn an deamhan CRI-O, mus tèid a chuir air bhog agus a thòiseachadh Kubernetes feumaidh tu na roghainnean iomchaidh a dhèanamh anns an fhaidhle rèiteachaidh /var/lib/kubelet/config.yaml, an dèidh dhut an eòlaire a tha thu ag iarraidh a chruthachadh:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • An treas puing chudromach a choinnicheas sinn aig àm an stàlaidh: a dh'aindeoin gu bheil sinn air an dràibhear a chaidh a chleachdadh a chomharrachadh cgroup, agus a rèiteachadh tro na h-argamaidean a chaidh seachad cuileag a tha seann-fhasanta (mar a tha air a ràdh gu soilleir anns na sgrìobhainnean), feumaidh sinn argamaidean a chuir ris an fhaidhle, air neo cha tèid ar cruinneachadh a thòiseachadh:
      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

    • A-nis is urrainn dhuinn an daemon a chuir an gnìomh cuileag:
      sudo systemctl enable --now kubelet
      

      Gus gnàthachadh itealan-smachd no neach-obrach nodan ann am mionaidean, faodaidh tu a chleachdadh leis an sgriobtar so.

  3. Tha an t-àm ann ar cruinneachadh a thòiseachadh.
    • Gus am brabhsair a thòiseachadh, ruith an àithne:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Dèan cinnteach gun sgrìobh thu sìos an àithne airson a dhol còmhla ris a’ bhuidheann “kubeadm join…”, a thèid iarraidh ort a chleachdadh aig deireadh an toraidh, no co-dhiù na comharran ainmichte.

    • Nach stàlaich sinn am plugan (CNI) airson lìonra Pod. Tha mi a 'moladh a chleachdadh Calico. 'S dòcha nas mòr-chòrdte Flannel tha cùisean co-chòrdalachd le nftables, tha agus Calico - an aon bhuileachadh CNI air a mholadh agus air a làn dhearbhadh leis a’ phròiseact Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Gus nód neach-obrach a cheangal ris a’ bhuidheann againn, feumaidh tu a rèiteachadh a rèir stiùireadh 1 agus 2, no cleachd sgriob, an uairsin ruith an àithne bhon toradh “kubeadm init...” a sgrìobh sinn sìos sa cheum roimhe:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Feuch an dèan sinn cinnteach gu bheil an cruinneachadh againn air a thòiseachadh agus air tòiseachadh ag obair:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Deiseil! Faodaidh tu mu thràth luchdan pàighidh a chumail air a’ bhuidheann K8s agad.

Dè tha a’ feitheamh oirnn air thoiseach

Tha mi an dòchas gun do chuidich an stiùireadh gu h-àrd beagan ùine agus nerves a shàbhaladh dhut.
Bidh toradh phròiseasan a tha a’ tachairt sa ghnìomhachas gu tric an urra ri mar a bhios a’ mhòr-chuid de luchd-cleachdaidh deireannach agus luchd-leasachaidh bathar-bog eile a’ gabhail riutha san àite iomchaidh. Chan eil e buileach soilleir fhathast dè a dh’ adhbhraicheas iomairtean OCI ann am beagan bhliadhnaichean, ach bidh sinn a’ coimhead le toileachas. Faodaidh tu do bheachd a cho-roinn an-dràsta anns na beachdan.

Cum sùil air!

Nochd an artaigil seo le taing dha na stòran a leanas:



Source: www.habr.com

Cuir beachd ann