CRI-O kā Docker aizstājējs kā Kubernetes izpildlaika vide: iestatÄ«Å”ana operētājsistēmā CentOS 8

Sveiki! Mani sauc Sergejs, es esmu DevOps at Surf. Surf DevOps nodaļas mērķis ir ne tikai veidot mijiedarbību starp speciālistiem un integrēt darba procesus, bet arī aktīvi pētīt un ieviest aktuālās tehnoloģijas gan savā infrastruktūrā, gan klienta infrastruktūrā.

Tālāk es nedaudz pastāstÄ«Å”u par izmaiņām konteineru tehnoloÄ£iju kaudzē, ar kurām mēs saskārāmies, pētot izplatÄ«Å”anu 8 CentOS un par to, kas tas ir CRI-O un kā ātri iestatÄ«t izpildāmo vidi Kubernetes.

CRI-O kā Docker aizstājējs kā Kubernetes izpildlaika vide: iestatÄ«Å”ana operētājsistēmā CentOS 8

Kāpēc Docker nav iekļauts CentOS 8?

Pēc jaunāko lielāko izdevumu instalÄ“Å”anas RHEL 8 vai 8 CentOS nevar nepamanÄ«t: Å”iem izplatÄ«jumiem un oficiālajiem repozitorijiem nav lietojumprogrammas dokers, kas idejiski un funkcionāli aizstāj paketes Podmans, Buildah (pēc noklusējuma atrodas izplatÄ«Å”anā) un CRI-O. Tas ir saistÄ«ts ar to standartu praktisko ievieÅ”anu, ko, cita starpā, izstrādājusi Red Hat Open Container Initiative (OCI) projekta ietvaros.

OCI, kas ir daļa no The Linux Foundation, mērÄ·is ir izveidot atvērtus nozares standartus konteineru formātiem un izpildlaikiem, kas vienlaikus atrisina vairākas problēmas. Pirmkārt, tie nebija pretrunā ar Linux filozofiju (piemēram, daļā, ka katrai programmai jāveic viena darbÄ«ba, un dokers ir sava veida "viss-vienā" kombains). Otrkārt, tie varētu novērst visus esoÅ”os programmatÅ«ras trÅ«kumus dokers. TreÅ”kārt, tie bÅ«tu pilnÄ«bā savietojami ar vadoÅ”o komerciālo platformu biznesa prasÄ«bām konteineru lietojumprogrammu izvietoÅ”anai, pārvaldÄ«bai un apkalpoÅ”anai (piemēram, Red Hat OpenShift).

Ierobežojumi dokers un jaunās programmatÅ«ras priekÅ”rocÄ«bas jau ir sÄ«ki aprakstÄ«tas Å is raksts, un detalizēts apraksts par visu OCI projekta ietvaros piedāvāto programmatÅ«ras steku un tās arhitektÅ«ras iezÄ«mēm ir atrodams oficiālajā dokumentācijā un paÅ”a Red Hat rakstos (nav slikti raksts Red Hat emuārā) un treŔās puses atsauksmes.

Ir svarīgi atzīmēt, kāda ir piedāvātās steka komponentu funkcionalitāte:

  • Podmans ā€” tieÅ”a mijiedarbÄ«ba ar konteineriem un attēlu krātuvi, izmantojot runC procesu;
  • Buildah ā€” attēlu montāža un augÅ”upielāde reÄ£istrā;
  • CRI-O ā€” izpildāma vide konteineru orÄ·estrÄ“Å”anas sistēmām (piemēram, Kubernetes).

Es domāju, ka, lai saprastu vispārējo steka komponentu mijiedarbÄ«bas shēmu, Å”eit ir ieteicams sniegt savienojuma shēmu Kubernetes c runC un zema lÄ«meņa bibliotēkas, izmantojot CRI-O:

CRI-O kā Docker aizstājējs kā Kubernetes izpildlaika vide: iestatÄ«Å”ana operētājsistēmā CentOS 8

CRI-O Šø Kubernetes ievērojiet to paÅ”u izlaiÅ”anas un atbalsta ciklu (saderÄ«bas matrica ir ļoti vienkārÅ”a: galvenās versijas Kubernetes Šø CRI-O sakrÄ«t), un tas, ņemot vērā izstrādātāju koncentrÄ“Å”anos uz pilnÄ«gu un visaptveroÅ”u Ŕī kaudzes darbÄ«bas testÄ“Å”anu, dod mums tiesÄ«bas sagaidÄ«t maksimālu sasniedzamo stabilitāti darbÄ«bā jebkurā lietoÅ”anas scenārijā (Å”eit izdevÄ«gs ir arÄ« relatÄ«vais vieglums CRI-O salÄ«dzinājumā ar dokers mērÄ·tiecÄ«ga funkcionalitātes ierobežojuma dēļ).

Instalējot Kubernetes "pareizā ceļa" veidā (protams, saskaņā ar OCI), izmantojot CRI-O par 8 CentOS Saskārāmies ar nelielām grÅ«tÄ«bām, kuras tomēr veiksmÄ«gi pārvarējām. Labprāt dalÄ«Å”os ar jums instalÄ“Å”anas un konfigurÄ“Å”anas instrukcijās, kas kopumā aizņems aptuveni 10 minÅ«tes.

Kā izvietot Kubernetes operētājsistēmā CentOS 8, izmantojot CRI-O sistēmu

PriekÅ”nosacÄ«jumi: vismaz viena resursdatora klātbÅ«tne (2 kodoli, 4 GB RAM, vismaz 15 GB krātuve) ar instalētu 8 CentOS (ieteicams instalācijas profils ā€œServerisā€), kā arÄ« tā ieraksti vietējā DNS (kā pēdējo lÄ«dzekli varat iztikt ar ierakstu mapē /etc/hosts). Un neaizmirstiet atspējot mijmaiņu.

Mēs veicam visas darbības resursdatorā kā root lietotājs, esiet uzmanīgi.

  1. Pirmajā solī mēs konfigurēsim OS, instalēsim un konfigurēsim CRI-O sākotnējās atkarības.
    • Atjaunināsim OS:
      dnf -y update
      

    • Tālāk jums jākonfigurē ugunsmÅ«ris un SELinux. Å eit viss ir atkarÄ«gs no vides, kurā strādās mÅ«su saimnieks vai saimnieki. Varat iestatÄ«t ugunsmÅ«ri saskaņā ar ieteikumiem no dokumentācijavai, ja atrodaties uzticamā tÄ«klā vai izmantojat treŔās puses ugunsmÅ«ri, mainiet noklusējuma zonu uz uzticamu vai izslēdziet ugunsmÅ«ri:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Lai izslēgtu ugunsmÅ«ri, varat izmantot Ŕādu komandu:

      systemctl disable --now firewalld
      

      SELinux ir jāizslēdz vai jāpārslēdz uz ā€œatļaujoÅ”oā€ režīmu:

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

    • Ielādējiet nepiecieÅ”amos kodola moduļus un pakotnes, konfigurējiet moduļa ā€œbr_netfilterā€ automātisko ielādi sistēmas startÄ“Å”anas laikā:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Lai aktivizētu pakeÅ”u pārsÅ«tÄ«Å”anu un pareizu trafika apstrādi, mēs veiksim atbilstoÅ”us iestatÄ«jumus:
      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
      

      izmantot veiktos iestatījumus:

      sysctl --system

    • iestatiet vajadzÄ«go versiju CRI-O (galvenā versija CRI-O, kā jau minēts, atbilst vajadzÄ«gajai versijai Kubernetes), kopÅ” jaunākās stabilās versijas Kubernetes Å”obrÄ«d 1.18:
      export REQUIRED_VERSION=1.18
      

      pievienojiet nepiecieŔamos repozitorijus:

      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

    • tagad mēs varam instalēt CRI-O:
      dnf -y install cri-o
      

      Pievērsiet uzmanÄ«bu pirmajai niansei, ar kuru saskaramies instalÄ“Å”anas procesā: jums ir jārediģē konfigurācija CRI-O pirms pakalpojuma palaiÅ”anas, jo nepiecieÅ”amais kopÄ«gais komponents atrodas citā vietā nekā norādÄ«tā:

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

      Tagad jūs varat aktivizēt un palaist dēmonu CRI-O:

      systemctl enable --now crio
      

      Jūs varat pārbaudīt dēmona statusu:

      systemctl status crio
      

  2. UzstādÄ«Å”ana un aktivizÄ“Å”ana Kubernetes.
    • Pievienosim nepiecieÅ”amo repozitoriju:
      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
      

      Tagad mēs varam instalēt Kubernetes (versija 1.18, kā minēts iepriekÅ”):

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

    • Otra svarÄ«ga nianse: tā kā mēs neizmantojam dēmonu dokers, bet mēs izmantojam dēmonu CRI-O, pirms palaiÅ”anas un inicializācijas Kubernetes konfigurācijas failā /var/lib/kubelet/config.yaml ir jāveic atbilstoÅ”i iestatÄ«jumi, vispirms izveidojot vajadzÄ«go direktoriju:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • TreÅ”ais svarÄ«gais punkts, ar kuru saskaramies instalÄ“Å”anas laikā: neskatoties uz to, ka esam norādÄ«juÅ”i izmantoto draiveri cgrupa, un tā konfigurācija, izmantojot nodotos argumentus kubelet ir novecojis (kā tas ir skaidri norādÄ«ts dokumentācijā), failam jāpievieno argumenti, pretējā gadÄ«jumā mÅ«su klasteris netiks inicializēts:
      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

    • Tagad mēs varam aktivizēt dēmonu kubelet:
      sudo systemctl enable --now kubelet
      

      Lai pielāgotu vadÄ«bas plakne vai darbinieks mezgli minÅ«tēs, varat izmantot ar Å”o skriptu.

  3. Ir pienācis laiks inicializēt mūsu kopu.
    • Lai inicializētu klasteru, palaidiet komandu:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Noteikti pierakstiet komandu, lai pievienotos klasterim ā€œkubeadm joinā€¦ā€, kas jums tiek lÅ«gts izmantot izvades beigās, vai vismaz norādÄ«tos marÄ·ierus.

    • Instalēsim spraudni (CNI) Pod tÄ«klam. Iesaku lietot Calico. Iespējams populārāks Flaneļa ir saderÄ«bas problēmas ar nftables, jā un jā Calico - vienÄ«gā projekta ieteiktā un pilnÄ«bā pārbaudÄ«tā CNI ievieÅ”ana Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Lai pievienotu darbinieka mezglu mÅ«su klasterim, tas jākonfigurē saskaņā ar 1. un 2. instrukciju vai izmantojiet skripts, pēc tam palaidiet komandu no ā€œkubeadm init...ā€ izvades, ko pierakstÄ«jām iepriekŔējā darbÄ«bā:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • PārbaudÄ«sim, vai mÅ«su klasteris ir inicializēts un sācis darboties:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Gatavs! Jūs jau varat mitināt lietderīgās kravas savā K8s klasterī.

Kas mūs sagaida priekŔā

Es ceru, ka iepriekÅ” sniegtie norādÄ«jumi palÄ«dzēja jums ietaupÄ«t laiku un nervus.
Nozarē notiekoÅ”o procesu iznākums bieži ir atkarÄ«gs no tā, kā tos pieņem lielākā daļa galalietotāju un citas programmatÅ«ras izstrādātāju attiecÄ«gajā niŔā. Pagaidām nav pilnÄ«bā skaidrs, pie kā OCI iniciatÄ«vas novedÄ«s pēc dažiem gadiem, taču ar prieku skatÄ«simies. Jau tagad varat dalÄ«ties ar savu viedokli komentāros.

Sekojiet līdzi!

Šis raksts parādījās, pateicoties Ŕādiem avotiem:



Avots: www.habr.com

Pievieno komentāru