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 CentOS 8 og om hva det er LAG DET og hvordan du raskt setter opp et kjørbart miljø for Kubernetes.

Почему Docker отсутствует в стандартной поставке CentOS 8
Etter å ha installert de siste store utgivelsene RHEL 8 eller CentOS 8 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).
Цель OCI, являющейся частью The Linux Foundation, — создание открытых индустриальных стандартов для форматов и исполняемой среды контейнеров, которые бы решали сразу несколько задач. Во-первых, не противоречили как философии Linux (например, в той её части, что каждая программа должна выполнять какое-то одно действие, а 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 , 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 i Red Hat-bloggen) og i tredjepart .
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:

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 DET på CentOS 8 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.
Как развернуть Kubernetes на CentOS 8 с использованием среды CRI-O
Forutsetninger: tilstedeværelse av minst én vert (2 kjerner, 4 GB RAM, minst 15 GB lagring) med installert CentOS 8 («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 .
Vi utfører alle operasjoner på verten som root-bruker, vær forsiktig.
- 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
- Далее требуется настроить файрволл и SELinux. Здесь у нас всё зависит от окружения, в котором будут работать наш хост или хосты. Вы можете либо настроить файрволл по рекомендациям из , 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 --reloadFor å slå av brannmuren kan du bruke følgende kommando:
systemctl disable --now firewalldSELinux требуется выключить либо перевести в режим «permissive»:
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 EOFbruk 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.18legg 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-oVæ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.confNå kan du aktivere og starte demonen LAG DET:
systemctl enable --now crioDu kan sjekke daemonstatusen:
systemctl status crio
- La oss oppdatere OS:
- 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 EOFNå 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 .
- La oss legge til det nødvendige depotet:
- Det er på tide å initialisere klyngen vår.
- For å initialisere klyngen, kjør kommandoen:
kubeadm init --pod-network-cidr=10.244.0.0/16Husk å 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 , 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.
- For å initialisere klyngen, kjør kommandoen:
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:
- Seksjon om containerkjøretider
- CRI-O-prosjekt på Internett
- Red Hat bloggartikler: , og mange andre
Kilde: www.habr.com
