Përshëndetje! Quhem Sergey, unë jam DevOps në Surf. Departamenti i DevOps në Surf ka si qëllim jo vetëm të ndihmojë në ndërveprimin mes specialistëve dhe integrimin e proceseve të punës, por gjithashtu të kryejë kërkime aktive dhe të zbatoj teknologjitë më të fundit si në infrastrukturën e tij ashtu edhe në infrastrukturën e klientëve.
Më poshtë do të flas pak për ndryshimet në stivin teknologjik për kontejnerët, me të cilët u takuam gjatë studimit të distribucionit. CentOS 8 dhe për atë që është CRI-O dhe si të konfigurojmë shpejt një mjedis ekzekutiv me ndihmën e tij. Kubernetes.

Pse Docker mungon në paketimin standard të CentOS 8
Pas instalimit të versioneve të fundit të mëdha, RHEL 8 ose CentOS 8 nuk mund të mos vëreni: në këto distribucione dhe në depot zyrtare mungon aplikacioni, Dockeri cili ideologjikisht dhe funksionalisht zëvendëson paketat Podman, Buildah (të pranishme në distribuirim si default) dhe CRI-O. Kjo është e lidhur me implementimin praktik të standardeve që po zhvillohen, ndër të tjera, nga kompanitë Red Hat në kuadër të projektit Open Container Initiative (OCI).
Qëllimi i OCI, i cili është pjesë e The Linux Foundation, është krijimi i standardeve të hapura industriale për format dhe mjediset ekzekutive të kontejnerëve, të cilat do të zgjidhnin disa probleme. Së pari, të mos përputhen me filozofinë e Linux (p.sh., në atë pjesë të saj që çdo program duhet të kryejë një veprim të vetëm, ndërsa Docker është një kombinim i gjithçkaje në një). Së dyti, të mundësonin eliminimin e të gjithë mangësive ekzistuese në softuer. DockerSë treti, të ishin plotësisht të përputhshme me kërkesat biznesore të paraqitura nga platformat kryesore komerciale për implementimin, menaxhimin dhe mirëmbajtjen e aplikacioneve të kontejnerizuara (p.sh., Red Hat OpenShift).
Disavantazhet Docker Dhe meritat e softuerit të ri janë përshkruar mjaft hollësisht në , dhe për një përshkrim të detajuar të gjithçkaje që ofrohet në kuadër të projektit OCI dhe veçoritë e tij arkitekturore, mund të konsultoheni me dokumentacionin zyrtar dhe artikujt nga Red Hat vetë (një në blogun e Red Hat), si dhe në burime të palëve të treta. .
ĂshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se cilat funksionalitete kanĂ« komponentĂ«t e ofruar tĂ« stakut:
- Podman â ndĂ«rveprimi direkt me kontejnerĂ«t dhe magazinat e imazheve pĂ«rmes procesit runC;
- Buildah â ndĂ«rtimi dhe ngarkimi nĂ« regjistrin e imazheve;
- CRI-O â mjedisi ekzekutiv pĂ«r sistemet e orkestrimit tĂ« kontejnerĂ«ve (p.sh., Kubernetes).
Mendoj se është e përshtatshme të jap një diagram të lidhjeve Kubernetes me runC dhe bibliotekave të nivelit të ulët duke përdorur CRI-O:

CRI-O dhe Kubernetes ndjekin të njëjtin cikël lëshimi dhe mbështetjeje (matrica e përputhshmërisë është shumë e thjeshtë: versionet e mëdha Kubernetes dhe CRI-O përputhen), dhe kjo, duke marrë parasysh orientimin për testimin e plotë dhe të gjithanshëm të funksionimit të këtij staku nga zhvilluesit, na jep të drejtën të presim stabilitetin më të lartë të mundshëm në punë në çdo skenar përdorimi (dhe këtu ndihmon edhe peshorja_relative CRI-O në krahasim me Docker për shkak të kufizimit të fokusuar të funksionalitetit).
Gjatë instalimit Kubernetes Në mënyrën "e duhur" (sipas OCI, sigurisht) duke përdorur CRI-O në CentOS 8 u takuam me disa vështirësi të vogla, të cilat, megjithatë, i kaluam me sukses. Do të isha i lumtur të ndaj me ju një udhëzues për instalimin dhe konfigurimin, i cili në total do të marrë maksimumi 10 minuta.
Si të vendosni Kubernetes në CentOS 8 duke përdorur mjedisin CRI-O
Kushtet paraprake: të ketë të paktën një host (2 cores, 4 GB RAM, ruajtje të paktën 15 GB) me CentOS 8 (preferohet profili i instalimit "Server"), dhe gjithashtu një hyrje për të në DNS lokal (në rast ekstrem, mund të mjaftojë një hyrje në /etc/hosts). Dhe mos harroni .
Të gjitha operacionet në host bëhen me emrin e përdoruesit root, tregoni kujdes.
- Në hapin e parë do të konfiguroni OS, do të instaloni dhe konfiguroni varësitë paraprake për CRI-O.
- Do të azhurnoni OS-në:
dnf -y update
- Më pas ne duhet të konfiguroni firewall-in dhe SELinux. Këtu ne jemi të varur nga ambienti në të cilin do të punojnë hosti ose hostet tona. Ju mund të konfiguroni firewall-in sipas rekomandimeve nga , ose, nëse jeni në një rrjet të besueshëm ose përdorni një firewall të palëve të treta, ndryshoni zonën e parazgjedhur në të besueshme ose çaktivizoni firewall-in:
firewall-cmd --set-default-zone trusted firewall-cmd --reloadPër të çaktivizuar firewall-in mund të përdorni komandën e mëposhtme:
systemctl disable --now firewalldSELinux duhet të çaktivizohet ose të vendoset në modin "permissive":
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- do të ngarkojmë modulat e nevojshme të bërthamës dhe paketat, do të konfiguroni ngarkimin automatik të modulit "br_netfilter" gjatë fillimit të sistemit:
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- për aktivizimin e përparimit të paketave dhe përpunimin e saktë të trafikut, do të bëjmë konfigurimet përkatëse:
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 EOFdo të aplikojmë konfigurimet e bëra:
sysctl --system
- do të vendosim versionin e nevojshëm CRI-O (versioni kryesor CRI-O, siç u përmend, përputhen me versionin e kërkuar Kubernetes), pasi versioni më i fundit i qëndrueshëm Kubernetes momentalisht është 1.18:
export REQUIRED_VERSION=1.18do të shtojmë repositorët e nevojshëm:
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
- tani mund të instalojmë CRI-O:
dnf -y install cri-oKujdes në detajin e parë që hasim gjatë instalimit: duhet të editoni konfigurimin CRI-O para se të aktivizoni shërbimin, pasi komponenti i kërkuar conmon ka një vendndodhje të ndryshme nga ajo e specifikuar:
sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.confTani mund të aktivizoni dhe filloni demonin CRI-O:
systemctl enable --now crioMund të kontrolloni statusin e demonit:
systemctl status crio
- Do të azhurnoni OS-në:
- Instalimi dhe aktivizimi Kubernetes.
- Le të shtojmë repositorin e nevojshëm:
cat < /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 EOFTani mund të instalojmë Kubernetes (versionet 1.18, siç u përmend më sipër):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- Detaji i dytë i rëndësishëm: pasi ne nuk po përdorim demon Docker, por po përdorim demon CRI-O, para aktivizimit dhe inicializimit Kubernetes duhen bërë konfigurimet përkatëse në dosjen e konfigurimit /var/lib/kubelet/config.yaml, duke krijuar më parë katalogun e nevojshëm:
mkdir /var/lib/kubelet cat < /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- Moment i tretë i rëndësishëm që hasim gjatë instalimit: ndonëse kemi specifikuar driver-in e përdorur cgroup, dhe konfigurimi i tij përmes argumenteve të dhëna kubelet është vjetëruar (siç është e qartë në dokumentacion), na nevojitet të shtojmë argumentet në skedarin, nd otherwise cluster-i ynë nuk do të inicializohet:
cat /dev/null > /etc/sysconfig/kubelet cat < /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' EOF
- Tani mund të aktivizoni demonin kubelet:
sudo systemctl enable --now kubeletPër të konfiguruar control-plane ose worker nodat në disa minuta, mund të përdorni .
- Le të shtojmë repositorin e nevojshëm:
- Koha për të inicializuar cluster-in tonë.
- Për të inicializuar cluster-in, ekzekutoni komandën:
kubeadm init --pod-network-cidr=10.244.0.0/16Sigurohuni tĂ« shkruani komandĂ«n pĂ«r t'u bashkuar nĂ« cluster 'kubeadm join âŠ', tĂ« cilĂ«n sugjerohet ta pĂ«rdorni nĂ« fund tĂ« daljes, ose nga tĂ« paktĂ«n, tokenat e pĂ«rmendur.
- Le tĂ« instalojmĂ« plugin-in (CNI) pĂ«r tĂ« punuar me rrjetin e Pod. Rekomandoj pĂ«rdorimin e Calico. Mund tĂ« ketĂ« njĂ« popullaritet mĂ« tĂ« madh Flannel ka probleme me pĂ«rputhshmĂ«rinĂ« me nftables, gjithashtu Calico â zbatimi i vetĂ«m i CNI, i rekomanduar dhe i testuar plotĂ«sisht nga projekti Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- PĂ«r tĂ« lidhur nodĂ«n punuese me cluster-in tonĂ«, duhet ta konfigurojmĂ« sipas pikave tĂ« udhĂ«zimit 1 dhe 2, ose tĂ« pĂ«rdorim , pastaj ekzekutoni komandĂ«n nga dalja 'kubeadm init âŠ', tĂ« cilĂ«n e kemi shkruar nĂ« fazĂ«n e kaluar:
kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN --discovery-token-ca-cert-hash $TOKEN_HASH
- Le të kontrollojmë nëse cluster-i ynë është inicializuar dhe ka filluar të funksionojë:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
Gati! Tani mund të vendosni ngarkesën e nevojshme në cluster-in tuaj K8s.
- Për të inicializuar cluster-in, ekzekutoni komandën:
ĂfarĂ« na pret pĂ«rpara
Shpresoj se ky udhëzim më sipër ka ndihmuar në kursimin e disa kohës dhe nervave tuaja.
Shprehja e proceseve që ndodhin në industri shpesh varet nga si i pranon shumica e përdoruesve përfundimtarë dhe zhvilluesve të softuerëve të tjerë në nisën përkatëse. Ende nuk është e qartë se ku do të përfundojnë iniciativat OCI pas disa viteve, por do të jetë kënaqësi të ndjekim këtë. Mund të ndani mendimin tuaj menjëherë në komentet.
Qëndroni të informuar!
Ky artikull u krijua falë burimeve të mëposhtme:
- Sekcioni mbi Container runtimes në
- e projektit CRI-O në internet
- Artikuj në bloget e Red Hat: , dhe shumë të tjera
Burimi: habr.com
