Përshëndetje! Më quajnë Sergei, unë jam DevOps në Surf. Departamenti DevOps në Surf ka për detyrë jo vetëm të krijojë ndërveprimin midis specialistëve dhe të integrojë proceset e punës, por gjithashtu të bëjë kërkime aktive dhe të implementojë teknologjitë aktuale si në infrastrukturën e tij, ashtu edhe në infrastrukturën e klientëve.
Më poshtë do të flas pak për ndryshimet në stakun teknologjik për kontejnerët, me të cilat u përballëm gjatë studimit të distribucionit. CentOS 8 dhe se çfarë është CRI-O dhe si ta konfiguroni shpejt një mjedis ekzekutiv me ndihmën e tij për Kubernetes.

Pse Docker nuk është i pranishëm në paketimin standard të CentOS 8.
Pas instalimit të versioneve më të fundit kryesore, RHEL 8 ose CentOS 8 nuk mund të mos vëreni: në këto distribucione dhe në depozitë zyrtare mungon aplikacioni Docker, i cili ideologjikisht dhe funksionalisht zëvendësohet nga paketat Podman, Buildah (të pranishme në distribucion nga default) dhe CRI-O. Kjo është e lidhur me realizimin praktik të standardeve që zhvillohen, përfshirë nga kompania Red Hat brenda projektit Open Container Initiative (OCI).
Qëllimi i OCI, që është pjesë e The Linux Foundation, është krijimi i standardeve të hapura industriale për formatet dhe mjedisin ekzekutiv të kontejnerëve, të cilat do të zgjidhnin menjëherë disa probleme. Së pari, të mos e kundërshtojnë filozofinë e Linux (për shembull, në atë pjesë të saj që çdo program duhet të kryejë një veprim të vetëm, ndërsa Docker përfaqëson një makinë të gjitha-në-një). Së dyti, të mund të eliminojnë të gjitha mangësitë ekzistuese në softuer Docker. Së treti, të ishin plotësisht të përputhshme me kërkesat e biznesit, të cilat janë të paraqitura nga platformat kryesore komerciale për implementimin, menaxhimin dhe mbështetje të aplikacioneve të kontenjerizuara (si Red Hat OpenShift).
Mangësitë Docker dhe avantazhet e softuerit të ri tashmë janë përshkruar mjaft për së mbari në , dhe për një përshkrim të detajuar të gjithçkaje që ofrohet në kuadër të projektit OCI dhe veçoritë e saj arkitektonike, mund të konsultoheni me dokumentacionin zyrtar dhe artikujt si nga vetë Red Hat (një e mirë në blogun e Red Hat), ashtu edhe në burime të tjera. .
ĂshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se çfarĂ« funksionaliteti kanĂ« komponentĂ«t e stakut tĂ« ofruar:
- Podman â ndĂ«rveprimi i drejtpĂ«rdrejtĂ« me kontejnerĂ«t dhe depozitĂ«n e imazheve pĂ«rmes procesit runC;
- Buildah â ndĂ«rtimi dhe ngarkimi nĂ« regjistrin e imazheve;
- CRI-O â njĂ« mjedis ekzekutiv pĂ«r sistemet e orkestrimit tĂ« kontejnerĂ«ve (pĂ«r shembull, Kubernetes).
Mendoj se për të kuptuar skemën e përgjithshme të ndërveprimit midis komponentëve të stakut, është e arsyeshme të japim këtu një diagram lidhjesh Kubernetes c runC dhe biblioteka në nivel 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 madhore Kubernetes dhe CRI-O përputhen), dhe kjo, duke marrë parasysh orientimin për testimin e plotë dhe të gjithanshëm të punës së këtij staku nga zhvilluesit, na jep të drejtën të presim stabilitetin më të arritshëm në funksionim në çdo skenar përdorimi (këtu ndihmon edhe relativisht lehtësia CRI-O në krahasim me Docker për shkak të kufizimit të qëllimshëm të funksionalitetit).
Gjatë instalimit Kubernetes në mënyrë «të drejtë» (sipas mendimit të OCI, sigurisht) duke përdorur CRI-O në CentOS 8 u përballëm me disa vështirësi të vogla, të cilat, megjithatë, i kaluam me sukses. Do të më pëlqente të ndaja me ju një udhëzues për instalimin dhe konfigurimin, që në total do të zgjasin maksimumi 10 minuta.
Si të shpërndajmë Kubernetes në CentOS 8 duke përdorur mjedisin CRI-O
Kushtet paraprake: të paktën një host (2 bërthama, 4 GB RAM, hapësirë të paktën 15 GB) me CentOS 8 (preferohet profili i instalimit «Server»), si dhe regjistrime për të në DNS-in lokal (në rastin më të keq, mund të kaloni me një regjistrim në /etc/hosts). Dhe mos harroni .
Të gjitha operacionet në host duhet të kryhen nga përdoruesi root, mos harroni.
- Në hapin e parë do të konfigurojmë sistemin operativ, do të installojmë dhe konfigurojmë varësitë paraprake për CRI-O.
- Do të azhurnojmë sistemin operativ:
dnf -y update
- Më pas duhet të konfigurojmë firewall-in dhe SELinux. Këtu gjithçka varet nga mjedisi në të cilin do të punojnë hosti ose hostet tona. Ju mund të konfiguroheni firewall-in sipas rekomandimeve nga , ose, nëse ndodheni në një rrjet të besueshëm ose përdorni një firewall të jashtëm, të ndryshoni zonën e parazgjedhjes në të besueshme ose të ç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ë kalojë në modin «permissive»:
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- do të ngarkojmë modulet e nevojshme të bërthamës dhe paketat, do të konfigurojmë ngarkimin automatik të modulit «br_netfilter» gjatë startit të sistemit:
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- Për të aktivizuar përparimin e paketave dhe për të përpunuar saktësisht trafikun, do të bëjmë përgatitjet 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 EOFTani do të aplikojmë përgatitjet që kemi bërë:
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 stabil Kubernetes në këtë moment është 1.18:
export REQUIRED_VERSION=1.18do të shtojmë depozitat e nevojshme:
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-oKujdesuni për pikën e parë që hasim gjatë instalimit: duhet të redaktojmë konfigurimin CRI-O para se të nisnim shërbimin, pasi komponenti i nevojshëm conmon ka një vendndodhje të ndryshme nga ajo e caktuar:
sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.confTani mund të aktivizojmë dhe nisim demonin CRI-O:
systemctl enable --now crioMund të kontrolloni statusin e demonit:
systemctl status crio
- Do të azhurnojmë sistemin operativ:
- Instalimi dhe aktivizimi Kubernetes.
- Do të shtojmë depozitën e kërkuar:
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
- Pika e dytë e rëndësishme: pasi ne nuk po përdorim demonin Docker, por përdorim demonin CRI-O, para nisjes dhe inicializimit Kubernetes duhet të bëjmë përgatitjet përkatëse në skedarin e konfigurimit /var/lib/kubelet/config.yaml, duke krijuar më parë katalogun e dëshiruar:
mkdir /var/lib/kubelet cat < /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- Pika e tretë e rëndësishme me të cilën përballemi gjatë instalimit: ndonëse ne caktuam driverin e përdorur cgroup, dhe konfigurimi i tij përmes argumenteve të kaluara kubelet është e vjetër (për të cilën tregohet qartë në dokumentacion), na nevojitet të shtojmë argumentet në skedar, përndryshe klusteri ynë nuk 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 ta aktivizojmë demonin kubelet:
sudo systemctl enable --now kubeletPër të konfiguruar plani-kontrollues ose punëtori nodat në pak minuta, mund të shfrytëzoni .
- Do të shtojmë depozitën e kërkuar:
- ĂshtĂ« koha tĂ« inicializojmĂ« klasterin tonĂ«.
- Për të inicializuar klasterin ekzekutoni komandën:
kubeadm init --pod-network-cidr=10.244.0.0/16Sigurohuni qĂ« tĂ« shkruani komandĂ«n pĂ«r t'u bashkuar me klasterin «kubeadm join âŠÂ» e cila ofrohet nĂ« fund tĂ« daljes, ose tĂ« paktĂ«n, tokenat e pĂ«rmendur.
- Do tĂ« instalojmĂ« njĂ« plugin (CNI) pĂ«r tĂ« punuar me rrjetin e Pod-it. Ju rekomandoj tĂ« pĂ«rdorni Calico. Ndoshta mĂ« popullorja Flannel ka probleme me pĂ«rputhshmĂ«rinĂ« me nftables, gjithashtu Calico â Ă«shtĂ« realizimi i vetĂ«m CNI, i rekomanduar dhe plotĂ«sisht i testuar 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 punĂ«tore me klasterin tonĂ«, duhet ta konfigurojmĂ« sipas pikave 1 dhe 2 tĂ« udhĂ«zimeve, ose tĂ« shfrytĂ«zojmĂ« , pastaj tĂ« ekzekutoni komandĂ«n nga dalja «kubeadm init âŠÂ», tĂ« cilĂ«n e shkruam nĂ« fazĂ«n e mĂ«parshme:
kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN --discovery-token-ca-cert-hash $TOKEN_HASH
- Të kontrollojmë që klasteri ynë është inicializuar dhe ka filluar punën:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
Gati! Tani mund të vendosni ngarkesën tuaj në klasterin tuaj K8s.
- Për të inicializuar klasterin ekzekutoni komandën:
ĂfarĂ« na pret pĂ«rpara
Shpresoj që udhëzimi më sipër ju ndihmoi të kurseni pak kohë dhe nerva.
E ardhmja e proceseve nĂ« industri shpesh varet nga mĂ«nyra sesi ato priten nga shumica e pĂ«rdoruesve tĂ« zakonshĂ«m dhe zhvilluesve tĂ« softuerĂ«ve tĂ« tjerĂ« nĂ« niĆen pĂ«rkatĂ«se. NdĂ«rsa nuk Ă«shtĂ« shumĂ« e qartĂ« nĂ« cilin pĂ«rfundim do tĂ« çojnĂ« iniciativat OCI pas disa vitesh, ne do tĂ« ndjekim me kĂ«naqĂ«si kĂ«tĂ«. Mund ta ndani mendimin tuaj tani nĂ« komentet.
Qëndroni lidhur!
Ky artikull u shfaq falë burimeve të mëposhtme:
- Seksioni mbi Container runtimes në
- e projektit CRI-O në Internet
- Artikujve në bloget e Red Hat: , dhe shumë të tjerë
Burimi: habr.com
