CRI-O als vervanging voor Docker als runtime-omgeving voor Kubernetes: instellen op CentOS 8

Hallo! Mijn naam is Sergey, ik ben DevOps bij Surf. De DevOps-afdeling van Surf heeft niet alleen tot doel om interactie tussen specialisten tot stand te brengen en workflows te integreren, maar ook om actief relevante technologieën te onderzoeken en te implementeren, zowel in hun eigen infrastructuur als in de infrastructuur van de klant.

Hieronder zal ik wat vertellen over de veranderingen in de technologische stapel voor containers die we tegenkwamen tijdens het bestuderen van de distributie. 8 CentOS en over wat is? CREËER HET en hoe je er snel een uitvoerbare omgeving mee opzet Kubernetes.

CRI-O als vervanging voor Docker als runtime-omgeving voor Kubernetes: instellen op CentOS 8

Waarom ontbreekt Docker in de standaarddistributie van CentOS 8

Na het installeren van de nieuwste grote releases RHEL 8 of 8 CentOS niet te vergeten: deze distributies en officiële repositories missen de applicatie havenarbeider, die ideologisch en functioneel pakketten vervangen podman, Builda (standaard aanwezig in de distributie) en CREËER HET. Dit komt door de praktische implementatie van standaarden die onder meer door Red Hat zijn ontwikkeld als onderdeel van het Open Container Initiative (OCI)-project.

Het doel van OCI, dat deel uitmaakt van The Linux Foundation, is het creëren van open industriestandaarden voor containerformaten en uitvoerbare omgevingen die verschillende problemen tegelijk zouden oplossen. Ten eerste waren ze niet in tegenspraak met de filosofie van Linux (bijvoorbeeld in dat deel ervan dat elk programma een bepaalde actie moet uitvoeren, en havenarbeider is een soort alles-in-één-combinatie). Ten tweede konden we alle bestaande tekortkomingen in de software wegwerken havenarbeider. Ten derde zouden ze volledig compatibel zijn met de zakelijke vereisten van de toonaangevende commerciële platforms voor het implementeren, beheren en onderhouden van gecontaineriseerde applicaties (bijvoorbeeld Red Hat OpenShift).

Beperkingen havenarbeider en de voordelen van de nieuwe software zijn al in detail beschreven in dit artikel, en een gedetailleerde beschrijving van hoe de volledige softwarestack aangeboden als onderdeel van het OCI-project en de architectonische kenmerken ervan te vinden zijn in de officiële documentatie en artikelen van zowel Red Hat zelf (goed artikel in de Red Hat-blog) en in derden recensies.

Het is belangrijk op te merken welke functionaliteit de componenten van de voorgestelde stapel hebben:

  • podman - directe interactie met containers en beeldopslag via het runC-proces;
  • Builda - montage en laden in het register van afbeeldingen;
  • CREËER HET - runtime-omgeving voor containerorkestratiesystemen (bijvoorbeeld Kubernetes).

Ik denk dat om het algemene schema van interactie tussen de componenten van de stapel te begrijpen, het raadzaam is om hier een aansluitschema te geven Kubernetes c renC en low-level bibliotheken gebruiken CREËER HET:

CRI-O als vervanging voor Docker als runtime-omgeving voor Kubernetes: instellen op CentOS 8

CREËER HET и Kubernetes volg dezelfde release- en ondersteuningscyclus (de compatibiliteitsmatrix is ​​heel eenvoudig: grote releases Kubernetes и CREËER HET samenvalt), en dit, rekening houdend met de focus op het volledig en uitgebreid testen van het werk van deze stack door ontwikkelaars, geeft ons het recht om de maximaal haalbare stabiliteit in het werk te verwachten in alle gebruiksscenario's (relatieve lichtheid is hier ook gunstig). CREËER HET vergeleken met havenarbeider vanwege doelbewuste beperking van functionaliteit).

Bij installatie Kubernetes "juiste" manier (volgens de OCI natuurlijk) gebruiken CREËER HET op 8 CentOS We liepen tegen wat kleine problemen aan, die we echter met succes hebben overwonnen. Ik deel graag de installatie- en configuratie-instructies met u, die in totaal maximaal 10 minuten zullen duren.

Kubernetes implementeren op CentOS 8 met behulp van de CRI-O-omgeving

Vereisten: minimaal één host hebben (2 kernen, 4 GB RAM, minimaal 15 GB opslag) met 8 CentOS (aanbevolen installatieprofiel "Server"), evenals vermeldingen ervoor in de lokale DNS (in extreme gevallen kunt u volstaan ​​met een vermelding in /etc/hosts). En vergeet niet wissel uitschakelen.

We voeren alle bewerkingen op de host uit namens de rootgebruiker, wees voorzichtig.

  1. In de eerste stap zullen we het besturingssysteem instellen, de voorlopige afhankelijkheden voor CRI-O installeren en configureren.
    • Besturingssysteem bijwerken:
      dnf -y update
      

    • Vervolgens moet je de firewall en SELinux configureren. Hier hangt alles af van de omgeving waarin onze gastheer of gastheren zullen werken. U kunt een firewall instellen zoals aanbevolen in documentatie, of als u zich op een vertrouwd netwerk bevindt of een firewall van derden gebruikt, wijzigt u de standaardzone in vertrouwd of schakelt u de firewall uit:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Om de firewall uit te schakelen, kunt u de volgende opdracht gebruiken:

      systemctl disable --now firewalld
      

      SELinux moet worden uitgeschakeld of ingesteld op "permissieve" modus:

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

    • laad de benodigde kernelmodules en -pakketten, configureer automatisch laden van de "br_netfilter" -module bij het opstarten van het systeem:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Om het doorsturen van pakketten te activeren en het verkeer correct te verwerken, maken we de juiste instellingen:
      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
      

      pas de gemaakte instellingen toe:

      sysctl --system

    • stel de gewenste versie in CREËER HET (grote versie CREËER HET, zoals reeds vermeld, zijn hetzelfde als de vereiste versie Kubernetes) sinds de laatste stabiele versie Kubernetes momenteel 1.18:
      export REQUIRED_VERSION=1.18
      

      voeg de nodige repositories toe:

      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

    • nu kunnen we installeren CREËER HET:
      dnf -y install cri-o
      

      Let op de eerste nuance die we tegenkomen tijdens het installatieproces: u moet de configuratie bewerken CREËER HET voordat u de service start, aangezien de vereiste conmon-component een andere locatie heeft dan de opgegeven locatie:

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

      Nu kunt u de daemon activeren en starten CREËER HET:

      systemctl enable --now crio
      

      U kunt de status van de daemon controleren:

      systemctl status crio
      

  2. Installatie en activatie Kubernetes.
    • Voeg de vereiste repository toe:
      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
      

      Nu kunnen we installeren Kubernetes (versie 1.18, zoals hierboven vermeld):

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

    • De tweede belangrijke nuance: aangezien we de daemon niet gebruiken havenarbeider, maar gebruik de daemon CREËER HET, vóór lancering en initialisatie Kubernetes u moet de juiste instellingen maken in het configuratiebestand /var/lib/kubelet/config.yaml, nadat u de benodigde map hebt gemaakt:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Het derde belangrijke punt dat we tegenkomen tijdens de installatie: ondanks dat we de gebruikte driver hebben aangegeven cgroep, en de configuratie ervan via de doorgegeven argumenten kubus verouderd (wat direct in de documentatie wordt aangegeven), moeten we argumenten aan het bestand toevoegen, anders wordt ons cluster niet geïnitialiseerd:
      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

    • Nu kunnen we de daemon activeren kubus:
      sudo systemctl enable --now kubelet
      

      Aan te passen controle-vlak of werker knooppunten in minuten, kunt u gebruiken dit schrift.

  3. Het is tijd om ons cluster te initialiseren.
    • Voer de volgende opdracht uit om het cluster te initialiseren:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Zorg ervoor dat u de opdracht noteert om lid te worden van het cluster "kubeadm join ...", dat wordt aangeboden aan het einde van de uitvoer, of in ieder geval de opgegeven tokens.

    • Installeer de plug-in (CNI) voor het Pod-netwerk. Ik raad aan om te gebruiken Calico. Mogelijk populairder Flanel heeft compatibiliteitsproblemen met nftables, en Calico - de enige CNI-implementatie die wordt aanbevolen en volledig is getest door het project Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Om een ​​werkknooppunt met ons cluster te verbinden, moet u het configureren volgens instructies 1 en 2, of gebruik script, voer dan de opdracht uit vanaf de uitvoer "kubeadm init ..." die we in de vorige stap hebben opgenomen:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Laten we eens kijken of ons cluster is geïnitialiseerd en begint te werken:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Klaar! U kunt al payloads hosten op uw K8s-cluster.

Wat ons te wachten staat

Ik hoop dat de bovenstaande instructies u wat tijd en zenuwen hebben bespaard.
De uitkomst van de processen die in de branche plaatsvinden, hangt vaak af van hoe ze worden geaccepteerd door de grote massa van eindgebruikers en ontwikkelaars van andere software in de betreffende niche. Waar de OCI-initiatieven over een paar jaar toe leiden, is nog niet helemaal duidelijk, maar we volgen het graag. U kunt uw mening nu delen in de opmerkingen.

Stay tuned!

Dit artikel is tot stand gekomen dankzij de volgende bronnen:



Bron: www.habr.com

Voeg een reactie