CRI-O som erstatning for Docker som et kjørbart miljø for Kubernetes: oppsett på CentOS 8

Hallo! Jeg heter Sergey, jeg er DevOps hos Surf. DevOps-avdelingen hos Surf har som mål ikke bare å etablere interaksjon mellom spesialister og integrere arbeidsprosesser, men også å aktivt undersøke og implementere aktuelle teknologier både i egen infrastruktur og i kundens infrastruktur.

Nedenfor vil jeg snakke litt om endringene i teknologistabelen for containere som vi møtte mens vi studerte distribusjonen 8 CentOS og om hva det er LAG DET og hvordan du raskt setter opp et kjørbart miljø for Kubernetes.

CRI-O som erstatning for Docker som et kjørbart miljø for Kubernetes: oppsett på CentOS 8

Hvorfor er ikke Docker inkludert i CentOS 8?

Etter å ha installert de siste store utgivelsene RHEL 8 eller 8 CentOS man kan ikke unngå å legge merke til: disse distribusjonene og offisielle depotene har ikke applikasjonen Docker, som ideologisk og funksjonelt erstatter pakker Podman, Buildah (tilstede i distribusjonen som standard) og LAG DET. Dette skyldes den praktiske implementeringen av standarder utviklet blant annet av Red Hat som en del av prosjektet Open Container Initiative (OCI).

Målet til OCI, som er en del av The Linux Foundation, er å lage åpne industristandarder for containerformater og kjøretider som løser flere problemer samtidig. For det første var de ikke i strid med Linux-filosofien (for eksempel i den delen at hvert program skulle utføre én handling, og Docker er en slags alt-i-ett-tresker). For det andre kunne de eliminere alle eksisterende mangler i programvaren Docker. For det tredje vil de være fullt kompatible med forretningskravene til ledende kommersielle plattformer for distribusjon, administrasjon og betjening av containeriserte applikasjoner (for eksempel Red Hat OpenShift).

Begrensninger Docker og fordelene med den nye programvaren er allerede beskrevet i detalj i denne artikkelen, og en detaljert beskrivelse av hele programvarestabelen som tilbys i OCI-prosjektet og dets arkitektoniske funksjoner kan finnes i den offisielle dokumentasjonen og artiklene fra Red Hat selv (ikke en dårlig artikkel i Red Hat-bloggen) og i tredjepart anmeldelser.

Det er viktig å merke seg hvilken funksjonalitet komponentene i den foreslåtte stabelen har:

  • Podman — direkte interaksjon med beholdere og bildelagring gjennom runC-prosessen;
  • Buildah – sette sammen og laste opp bilder til registeret;
  • LAG DET – et kjørbart miljø for containerorkestreringssystemer (for eksempel Kubernetes).

Jeg tror at for å forstå det generelle skjemaet for interaksjon mellom komponentene i stabelen, er det tilrådelig å gi et koblingsdiagram her Kubernetes c runC og lavnivåbiblioteker som bruker LAG DET:

CRI-O som erstatning for Docker som et kjørbart miljø for Kubernetes: oppsett på CentOS 8

LAG DET и Kubernetes følg den samme utgivelsen og støttesyklusen (kompatibilitetsmatrisen er veldig enkel: hovedversjoner Kubernetes и LAG DET sammenfaller), og dette, tatt i betraktning fokuset på fullstendig og omfattende testing av driften av denne stabelen av utviklere, gir oss rett til å forvente maksimal oppnåelig stabilitet i drift under alle bruksscenarier (relativ letthet er også fordelaktig her LAG DET sammenlignet med Docker på grunn av formålsbegrensning av funksjonalitet).

Når du installerer Kubernetes "riktig vei" måte (i henhold til OCI, selvfølgelig) ved hjelp av LAG DET8 CentOS Vi møtte noen mindre vanskeligheter, som vi imidlertid klarte å overvinne. Jeg deler gjerne installasjons- og konfigurasjonsinstruksjoner med deg, som totalt vil ta ca. 10 minutter.

Hvordan distribuere Kubernetes på CentOS 8 ved å bruke CRI-O-rammeverket

Forutsetninger: tilstedeværelse av minst én vert (2 kjerner, 4 GB RAM, minst 15 GB lagring) med installert 8 CentOS («Server»-installasjonsprofilen anbefales), samt oppføringer for den i den lokale DNS (som en siste utvei kan du klare deg med en oppføring i /etc/hosts). Og ikke glem deaktiver bytte.

Vi utfører alle operasjoner på verten som root-bruker, vær forsiktig.

  1. I det første trinnet vil vi konfigurere OS, installere og konfigurere foreløpige avhengigheter for CRI-O.
    • La oss oppdatere OS:
      dnf -y update
      

    • Deretter må du konfigurere brannmuren og SELinux. Her avhenger alt av miljøet der verten eller vertene våre skal jobbe. Du kan enten sette opp en brannmur i henhold til anbefalingene fra dokumentasjon, eller, hvis du er på et klarert nettverk eller bruker en tredjeparts brannmur, endre standardsonen til klarert eller slå av brannmuren:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      For å slå av brannmuren kan du bruke følgende kommando:

      systemctl disable --now firewalld
      

      SELinux må slås av eller byttes til "tillatelig" modus:

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

    • Last inn de nødvendige kjernemodulene og pakkene, konfigurer den automatiske lastingen av "br_netfilter"-modulen ved systemoppstart:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • For å aktivere pakkevideresending og korrekt trafikkbehandling, vil vi gjøre de riktige innstillingene:
      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
      

      bruk innstillingene som er gjort:

      sysctl --system

    • angi ønsket versjon LAG DET (hovedversjon LAG DET, som allerede nevnt, samsvarer med den nødvendige versjonen Kubernetes), siden den siste stabile versjonen Kubernetes nå 1.18:
      export REQUIRED_VERSION=1.18
      

      legg til de nødvendige depotene:

      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å kan vi installere LAG DET:
      dnf -y install cri-o
      

      Vær oppmerksom på den første nyansen som vi møter under installasjonsprosessen: du må redigere konfigurasjonen LAG DET før du starter tjenesten, siden den nødvendige conmon-komponenten har en annen plassering enn den spesifiserte:

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

      Nå kan du aktivere og starte demonen LAG DET:

      systemctl enable --now crio
      

      Du kan sjekke daemonstatusen:

      systemctl status crio
      

  2. Installasjon og aktivering Kubernetes.
    • La oss legge til det nødvendige depotet:
      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å kan vi installere Kubernetes (versjon 1.18, som nevnt ovenfor):

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

    • Den andre viktige nyansen: siden vi ikke bruker en demon Docker, men vi bruker demonen LAG DET, før lansering og initialisering Kubernetes du må gjøre de riktige innstillingene i konfigurasjonsfilen /var/lib/kubelet/config.yaml, etter først å ha opprettet ønsket katalog:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Det tredje viktige punktet som vi møter under installasjonen: til tross for at vi har angitt driveren som brukes cgruppe, og dens konfigurasjon gjennom argumentene som ble sendt kubelet er utdatert (som det er eksplisitt angitt i dokumentasjonen), må vi legge til argumenter til filen, ellers vil ikke klyngen vår initialiseres:
      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å kan vi aktivere demonen kubelet:
      sudo systemctl enable --now kubelet
      

      Å tilpasse kontroll-plan eller arbeidstaker noder på minutter, kan du bruke med dette manuset.

  3. Det er på tide å initialisere klyngen vår.
    • For å initialisere klyngen, kjør kommandoen:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Husk å skrive ned kommandoen for å bli med i klyngen "kubeadm join ...", som du blir bedt om å bruke på slutten av utdataene, eller i det minste de angitte tokenene.

    • La oss installere plugin (CNI) for Pod-nettverket. Jeg anbefaler å bruke Calico. Muligens mer populært Flanell har kompatibilitetsproblemer med nftablerog ja Calico - den eneste CNI-implementeringen anbefalt og fullstendig testet av prosjektet Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • For å koble en arbeidsnode til klyngen vår, må du konfigurere den i henhold til instruksjoner 1 og 2, eller bruke manus, kjør deretter kommandoen fra "kubeadm init..."-utgangen som vi skrev ned i forrige trinn:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • La oss sjekke at klyngen vår er initialisert og begynte å fungere:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Klar! Du kan allerede være vert for nyttelast på K8s-klyngen.

Hva som venter oss fremover

Jeg håper at instruksjonene ovenfor hjalp deg med å spare tid og nerver.
Resultatet av prosesser som skjer i bransjen avhenger ofte av hvordan de blir akseptert av hoveddelen av sluttbrukere og utviklere av annen programvare i den tilsvarende nisjen. Det er ennå ikke helt klart hva OCI-initiativene vil føre til om noen år, men vi vil følge med glede. Du kan dele din mening akkurat nå i kommentarfeltet.

Følg med!

Denne artikkelen dukket opp takket være følgende kilder:



Kilde: www.habr.com

Legg til en kommentar