CRI-O í stað Docker sem keyrsluumhverfi fyrir Kubernetes: uppsetning á CentOS 8

Halló! Ég heiti Sergey, ég er DevOps hjá Surf. DevOps deildin hjá Surf miðar ekki aðeins að því að koma á samskiptum milli sérfræðinga og samþætta vinnuferla, heldur einnig að rannsaka og innleiða núverandi tækni bæði í eigin innviðum og innviðum viðskiptavinarins.

Hér að neðan mun ég tala aðeins um breytingar á tæknistafla fyrir gáma sem við lentum í þegar við skoðuðum dreifinguna CentOS 8 og um hvað það er BÚÐU TIL ÞAÐ og hvernig á að setja fljótt upp keyranlegt umhverfi fyrir Kubernetes.

CRI-O í stað Docker sem keyrsluumhverfi fyrir Kubernetes: uppsetning á CentOS 8

Af hverju er Docker ekki innifalinn í CentOS 8?

Eftir að hafa sett upp nýjustu helstu útgáfurnar rhel 8 eða CentOS 8 maður getur ekki annað en tekið eftir: þessar dreifingar og opinberar geymslur innihalda ekki forritið Docker, sem hugmyndafræðilega og virknilega koma í stað pakka Podman, Byggja (sjálfgefið til staðar í dreifingunni) og BÚÐU TIL ÞAÐ. Þetta er vegna hagnýtrar innleiðingar staðla sem þróaðir voru meðal annars af Red Hat sem hluta af Open Container Initiative (OCI) verkefninu.

Markmið OCI, sem er hluti af Linux Foundation, er að búa til opna iðnaðarstaðla fyrir gámasnið og keyrslutíma sem leysa nokkur vandamál í einu. Í fyrsta lagi voru þeir ekki í mótsögn við heimspeki Linux (til dæmis í þeim hluta að hvert forrit ætti að framkvæma eina aðgerð, og Docker er eins konar allt-í-einn blanda). Í öðru lagi gætu þeir útrýmt öllum núverandi annmörkum í hugbúnaðinum Docker. Í þriðja lagi myndu þau vera fullkomlega samhæf við viðskiptakröfur leiðandi viðskiptakerfa til að dreifa, stjórna og þjóna gámaforritum (til dæmis Red Hat OpenShift).

Takmarkanir Docker og kostum nýja hugbúnaðarins hefur þegar verið lýst í smáatriðum í Þessi grein, og nákvæma lýsingu á öllum hugbúnaðarstaflanum sem boðið er upp á innan OCI verkefnisins og byggingareiginleikum þess er að finna í opinberu skjölunum og greinum frá Red Hat sjálfum (ekki slæmt grein í Red Hat blogginu) og í þriðja aðila umsagnir.

Það er mikilvægt að hafa í huga hvaða virkni íhlutir fyrirhugaðs stafla hafa:

  • Podman — bein samskipti við ílát og myndgeymslu í gegnum runC ferlið;
  • Byggja — setja saman og hlaða upp myndum í skrárinn;
  • BÚÐU TIL ÞAÐ — keyranlegt umhverfi fyrir gámaskipunarkerfi (til dæmis Kubernetes).

Ég held að til að skilja almennt samspilskerfi milli íhluta staflans er ráðlegt að gefa upp tengingarmynd hér Kubernetes c runC og lág-stigi bókasöfn sem nota BÚÐU TIL ÞAÐ:

CRI-O í stað Docker sem keyrsluumhverfi fyrir Kubernetes: uppsetning á CentOS 8

BÚÐU TIL ÞAÐ и Kubernetes fylgja sömu útgáfu- og stuðningsferli (samhæfisfylki er mjög einfalt: helstu útgáfur Kubernetes и BÚÐU TIL ÞAÐ falla saman), og þetta, að teknu tilliti til áherslu á fullkomna og alhliða prófun á rekstri þessa stafla af hönnuðum, gefur okkur rétt til að búast við hámarks stöðugleika í rekstri við hvaða notkunarsvið sem er (hlutfallslegur léttleiki er einnig gagnlegur hér BÚÐU TIL ÞAÐ miðað við Docker vegna markvissar takmörkunar á virkni).

Þegar þú setur upp Kubernetes "rétt leið" leið (samkvæmt OCI, auðvitað) með því að nota BÚÐU TIL ÞAÐ á CentOS 8 Við lentum í smávægilegum erfiðleikum sem okkur tókst þó að sigrast á. Ég mun með ánægju deila með þér uppsetningar- og stillingarleiðbeiningum, sem samtals mun taka um 10 mínútur.

Hvernig á að dreifa Kubernetes á CentOS 8 með CRI-O ramma

Forkröfur: að minnsta kosti einn gestgjafi (2 kjarna, 4 GB vinnsluminni, að minnsta kosti 15 GB geymsla) með uppsettum CentOS 8 (Mælt er með „Server“ uppsetningarsniðinu), sem og færslum fyrir það í staðbundnu DNS (sem síðasta úrræði geturðu komist af með færslu í /etc/hosts). Og ekki gleyma slökkva á skiptum.

Við framkvæmum allar aðgerðir á gestgjafanum sem rótnotanda, farðu varlega.

  1. Í fyrsta skrefi munum við stilla stýrikerfið, setja upp og stilla bráðabirgðaháðar fyrir CRI-O.
    • Við skulum uppfæra stýrikerfið:
      dnf -y update
      

    • Næst þarftu að stilla eldvegginn og SELinux. Hér veltur allt á umhverfinu sem gestgjafi okkar eða gestgjafar munu starfa í. Þú getur annað hvort sett upp eldvegg í samræmi við ráðleggingar frá skjöl, eða, ef þú ert á traustu neti eða notar eldvegg frá þriðja aðila, breyttu sjálfgefna svæði í traust eða slökktu á eldveggnum:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Til að slökkva á eldveggnum geturðu notað eftirfarandi skipun:

      systemctl disable --now firewalld
      

      Það þarf að slökkva á SELinux eða skipta yfir í „heimila“ stillingu:

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

    • Hladdu nauðsynlegum kjarnaeiningum og pakka, stilltu sjálfvirka hleðslu á „br_netfilter“ einingunni við ræsingu kerfisins:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Til að virkja áframsendingu pakka og rétta umferðarvinnslu munum við gera viðeigandi stillingar:
      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
      

      notaðu stillingarnar sem gerðar eru:

      sysctl --system

    • stilltu nauðsynlega útgáfu BÚÐU TIL ÞAÐ (meiri útgáfa BÚÐU TIL ÞAÐ, eins og áður hefur verið nefnt, passa við nauðsynlega útgáfu Kubernetes), frá nýjustu stöðugu útgáfunni Kubernetes núna 1.18:
      export REQUIRED_VERSION=1.18
      

      bæta við nauðsynlegum geymslum:

      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

    • nú getum við sett upp BÚÐU TIL ÞAÐ:
      dnf -y install cri-o
      

      Gefðu gaum að fyrsta blæbrigðinu sem við lendum í uppsetningarferlinu: þú þarft að breyta stillingunum BÚÐU TIL ÞAÐ áður en þjónustan er hafin, þar sem nauðsynlegur conmon íhlutur hefur aðra staðsetningu en tilgreindur:

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

      Nú geturðu virkjað og ræst púkann BÚÐU TIL ÞAÐ:

      systemctl enable --now crio
      

      Þú getur athugað stöðu púkans:

      systemctl status crio
      

  2. Uppsetning og virkjun Kubernetes.
    • Við skulum bæta við nauðsynlegri geymslu:
      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
      

      Nú getum við sett upp Kubernetes (útgáfa 1.18, eins og getið er hér að ofan):

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

    • Annað mikilvæga litbrigðið: þar sem við notum ekki púka Docker, en við notum púkann BÚÐU TIL ÞAÐ, fyrir ræsingu og frumstillingu Kubernetes þú þarft að gera viðeigandi stillingar í stillingarskránni /var/lib/kubelet/config.yaml, eftir að hafa fyrst búið til viðeigandi möppu:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Þriðja mikilvæga atriðið sem við lendum í uppsetningu: þrátt fyrir að við höfum gefið til kynna ökumanninn sem notaður er cgroup, og uppsetningu þess í gegnum rökin sem send voru kúbelet er gamaldags (eins og er skýrt tekið fram í skjölunum), þurfum við að bæta við rökum við skrána, annars verður þyrpingin okkar ekki frumstillt:
      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

    • Nú getum við virkjað púkann kúbelet:
      sudo systemctl enable --now kubelet
      

      Að sérsníða stjórn-flugvél eða starfsmaður hnúta á nokkrum mínútum, þú getur notað með þessu handriti.

  3. Það er kominn tími til að frumstilla klasann okkar.
    • Til að frumstilla þyrpinguna skaltu keyra skipunina:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Vertu viss um að skrifa niður skipunina til að taka þátt í þyrpingunni „kubeadm join …“, sem þú ert beðinn um að nota í lok úttaksins, eða að minnsta kosti tilgreinda táknin.

    • Setjum upp viðbótina (CNI) fyrir Pod netið. Ég mæli með að nota Calico. Mögulega vinsælli Flannel er með samhæfnisvandamál við nftablesog já Calico - eina CNI innleiðingin sem verkefnið mælir með og prófuð að fullu Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Til að tengja vinnuhnút við klasann okkar þarftu að stilla hann samkvæmt leiðbeiningum 1 og 2, eða nota handrit, keyrðu síðan skipunina frá „kubeadm init...“ úttakinu sem við skrifuðum niður í fyrra skrefi:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Við skulum athuga hvort klasinn okkar sé frumstilltur og byrjaður að virka:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Tilbúið! Þú getur nú þegar hýst hleðslu á K8s klasanum þínum.

Hvað bíður okkar framundan

Ég vona að leiðbeiningarnar hér að ofan hafi sparað þér tíma og taugar.
Niðurstaða ferla sem eiga sér stað í greininni veltur oft á því hvernig þeir eru samþykktir af meginhluta notenda og þróunaraðila annars hugbúnaðar í samsvarandi sess. Það er enn ekki alveg ljóst til hvers OCI frumkvæðin munu leiða til eftir nokkur ár, en við munum fylgjast með með ánægju. Þú getur deilt skoðun þinni núna í athugasemdunum.

Haltu áfram!

Þessi grein birtist þökk sé eftirfarandi heimildum:



Heimild: www.habr.com

Bæta við athugasemd