Tere! Minu nimi on Sergei, ma olen DevOps Surfis. Surfis on DevOps-osakonna eesmÀrk mitte ainult luua koostööd spetsialistide vahel ja integreerida tööprotsesse, vaid ka aktiivselt uurida ja rakendada uusimaid tehnoloogiaid nii oma infrastruktuuri kui ka kliendi infrastruktuuri.
Allpool rÀÀgin natuke tehnoloogilise kihi muudatustest konteinerite osas, millega kohtusime distributsiooni uurimisel. CentOS 8 ja sellest, mis asi on CRI-O ja kuidas kiiresti seadistada sellega tÀitevkeskkond Kubernetes.

Miks Docker ei ole CentOS 8 standardsetes tarnetes
PÀrast viimaseid suuri vÀljaandeid RHEL 8 vÔi CentOS 8 ei saa mitte mÀrkamatuks jÀÀda, et nendes distributsioonides ja ametlikes hoidlatest puudub rakendus Docker, mida ideoloogiliselt ja funktsionaalselt asendavad pakid Podman, Buildah (mis on distributsioonis vaikimisi olemas) ja CRI-O. See on seotud standardite praktilise elluviimisega, mida arendavad sealhulgas ja Red Hat Open Container Initiative'i (OCI) raames.
OCI, mis on osa The Linux Foundationist, eesmĂ€rk on luua avatud tööstusstandardeid konteinerite formaatide ja tĂ€itevkeskkonna jaoks, mis lahendaksid mitmeid probleeme. Esiteks, nad ei tohiks olla vastuolus Linuxi filosoofiaga (nĂ€iteks et iga programm peaks tegema ainult ĂŒhte asja, ja Docker on justkui tegevuste kombain). Teiseks, nad peaksid olema vĂ”imelised kĂ”rvaldamiseks kĂ”iki tarkvara puudusi. DockerKolmandaks, nad peaksid olema tĂ€ielikult ĂŒhilduvad juhtivate kaubandusplatvormide Ă€rinĂ”uetega, mis on esitatud konteineriseeritud rakenduste juurutamiseks, haldamiseks ja hooldamiseks (nĂ€iteks Red Hat OpenShift).
Puudused Docker ja uue tarkvara eelised on juba ĂŒsna pĂ”hjalikult kirjeldatud , ning projekti OCI raames pakutava tarkvara ja selle arhitektuuri eripĂ€ra kohta saab lĂ€hemalt lugeda ametlikest dokumentatsioonidest ja artiklitest, nii Red HatÂŽilt (hea Red Hat blogis) kui ka kolmandatelt osapooltelt. .
Oluline on mÀrkida, milliseid funktsioone pakutava kihi komponendid omavad:
- Podman â otsene koostöö konteinerite ja pildihoidlate vahel lĂ€bi runC protsessi;
- Buildah â piltide koostamine ja registrisse laadimine;
- CRI-O â tĂ€itevkeskkond konteinerite orkestreerimissĂŒsteemidele (nĂ€iteks Kubernetes).
Ma arvan, et kogu stacki komponentide vahelise suhtluse ĂŒldise skeemi mĂ”istmiseks on mĂ”istlik siin nĂ€idata sidemete skeemi Kubernetes c runC ja madalama taseme raamatukogudega kasutades CRI-O:

CRI-O ja Kubernetes peavad jĂ€rgima sama vĂ€ljaandmis- ja toetustsĂŒklit (ĂŒhilduvuse maatriks on vĂ€ga lihtne: suuremad versioonid Kubernetes ja CRI-O ĂŒhtivad), ja arvestades suunatud lĂ€henemist kogu ja pĂ”hjaliku testimise tagamisel arendajate poolt, annab see meile Ă”iguse oodata maksimaalselt saavutatavat stabiilsust igasugustes kasutusstsenaariumites (siin aitab ka suhteliselt kerge CRI-O vĂ”rreldes Docker funktsionaalsuse sihipĂ€rase piiramisest).
Paigaldamisel Kubernetes «Ôige tee» moel (OCI arvates, muidugi) kasutades CRI-O . Tundub, et CentOS 8 kohtasime vĂ€ikeseid raskusi, kuid need suutsime edukalt ĂŒletada. Olen valmis jagama teiega installatsiooni ja seadistamise juhendit, mis kokku vĂ”tab vaid 10 minutit.
Kuidas kÀivitada Kubernetes CentOS 8-s kasutades CRI-O keskkonda
Eeltingimused: vĂ€hemalt ĂŒhe vÔÔrustaja olemasolu (2 tuuma, 4 GB RAM, vĂ€hemalt 15 GB salvestusruumi), millel on installitud CentOS 8 (soovitatav on installiprofiil «Server»), samuti selle jaoks kirje kohalikus DNS-is (kui hĂ€davajalik, saab kasutada kirjet /etc/hosts). Ja Ă€rge unustage .
KÔiki toiminguid vÔÔrustajas teostame root-kasutaja nime all, olge ettevaatlik.
- Esimesel sammul seadistame operatsioonisĂŒsteemi, installime ja seadistame CRI-O eeltingimused.
- Uuendame operatsioonisĂŒsteemi:
dnf -y update
- SeejĂ€rel tuleb seadistada tulemĂŒĂŒr ja SELinux. Siin sĂ”ltub kĂ”ik meie vÔÔrustaja vĂ”i vÔÔrustajate töötamiskeskkonnast. Saate kas seadistada tulemĂŒĂŒri vastavalt soovitustele , vĂ”i kui olete usaldusvÀÀrses vĂ”rgus vĂ”i kasutate kolmanda osapoole tulemĂŒĂŒri, muuta vaikimisi tsooni usaldusvÀÀrseks vĂ”i tulemĂŒĂŒri vĂ€lja lĂŒlitada:
firewall-cmd --set-default-zone trusted firewall-cmd --reloadTulemĂŒĂŒri vĂ€ljalĂŒlitamiseks saate kasutada jĂ€rgmist kĂ€sku:
systemctl disable --now firewalldSELinux tuleb vĂ€lja lĂŒlitada vĂ”i viia «permissive» reĆŸiimi:
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- laadime vajalikke kernelimooduleid ja pakette ning seadistame moduliga «br_netfilter» automaatse laadimise sĂŒsteemi kĂ€ivitamisel:
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- Pakettide forwardimise aktiveerimiseks ja liikluse korrektseks töötlemiseks teeme vajalikud seaded:
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 EOFRakendame tehtud seadeid:
sysctl --system
- Seame vajaliku versiooni CRI-O (peamine versioon CRI-O, nagu juba mainitud, vastab nÔutavale versioonile Kubernetes), sest viimase stabiilse versiooni Kubernetes praegu on 1.18:
export REQUIRED_VERSION=1.18Lisame vajalikud hoidlad:
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ĂŒĂŒd saame installida CRI-O:
dnf -y install cri-oJuhime tĂ€helepanu esimesel nĂŒansil, millega me installimise kĂ€igus kokku puutume: konfiguratsiooni redigeerimine on vajalik CRI-O enne teenuse kĂ€ivitamist, kuna nĂ”utud komponent conmon on teises asukohas:
sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.confNĂŒĂŒd saab aktiveerida ja kĂ€ivitada daemon'i CRI-O:
systemctl enable --now crioSaame kontrollida daemon'i staatust:
systemctl status crio
- Uuendame operatsioonisĂŒsteemi:
- Installimine ja aktiveerimine Kubernetes.
- Lisame vajaliku hoidla:
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 EOFNĂŒĂŒd saame installida Kubernetes (versioonid 1.18, nagu eelnevalt mainitud):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- Teine oluline nĂŒanss: kuna me ei kasuta daemon'i Docker, vaid kasutame daemon'i CRI-O, enne kĂ€ivitamist ja initsialiseerimist Kubernetes on vajalik teha vastavad seaded konfiguratsioonifailis /var/lib/kubelet/config.yaml, enne tuleb luua vajalik kataloog:
mkdir /var/lib/kubelet cat < /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- Kolmas oluline punkt, millega me installimise kÀigus kokku puutume: hoolimata sellest, et oleme mÀÀranud kasutatava draiveri cgroup, ja selle seadistamine on argumentide kaudu, mis on edastatud kubelet aegunud (mis on otse dokumentatsioonis mÀrgitud), peame faili lisama argumendid, vastasel juhul ei initsialiseeru meie klasster:
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
- NĂŒĂŒd saame deemonit aktiveerida kubelet:
sudo systemctl enable --now kubeletSelle seadistamiseks kontrollplaan vÔi töötlusmasin pÀringud vaid mÔne minutiga, saate kasutada .
- Lisame vajaliku hoidla:
- On aeg meie klaster initsialiseerida.
- Klusteri initsialiseerimiseks kÀivitage kÀsk:
kubeadm init --pod-network-cidr=10.244.0.0/16Kohustuslik on ĂŒles kirjutada klastrisse liitumise kĂ€sk "kubeadm join âŠ", mida pakutakse kasutada vĂ€ljundi lĂ”pus, vĂ”i vĂ€hemalt antud tokenid.
- Paigaldame CNI plugina Pod vĂ”rgu tööks. Soovitan kasutada Calico. VĂ”ib-olla on populaarsem Flannel on ĂŒhilduvusprobleemidega nftables, ja Calico on ainus CNI rakendus, mida projekt soovitab ja mis on tĂ€ielikult testitud Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- Töötlusmasina liitmiseks meie klastri peab selle seadistama vastavalt juhendile punktides 1 ja 2 vĂ”i kasutama , seejĂ€rel kĂ€ivitage vĂ€ljundis "kubeadm init âŠ" kĂ€sk, mille kirjutasime eelmisel etapil:
kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN --discovery-token-ca-cert-hash $TOKEN_HASH
- Kontrollime, kas meie klaster on initsialiseeritud ja töötab:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
Valmis! Saate juba oma K8s klastris kasulikku koormust paigutada.
- Klusteri initsialiseerimiseks kÀivitage kÀsk:
Mis meid ees ootab
Loodan, et ĂŒlaltoodud juhend aitas teil kokku hoida veidi aega ja nĂ€rve.
Tööstuses toimuva vĂ€lja arenemine sĂ”ltub sageli sellest, kuidas peamine leibkond vastab lĂ”ppkasutajate ja muudelt tarkvaraarendajatelt sihtrĂŒhmas. Hetkel ei ole veel selge, kuhu OCI algatused mĂ”ne aasta pĂ€rast viivad, kuid me jĂ€lgime seda hea meelega. Oma arvamust saate jagada kohe kommentaarides.
JĂ€lgige meid!
See artikkel ilmus tÀnu jÀrgmistele allikatele:
- Container runtimes jaotises
- Red Hati blogi artiklitele:
- siin , Tere! Minu nimi on Sergei, olen DevOps Surfis.
Allikas: habr.com
