Ang CRI-O isip kapuli sa Docker isip usa ka executable nga palibot alang sa Kubernetes: setup sa CentOS 8

Hello! Ang akong ngalan kay Sergey, ako si DevOps sa Surf. Ang departamento sa DevOps sa Surf nagtumong dili lamang sa pag-establisar sa interaksyon tali sa mga espesyalista ug paghiusa sa mga proseso sa trabaho, apan usab sa aktibong pagsiksik ug pagpatuman sa kasamtangang mga teknolohiya sa kaugalingon nga imprastraktura ug sa imprastraktura sa kustomer.

Sa ubos maghisgot ako og gamay mahitungod sa mga pagbag-o sa teknolohiya nga stack alang sa mga sudlanan nga among nasugatan samtang nagtuon sa pag-apod-apod CentOS 8 ug mahitungod sa unsa kini CRI-O ug kung unsaon pag-set up dayon ang usa ka executable environment para sa Kubernetes.

Ang CRI-O isip kapuli sa Docker isip usa ka executable nga palibot alang sa Kubernetes: setup sa CentOS 8

Ngano nga wala gilakip ang Docker sa CentOS 8?

Human sa pag-instalar sa pinakabag-o nga mayor nga pagpagawas RHEL 8 o CentOS 8 ang usa dili makapugong nga makamatikod: kini nga mga pag-apod-apod ug opisyal nga mga repositoryo wala maglangkob sa aplikasyon Docker, nga nag-ilis sa mga pakete sa ideolohiya ug praktikal podman, Buildah (naa sa pag-apod-apod pinaagi sa default) ug CRI-O. Kini tungod sa praktikal nga pagpatuman sa mga sumbanan nga naugmad, lakip sa ubang mga butang, sa Red Hat isip kabahin sa Open Container Initiative (OCI) nga proyekto.

Ang tumong sa OCI, nga kabahin sa The Linux Foundation, mao ang paghimo og open industry standards alang sa container formats ug runtimes nga makasulbad sa daghang problema sa makausa. Una, wala nila gisupak ang pilosopiya sa Linux (pananglitan, sa bahin nga ang matag programa kinahanglan maghimo usa ka aksyon, ug Docker usa ka matang sa all-in-one nga kombinasyon). Ikaduha, mahimo nilang mawagtang ang tanan nga naglungtad nga mga kakulangan sa software Docker. Ikatulo, sila mahimong hingpit nga nahiuyon sa mga kinahanglanon sa negosyo sa nanguna nga komersyal nga mga plataporma alang sa pag-deploy, pagdumala ug pag-alagad sa mga containerized nga aplikasyon (pananglitan, Red Hat OpenShift).

mga kakulangan Docker ug ang mga bentaha sa bag-ong software gihulagway na sa pipila ka detalye sa kini nga artikulo, ug usa ka detalyado nga paghulagway sa tibuok nga software stack nga gitanyag sulod sa OCI nga proyekto ug ang mga bahin sa arkitektura niini makita sa opisyal nga dokumentasyon ug mga artikulo gikan sa Red Hat mismo (dili daotan nga artikulo sa Red Hat blog) ug sa ikatulo nga partido mga review.

Importante nga timan-an kung unsa nga gamit ang mga sangkap sa gisugyot nga stack:

  • podman - direkta nga interaksyon sa mga sudlanan ug pagtipig sa imahe pinaagi sa proseso sa runC;
  • Buildah - asembliya ug pag-upload sa mga imahe sa rehistro;
  • CRI-O β€” usa ka executable nga palibot alang sa container orchestration system (pananglitan, Kubernetes).

Sa akong hunahuna nga aron masabtan ang kinatibuk-ang laraw sa interaksyon tali sa mga sangkap sa stack, maayo nga maghatag usa ka diagram sa koneksyon dinhi. Kubernetes c daganC ug ubos nga lebel nga mga librarya nga naggamit CRI-O:

Ang CRI-O isip kapuli sa Docker isip usa ka executable nga palibot alang sa Kubernetes: setup sa CentOS 8

CRI-O ΠΈ Kubernetes pagsunod sa parehas nga siklo sa pagpagawas ug suporta (ang compatibility matrix yano ra kaayo: dagkong mga bersyon Kubernetes ΠΈ CRI-O coincide), ug kini, nga gikonsiderar ang pagtutok sa kompleto ug komprehensibo nga pagsulay sa operasyon niini nga stack sa mga developers, naghatag kanato sa katungod sa pagpaabut sa labing taas nga makab-ot nga kalig-on sa operasyon ubos sa bisan unsa nga paggamit nga mga sitwasyon (relative lightness usab mapuslanon dinhi. CRI-O itandi sa Docker tungod sa gituyo nga limitasyon sa pagpaandar).

Sa diha nga pag-instalar Kubernetes "tama nga paagi" nga paagi (sumala sa OCI, siyempre) gamit CRI-O sa CentOS 8 Nasugatan namo ang pipila ka ginagmay nga mga kalisdanan, nga, bisan pa niana, malampuson namo nga nabuntog. Malipayon ako nga ipaambit kanimo ang mga panudlo sa pag-install ug pag-configure, nga sa kinatibuk-an molungtad mga 10 minuto.

Giunsa ang pag-deploy sa Kubernetes sa CentOS 8 gamit ang CRI-O framework

Kinahanglanon: presensya sa labing menos usa ka host (2 core, 4 GB RAM, labing menos 15 GB nga pagtipig) nga adunay na-install CentOS 8 (Girekomenda ang profile sa pag-install sa "Server", ingon man ang mga entri para niini sa lokal nga DNS (ingon usa ka katapusan nga paagi, mahimo nimong makuha pinaagi sa usa ka entry sa /etc/hosts). Ug ayaw kalimot disable swap.

Gihimo namo ang tanang operasyon sa host isip root user, pag-amping.

  1. Sa unang lakang, atong i-configure ang OS, i-install ug i-configure ang preliminary dependencies para sa CRI-O.
    • Atong i-update ang OS:
      dnf -y update
      

    • Sunod kinahanglan nimo nga i-configure ang firewall ug SELinux. Dinhi ang tanan nagdepende sa palibot diin magtrabaho ang among host o host. Mahimo nimong i-set up ang usa ka firewall sumala sa mga rekomendasyon gikan sa dokumentasyon, o, kung naa ka sa usa ka kasaligan nga network o naggamit usa ka third-party nga firewall, usba ang default zone sa kasaligan o i-off ang firewall:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Aron mapalong ang firewall mahimo nimong gamiton ang mosunod nga sugo:

      systemctl disable --now firewalld
      

      Ang SELinux kinahanglan nga i-off o ibalhin sa "permissive" mode:

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

    • I-load ang gikinahanglan nga kernel modules ug packages, i-configure ang automatic loading sa "br_netfilter" module sa pagsugod sa sistema:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Aron ma-aktibo ang pagpasa sa packet ug husto nga pagproseso sa trapiko, buhaton namon ang angay nga mga 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
      

      i-apply ang mga setting nga gihimo:

      sysctl --system

    • itakda ang gikinahanglan nga bersyon CRI-O (dako nga bersyon CRI-O, sama sa nahisgotan na, ipares ang gikinahanglan nga bersyon Kubernetes), sukad sa pinakabag-o nga stable nga bersyon Kubernetes karon 1.18:
      export REQUIRED_VERSION=1.18
      

      idugang ang gikinahanglan nga mga repositoryo:

      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

    • karon mahimo na namon i-install CRI-O:
      dnf -y install cri-o
      

      Hatagi'g pagtagad ang una nga nuance nga among nasugatan sa panahon sa proseso sa pag-instalar: kinahanglan nimo nga i-edit ang configuration CRI-O sa wala pa magsugod ang serbisyo, tungod kay ang gikinahanglan nga sangkap sa conmon adunay lahi nga lokasyon kaysa sa gitakda:

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

      Karon mahimo nimong ma-aktibo ug masugdan ang daemon CRI-O:

      systemctl enable --now crio
      

      Mahimo nimong susihon ang kahimtang sa daemon:

      systemctl status crio
      

  2. Pag-instalar ug pagpaaktibo Kubernetes.
    • Atong idugang ang gikinahanglan nga repository:
      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
      

      Karon mahimo na namon i-install Kubernetes (bersyon 1.18, ingon sa gihisgutan sa ibabaw):

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

    • Ang ikaduha nga hinungdanon nga nuance: tungod kay wala kami mogamit usa ka daemon Docker, pero gigamit namo ang daemon CRI-O, sa wala pa ilunsad ug inisyal Kubernetes kinahanglan nimo nga buhaton ang angay nga mga setting sa file sa pag-configure /var/lib/kubelet/config.yaml, nga nahimo una ang gusto nga direktoryo:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Ang ikatulo nga importante nga punto nga atong masugatan sa panahon sa pag-instalar: bisan pa sa kamatuoran nga atong gipakita ang drayber nga gigamit cgroup, ug ang configuration niini pinaagi sa mga argumento nga gipasa kubelet kay outdated na (ingon sa klaro nga gipahayag sa dokumentasyon), kinahanglan namong idugang ang mga argumento sa file, kung dili ang among cluster dili masugdan:
      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

    • Karon mahimo na naton ma-aktibo ang daemon kubelet:
      sudo systemctl enable --now kubelet
      

      Aron ipasadya kontrol-eroplano o worker nodes sa mga minuto, mahimo nimong gamiton uban niini nga script.

  3. Panahon na aron masugdan ang among cluster.
    • Aron masugdan ang cluster, padagana ang command:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Siguruha nga isulat ang mando sa pag-apil sa cluster "kubeadm join ...", nga gihangyo kanimo nga gamiton sa katapusan sa output, o labing menos ang piho nga mga token.

    • Atong i-install ang plugin (CNI) para sa Pod network. Girekomenda ko ang paggamit Calico. Posible nga mas popular Flannel adunay mga isyu sa pagkaangay sa nftables, Oo ug Calico - ang bugtong pagpatuman sa CNI nga girekomenda ug hingpit nga nasulayan sa proyekto Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Aron makonektar ang usa ka worker node sa among cluster, kinahanglan nimo nga i-configure kini sumala sa mga panudlo 1 ug 2, o gamiton script, unya padagana ang sugo gikan sa β€œkubeadm init...” output nga among gisulat sa miaging lakang:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Atong susihon nga ang among cluster gisugdan ug nagsugod sa pagtrabaho:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Andam na! Mahimo ka nang mag-host sa mga payload sa imong K8s cluster.

Unsa ang naghulat kanato sa unahan

Nanghinaut ko nga ang mga instruksyon sa ibabaw nakatabang sa pagluwas kanimo sa pipila ka oras ug kakulba.
Ang sangputanan sa mga proseso nga nahitabo sa industriya kanunay nagdepende kung giunsa kini gidawat sa kadaghanan sa mga end user ug mga developer sa ubang software sa katugbang nga niche. Dili pa hingpit nga tin-aw kung unsa ang modala sa mga inisyatibo sa OCI sa pipila ka tuig, apan magtan-aw kami nga malipayon. Mahimo nimong ipaambit ang imong opinyon karon sa mga komento.

Magpadayon nga tune!

Kini nga artikulo migawas tungod sa mosunod nga mga tinubdan:



Source: www.habr.com

Idugang sa usa ka comment