CRI-O som erstatning for Docker som runtime-miljø for Kubernetes: opsætning på CentOS 8

Hej! Mit navn er Sergey, jeg er DevOps hos Surf. DevOps-afdelingen hos Surf har ikke kun til formål at etablere interaktion mellem specialister og integrere arbejdsprocesser, men også aktivt at forske i og implementere aktuelle teknologier både i sin egen infrastruktur og i kundens infrastruktur.

Nedenfor vil jeg fortælle lidt om ændringerne i teknologistakken for containere, som vi stødte på, mens vi studerede distributionen 8 CentOS og om hvad det er skabe det og hvordan man hurtigt opsætter et eksekverbart miljø til Kubernetes.

CRI-O som erstatning for Docker som runtime-miljø for Kubernetes: opsætning på CentOS 8

Hvorfor er Docker ikke inkluderet i CentOS 8?

Efter installation af de seneste større udgivelser RHEL 8 eller 8 CentOS man kan ikke undgå at bemærke: disse distributioner og officielle arkiver indeholder ikke applikationen Docker, som ideologisk og funktionelt erstatter pakker Podman, Buildah (til stede i distributionen som standard) og skabe det. Det skyldes den praktiske implementering af standarder udviklet blandt andet af Red Hat som en del af Open Container Initiative (OCI) projektet.

Målet med OCI, som er en del af The Linux Foundation, er at skabe åbne industristandarder for containerformater og kørselstider, der løser flere problemer på én gang. For det første var de ikke i modstrid med Linux-filosofien (for eksempel i den del, at hvert program skulle udføre én handling, og Docker er en slags alt-i-én mejetærsker). For det andet kunne de fjerne alle eksisterende mangler i softwaren Docker. For det tredje ville de være fuldt ud kompatible med forretningskravene fra førende kommercielle platforme til at implementere, administrere og betjene containeriserede applikationer (for eksempel Red Hat OpenShift).

Begrænsninger Docker og fordelene ved den nye software er allerede blevet beskrevet mere detaljeret i denne artikel, og en detaljeret beskrivelse af hele softwarestakken, der tilbydes inden for OCI-projektet og dets arkitektoniske funktioner, kan findes i den officielle dokumentation og artikler fra Red Hat selv (ikke en dårlig artiklen i Red Hat blog) og i tredjepart anmeldelser.

Det er vigtigt at bemærke, hvilken funktionalitet komponenterne i den foreslåede stak har:

  • Podman — direkte interaktion med containere og billedlagring gennem runC-processen;
  • Buildah — samling og upload af billeder til registreringsdatabasen;
  • skabe det — et eksekverbart miljø til containerorkestreringssystemer (f.eks. Kubernetes).

Jeg tror, ​​at for at forstå det generelle skema for interaktion mellem komponenterne i stakken, er det tilrådeligt at give et forbindelsesdiagram her Kubernetes c runC og biblioteker på lavt niveau ved hjælp af skabe det:

CRI-O som erstatning for Docker som runtime-miljø for Kubernetes: opsætning på CentOS 8

skabe det и Kubernetes overhold den samme udgivelses- og supportcyklus (kompatibilitetsmatrixen er meget enkel: større versioner Kubernetes и skabe det falder sammen), og dette, under hensyntagen til fokus på fuldstændig og omfattende test af driften af ​​denne stak af udviklere, giver os ret til at forvente den maksimalt opnåelige stabilitet i drift under alle brugsscenarier (relativ lethed er også fordelagtig her skabe det sammenlignet med Docker på grund af målrettet begrænsning af funktionalitet).

Når du installerer Kubernetes "rigtige måde" måde (ifølge OCI, selvfølgelig) ved hjælp af skabe det8 CentOS Vi stødte på nogle mindre vanskeligheder, som vi dog med succes overkom. Jeg deler gerne installations- og konfigurationsinstruktioner med dig, som i alt vil tage omkring 10 minutter.

Sådan implementeres Kubernetes på CentOS 8 ved hjælp af CRI-O-rammeværket

Forudsætninger: tilstedeværelse af mindst én vært (2 kerner, 4 GB RAM, mindst 15 GB lagerplads) med installeret 8 CentOS (“Server” installationsprofilen anbefales), samt indtastninger til den i den lokale DNS (som en sidste udvej kan du klare dig med en indtastning i /etc/hosts). Og glem det ikke deaktiver swap.

Vi udfører alle operationer på værten som root-bruger, vær forsigtig.

  1. I det første trin vil vi konfigurere OS, installere og konfigurere foreløbige afhængigheder for CRI-O.
    • Lad os opdatere OS:
      dnf -y update
      

    • Dernæst skal du konfigurere firewallen og SELinux. Her afhænger alt af det miljø, som vores vært eller værter vil arbejde i. Du kan enten opsætte en firewall i henhold til anbefalingerne fra dokumentation, eller, hvis du er på et betroet netværk eller bruger en tredjeparts firewall, skal du ændre standardzonen til betroet eller slukke for firewallen:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      For at slå firewallen fra kan du bruge følgende kommando:

      systemctl disable --now firewalld
      

      SELinux skal slukkes eller skiftes til "tilladende" tilstand:

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

    • Indlæs de nødvendige kernemoduler og pakker, konfigurer den automatiske indlæsning af "br_netfilter"-modulet ved systemstart:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • For at aktivere pakkevideresendelse og korrekt trafikbehandling foretager vi de relevante indstillinger:
      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
      

      anvend de foretagne indstillinger:

      sysctl --system

    • indstille den ønskede version skabe det (større version skabe det, som allerede nævnt, match den påkrævede version Kubernetes), siden den seneste stabile version Kubernetes lige nu 1.18:
      export REQUIRED_VERSION=1.18
      

      tilføje de nødvendige depoter:

      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 kan vi installere skabe det:
      dnf -y install cri-o
      

      Vær opmærksom på den første nuance, vi støder på under installationsprocessen: du skal redigere konfigurationen skabe det før du starter tjenesten, da den påkrævede conmon-komponent har en anden placering end den angivne:

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

      Nu kan du aktivere og starte dæmonen skabe det:

      systemctl enable --now crio
      

      Du kan tjekke dæmonens status:

      systemctl status crio
      

  2. Installation og aktivering Kubernetes.
    • Lad os tilføje det nødvendige lager:
      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 kan vi installere Kubernetes (version 1.18, som nævnt ovenfor):

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

    • Den anden vigtige nuance: da vi ikke bruger en dæmon Docker, men vi bruger dæmonen skabe det, før lancering og initialisering Kubernetes du skal foretage de relevante indstillinger i konfigurationsfilen /var/lib/kubelet/config.yaml, efter først at have oprettet den ønskede mappe:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Det tredje vigtige punkt, som vi støder på under installationen: på trods af, at vi har angivet den anvendte driver cgruppe, og dens konfiguration gennem de begivne argumenter kubelet er forældet (som det udtrykkeligt er angivet i dokumentationen), skal vi tilføje argumenter til filen, ellers bliver vores klynge ikke initialiseret:
      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 kan vi aktivere dæmonen kubelet:
      sudo systemctl enable --now kubelet
      

      At tilpasse kontrol-plan eller arbejdstager noder på få minutter, kan du bruge med dette script.

  3. Det er tid til at initialisere vores klynge.
    • For at initialisere klyngen skal du køre kommandoen:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Sørg for at skrive kommandoen ned for at slutte sig til klyngen "kubeadm join ...", som du bliver bedt om at bruge i slutningen af ​​outputtet, eller i det mindste de angivne tokens.

    • Lad os installere plugin'et (CNI) til Pod-netværket. Jeg anbefaler at bruge Calico. Muligvis mere populær flannel har kompatibilitetsproblemer med nftables, og Calico - den eneste CNI-implementering anbefalet og fuldt testet af projektet Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • For at forbinde en arbejderknude til vores klynge skal du konfigurere den i henhold til instruktioner 1 og 2, eller bruge manuskript, kør derefter kommandoen fra "kubeadm init..." outputtet, som vi skrev ned i det forrige trin:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Lad os kontrollere, at vores klynge er initialiseret og begyndt at fungere:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Parat! Du kan allerede hoste nyttelast på din K8s-klynge.

Hvad venter os forude

Jeg håber, at instruktionerne ovenfor hjalp dig med at spare tid og nerver.
Resultatet af processer, der forekommer i industrien, afhænger ofte af, hvordan de accepteres af hovedparten af ​​slutbrugere og udviklere af anden software i den tilsvarende niche. Det er endnu ikke helt klart, hvad OCI-initiativerne vil føre til om nogle år, men vi vil se med glæde. Du kan dele din mening lige nu i kommentarerne.

Bliv hængende!

Denne artikel dukkede op takket være følgende kilder:



Kilde: www.habr.com

Tilføj en kommentar