CRI-O bilang isang kapalit para sa Docker bilang isang runtime na kapaligiran para sa Kubernetes: setup sa CentOS 8

Kamusta! Ang pangalan ko ay Sergey, ako ay DevOps sa Surf. Nilalayon ng departamento ng DevOps sa Surf na hindi lamang magtatag ng pakikipag-ugnayan sa pagitan ng mga espesyalista at pagsamahin ang mga proseso ng trabaho, kundi pati na rin ang aktibong pagsasaliksik at pagpapatupad ng mga kasalukuyang teknolohiya kapwa sa sarili nitong imprastraktura at sa imprastraktura ng customer.

Sa ibaba ay magsasalita ako ng kaunti tungkol sa mga pagbabago sa stack ng teknolohiya para sa mga lalagyan na aming nakatagpo habang pinag-aaralan ang pamamahagi CentOS 8 at tungkol sa kung ano ito CRI-O at kung paano mabilis na mag-set up ng isang executable na kapaligiran para sa Kubernetes.

CRI-O bilang isang kapalit para sa Docker bilang isang runtime na kapaligiran para sa Kubernetes: setup sa CentOS 8

Bakit hindi kasama ang Docker sa CentOS 8?

Pagkatapos i-install ang pinakabagong mga pangunahing release RHEL 8 o CentOS 8 hindi maaaring hindi mapansin ng isa: ang mga distribusyon at opisyal na repository na ito ay hindi naglalaman ng application Manggagawa sa pantalan, na pinapalitan ng ideological at functionally ang mga package podman, Buildah (naroroon sa pamamahagi bilang default) at CRI-O. Ito ay dahil sa praktikal na pagpapatupad ng mga pamantayang binuo, bukod sa iba pang mga bagay, ng Red Hat bilang bahagi ng proyektong Open Container Initiative (OCI).

Ang layunin ng OCI, na bahagi ng The Linux Foundation, ay lumikha ng mga bukas na pamantayan sa industriya para sa mga format ng container at runtime na lumulutas ng ilang problema nang sabay-sabay. Una, hindi nila sinalungat ang pilosopiya ng Linux (halimbawa, sa bahagi na ang bawat programa ay dapat magsagawa ng isang aksyon, at Manggagawa sa pantalan ay isang uri ng all-in-one na pagsasama). Pangalawa, maaari nilang alisin ang lahat ng umiiral na mga kakulangan sa software Manggagawa sa pantalan. Pangatlo, magiging ganap silang tugma sa mga kinakailangan sa negosyo ng nangungunang mga komersyal na platform para sa pag-deploy, pamamahala at paghahatid ng mga containerized na application (halimbawa, Red Hat OpenShift).

Mga hangganan Manggagawa sa pantalan at ang mga pakinabang ng bagong software ay inilarawan na sa ilang detalye sa artikulong ito, at isang detalyadong paglalarawan ng buong stack ng software na inaalok sa loob ng proyekto ng OCI at ang mga tampok na arkitektura nito ay matatagpuan sa opisyal na dokumentasyon at mga artikulo mula sa Red Hat mismo (hindi masama artikulo sa Red Hat blog) at sa third-party mga pagsusuri.

Mahalagang tandaan kung anong functionality mayroon ang mga bahagi ng iminungkahing stack:

  • podman β€” direktang pakikipag-ugnayan sa mga lalagyan at imbakan ng imahe sa pamamagitan ng proseso ng runC;
  • Buildah β€” pagpupulong at pag-upload ng mga larawan sa pagpapatala;
  • CRI-O β€” isang executable na kapaligiran para sa mga container orchestration system (halimbawa, Kubernetes).

Sa palagay ko, upang maunawaan ang pangkalahatang pamamaraan ng pakikipag-ugnayan sa pagitan ng mga bahagi ng stack, ipinapayong magbigay ng isang diagram ng koneksyon dito Kubernetes c tumakboC at mababang antas na mga aklatan na gumagamit CRI-O:

CRI-O bilang isang kapalit para sa Docker bilang isang runtime na kapaligiran para sa Kubernetes: setup sa CentOS 8

CRI-O ΠΈ Kubernetes sumunod sa parehong ikot ng paglabas at suporta (ang compatibility matrix ay napakasimple: major versions Kubernetes ΠΈ CRI-O coincide), at ito, na isinasaalang-alang ang pagtuon sa kumpleto at komprehensibong pagsubok ng pagpapatakbo ng stack na ito ng mga developer, ay nagbibigay sa amin ng karapatang asahan ang maximum na matamo na katatagan sa operasyon sa ilalim ng anumang mga sitwasyon ng paggamit (kapaki-pakinabang din ang kamag-anak dito. CRI-O kumpara sa Manggagawa sa pantalan dahil sa may layuning limitasyon ng pag-andar).

Kapag nag-i-install Kubernetes "tamang paraan" na paraan (ayon sa OCI, siyempre) gamit CRI-O sa CentOS 8 Nakatagpo kami ng ilang maliliit na paghihirap, na, gayunpaman, matagumpay naming nalampasan. Ikalulugod kong ibahagi sa iyo ang mga tagubilin sa pag-install at pagsasaayos, na sa kabuuan ay tatagal ng mga 10 minuto.

Paano i-deploy ang Kubernetes sa CentOS 8 gamit ang CRI-O framework

Mga kinakailangan: pagkakaroon ng hindi bababa sa isang host (2 core, 4 GB RAM, storage space na hindi bababa sa 15 GB) na may naka-install CentOS 8 (Inirerekomenda ang profile sa pag-install ng "Server"), pati na rin ang mga entry para dito sa lokal na DNS (bilang isang huling paraan, maaari kang makakuha ng isang entry sa /etc/hosts). At huwag kalimutan huwag paganahin ang pagpapalit.

Ginagawa namin ang lahat ng mga operasyon sa host bilang root user, mag-ingat.

  1. Sa unang hakbang, iko-configure namin ang OS, i-install at i-configure ang mga paunang dependencies para sa CRI-O.
    • I-update natin ang OS:
      dnf -y update
      

    • Susunod na kailangan mong i-configure ang firewall at SELinux. Dito nakasalalay ang lahat sa kapaligiran kung saan gagana ang aming host o host. Maaari kang mag-set up ng firewall ayon sa mga rekomendasyon mula sa dokumentasyon, o, kung ikaw ay nasa isang pinagkakatiwalaang network o gumagamit ng isang third-party na firewall, baguhin ang default na zone sa pinagkakatiwalaan o i-off ang firewall:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Upang i-off ang firewall maaari mong gamitin ang sumusunod na command:

      systemctl disable --now firewalld
      

      Kailangang i-off o ilipat sa "permissive" mode ang SELinux:

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

    • I-load ang mga kinakailangang kernel module at package, i-configure ang awtomatikong pag-load ng "br_netfilter" module sa system startup:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Para i-activate ang packet forwarding at tamang pagpoproseso ng trapiko, gagawin namin ang mga naaangkop na setting:
      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
      

      ilapat ang mga setting na ginawa:

      sysctl --system

    • itakda ang kinakailangang bersyon CRI-O (pangunahing bersyon CRI-O, tulad ng nabanggit na, tumugma sa kinakailangang bersyon Kubernetes), mula noong pinakabagong stable na bersyon Kubernetes kasalukuyang 1.18:
      export REQUIRED_VERSION=1.18
      

      idagdag ang mga kinakailangang repository:

      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

    • ngayon ay maaari naming i-install CRI-O:
      dnf -y install cri-o
      

      Bigyang-pansin ang unang nuance na nakatagpo namin sa panahon ng proseso ng pag-install: kailangan mong i-edit ang configuration CRI-O bago simulan ang serbisyo, dahil ang kinakailangang conmon component ay may ibang lokasyon kaysa sa tinukoy:

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

      Ngayon ay maaari mong i-activate at simulan ang daemon CRI-O:

      systemctl enable --now crio
      

      Maaari mong suriin ang katayuan ng daemon:

      systemctl status crio
      

  2. Pag-install at pag-activate Kubernetes.
    • Idagdag natin ang kinakailangang repositoryo:
      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
      

      Ngayon ay maaari naming i-install Kubernetes (bersyon 1.18, tulad ng nabanggit sa itaas):

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

    • Ang pangalawang mahalagang nuance: dahil hindi kami gumagamit ng isang daemon Manggagawa sa pantalan, ngunit ginagamit namin ang daemon CRI-O, bago ilunsad at simulan Kubernetes kailangan mong gawin ang naaangkop na mga setting sa file ng pagsasaayos /var/lib/kubelet/config.yaml, na ginawa muna ang nais na direktoryo:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Ang ikatlong mahalagang punto na nakatagpo namin sa panahon ng pag-install: sa kabila ng katotohanan na ipinahiwatig namin ang driver na ginamit cgroup, at ang pagsasaayos nito sa pamamagitan ng mga argumentong naipasa kubelet ay luma na (tulad ng tahasang nakasaad sa dokumentasyon), kailangan naming magdagdag ng mga argumento sa file, kung hindi, ang aming cluster ay hindi masisimulan:
      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

    • Ngayon ay maaari nating i-activate ang daemon kubelet:
      sudo systemctl enable --now kubelet
      

      Upang i-customize control-plane o manggagawa node sa ilang minuto, maaari mong gamitin kasama ang script na ito.

  3. Oras na para simulan ang aming cluster.
    • Upang simulan ang cluster, patakbuhin ang command:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Siguraduhing isulat ang command na sumali sa cluster na "kubeadm join ...", na hinihiling sa iyong gamitin sa dulo ng output, o hindi bababa sa tinukoy na mga token.

    • I-install natin ang plugin (CNI) para sa Pod network. Inirerekomenda ko ang paggamit kalenkor. Posibleng mas sikat pranela may mga isyu sa compatibility sa nftables, oo at oo kalenkor - ang tanging pagpapatupad ng CNI na inirerekomenda at ganap na sinubok ng proyekto Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Upang ikonekta ang isang worker node sa aming cluster, kailangan mong i-configure ito ayon sa mga tagubilin 1 at 2, o gamitin iskrip, pagkatapos ay patakbuhin ang command mula sa "kubeadm init..." na output na isinulat namin sa nakaraang hakbang:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Tingnan natin kung ang aming cluster ay nasimulan at nagsimulang gumana:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    handa na! Maaari ka nang mag-host ng mga payload sa iyong K8s cluster.

Ano ang naghihintay sa amin sa unahan

Umaasa ako na ang mga tagubilin sa itaas ay nakatulong sa iyo na makatipid ng ilang oras at nerbiyos.
Ang kinalabasan ng mga prosesong nagaganap sa industriya ay kadalasang nakadepende sa kung paano sila tinatanggap ng karamihan ng mga end user at developer ng iba pang software sa kaukulang niche. Hindi pa ganap na malinaw kung ano ang hahantong sa mga hakbangin ng OCI sa loob ng ilang taon, ngunit manonood kami nang may kasiyahan. Maaari mong ibahagi ang iyong opinyon ngayon sa mga komento.

Manatiling nakatutok!

Lumitaw ang artikulong ito salamat sa mga sumusunod na mapagkukunan:



Pinagmulan: www.habr.com

Magdagdag ng komento