Bongu! Jisimni Sergey, jien DevOps fuq Surf. Id-dipartiment DevOps f'Surf jimmira mhux biss li jistabbilixxi interazzjoni bejn speċjalisti u jintegra l-proċessi tax-xogħol, iżda wkoll li jirriċerka b'mod attiv u jimplimenta t-teknoloġiji attwali kemm fl-infrastruttura tiegħu stess kif ukoll fl-infrastruttura tal-klijent.
Hawn taħt se nitkellem ftit dwar il-bidliet fil-munzell tat-teknoloġija għall-kontenituri li ltqajna magħhom waqt li nistudjaw id-distribuzzjoni CentOS 8 u dwar dak li hu CRI-O u kif twaqqaf malajr ambjent eżekutibbli għal Kubernetes.

Għaliex Docker mhux inkluż f'CentOS 8?
Wara l-installazzjoni l-aħħar ħarġiet maġġuri rhel 8 jew CentOS 8 wieħed ma jistax ma jinnotax: dawn id-distribuzzjonijiet u repożitorji uffiċjali ma fihomx l-applikazzjoni Docker, li ideoloġikament u funzjonalment jissostitwixxu l-pakketti podman, Buildah (preżenti fid-distribuzzjoni awtomatikament) u CRI-O. Dan huwa dovut għall-implimentazzjoni prattika ta’ standards żviluppati, fost affarijiet oħra, minn Red Hat bħala parti mill-proġett Open Container Initiative (OCI).
L-għan ta 'OCI, li huwa parti minn The Linux Foundation, huwa li toħloq standards industrijali miftuħa għal formati ta' kontenitur u runtimes li jsolvu diversi problemi f'daqqa. L-ewwelnett, ma kkontradixxewx il-filosofija tal-Linux (pereżempju, fil-parti li kull programm għandu jwettaq azzjoni waħda, u Docker hija tip ta 'all-in-one combine). It-tieni, jistgħu jeliminaw in-nuqqasijiet kollha eżistenti fis-softwer Docker. It-tielet, ikunu kompletament kompatibbli mar-rekwiżiti tan-negozju ta 'pjattaformi kummerċjali ewlenin għall-iskjerament, il-ġestjoni u s-servizz ta' applikazzjonijiet fil-kontejners (pereżempju, Red Hat OpenShift).
Limitazzjonijiet Docker u l-vantaġġi tas-softwer il-ġdid diġà ġew deskritti f'xi dettall fi , u deskrizzjoni dettaljata tal-munzell tas-softwer kollu offrut fi ħdan il-proġett OCI u l-karatteristiċi arkitettoniċi tiegħu jistgħu jinstabu fid-dokumentazzjoni uffiċjali u l-artikoli minn Red Hat innifsu (mhux ħażin fil-blog ta’ Red Hat) u f’partijiet terzi .
Huwa importanti li wieħed jinnota liema funzjonalità għandhom il-komponenti tal-munzell propost:
- podman — interazzjoni diretta mal-kontenituri u l-ħażna tal-immaġni permezz tal-proċess runC;
- Buildah — l-assemblaġġ u t-tlugħ ta' immaġini fir-reġistru;
- CRI-O — ambjent eżekutibbli għal sistemi ta' orkestrazzjoni tal-kontejners (pereżempju, Kubernetes).
Naħseb li biex tifhem l-iskema ġenerali ta 'interazzjoni bejn il-komponenti tal-munzell, huwa rakkomandabbli li tipprovdi dijagramma ta' konnessjoni hawn Kubernetes c runC u libreriji ta' livell baxx bl-użu CRI-O:

CRI-O и Kubernetes jaderixxu mal-istess ċiklu ta 'rilaxx u appoġġ (il-matriċi ta' kompatibilità hija sempliċi ħafna: verżjonijiet ewlenin Kubernetes и CRI-O jikkoinċidu), u dan, b'kont meħud tal-fokus fuq l-ittestjar komplut u komprensiv tal-operat ta 'dan il-munzell mill-iżviluppaturi, jagħtina d-dritt li nistennew l-istabbiltà massima li tista' tinkiseb fl-operazzjoni taħt kwalunkwe xenarju ta 'użu (il-ħeffa relattiva hija wkoll ta' benefiċċju hawnhekk CRI-O meta mqabbel ma ' Docker minħabba limitazzjoni intenzjonata tal-funzjonalità).
Meta tkun qed tinstalla Kubernetes "mod it-tajjeb" mod (skond OCI, ovvjament) bl-użu CRI-O fuq CentOS 8 Iltqajna ma’ xi diffikultajiet żgħar, li, madankollu, għelbuhom b’suċċess. Inkun kuntent li naqsam miegħek struzzjonijiet ta 'installazzjoni u konfigurazzjoni, li b'kollox se jieħdu madwar 10 minuti.
Kif tuża Kubernetes fuq CentOS 8 billi tuża l-qafas CRI-O
Prerekwiżiti: preżenza ta 'mill-inqas host wieħed (2 cores, 4 GB RAM, mill-inqas 15 GB ħażna) b'installat CentOS 8 (il-profil ta 'installazzjoni "Server" huwa rakkomandat), kif ukoll daħliet għalih fid-DNS lokali (bħala l-aħħar għażla, tista' tgħaddi minn dħul f'/etc/hosts). U tinsiex .
Aħna nwettqu l-operazzjonijiet kollha fuq il-host bħala l-utent għerq, oqgħod attent.
- Fl-ewwel pass, aħna ser tikkonfigura l-OS, ninstallaw u nikkonfiguraw dipendenzi preliminari għal CRI-O.
- Ejja naġġornaw l-OS:
dnf -y update
- Sussegwentement għandek bżonn tikkonfigura l-firewall u SELinux. Hawnhekk kollox jiddependi fuq l-ambjent li fih se jaħdmu l-host jew hosts tagħna. Tista 'jew twaqqaf firewall skond ir-rakkomandazzjonijiet minn , jew, jekk inti fuq netwerk ta 'fiduċja jew tuża firewall ta' parti terza, ibdel iż-żona default għal fiduċja jew itfi l-firewall:
firewall-cmd --set-default-zone trusted firewall-cmd --reloadBiex itfi l-firewall tista' tuża l-kmand li ġej:
systemctl disable --now firewalldSELinux jeħtieġ li jintefa jew jinxtegħel għall-modalità "permissiva":
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- Tgħabbi l-moduli u l-pakketti tal-kernel meħtieġa, ikkonfigura t-tagħbija awtomatika tal-modulu "br_netfilter" fl-istartjar tas-sistema:
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- Biex nattivaw it-trażmissjoni tal-pakketti u jikkoreġu l-ipproċessar tat-traffiku, aħna se nagħmlu s-settings xierqa:
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 EOFapplika s-settings li saru:
sysctl --system
- issettja l-verżjoni meħtieġa CRI-O (verżjoni ewlenija CRI-O, kif diġà ssemma, jaqblu mal-verżjoni meħtieġa Kubernetes), mill-aħħar verżjoni stabbli Kubernetes bħalissa 1.18:
export REQUIRED_VERSION=1.18żid ir-repożitorji meħtieġa:
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
- issa nistgħu ninstallaw CRI-O:
dnf -y install cri-oOqgħod attent għall-ewwel sfumatura li niltaqgħu magħhom matul il-proċess ta 'installazzjoni: għandek bżonn teditja l-konfigurazzjoni CRI-O qabel ma jibda s-servizz, peress li l-komponent komuni meħtieġ għandu post differenti minn dak speċifikat:
sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.confIssa tista 'tattiva u tibda d-daemon CRI-O:
systemctl enable --now crioTista' tiċċekkja l-istatus tad-daemon:
systemctl status crio
- Ejja naġġornaw l-OS:
- Installazzjoni u attivazzjoni Kubernetes.
- Ejja nżidu r-repożitorju meħtieġ:
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 EOFIssa nistgħu ninstallaw Kubernetes (verżjoni 1.18, kif imsemmi hawn fuq):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- It-tieni sfumatura importanti: peress li aħna ma nużawx daemon Docker, iżda nużaw id-daemon CRI-O, qabel it-tnedija u l-inizjalizzazzjoni Kubernetes trid tagħmel is-settings xierqa fil-fajl tal-konfigurazzjoni /var/lib/kubelet/config.yaml, wara li l-ewwel ħoloq id-direttorju mixtieq:
mkdir /var/lib/kubelet cat <<EOF > /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- It-tielet punt importanti li niltaqgħu magħhom waqt l-installazzjoni: minkejja l-fatt li indikajna s-sewwieq użat cgroup, u l-konfigurazzjoni tagħha permezz tal-argumenti mgħoddija kubelet hija skaduta (kif iddikjarat b'mod espliċitu fid-dokumentazzjoni), irridu nżidu argumenti mal-fajl, inkella l-cluster tagħna mhux se jiġi inizjalizzat:
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
- Issa nistgħu nattivaw id-daemon kubelet:
sudo systemctl enable --now kubeletBiex tippersonalizza pjan ta' kontroll jew ħaddiem nodi f'minuti, tista 'tuża .
- Ejja nżidu r-repożitorju meħtieġ:
- Wasal iż-żmien li inizjalizzaw il-cluster tagħna.
- Biex tibda l-cluster, mexxi l-kmand:
kubeadm init --pod-network-cidr=10.244.0.0/16Kun żgur li tikteb il-kmand biex tingħaqad mal-cluster "kubeadm join ...", li inti mitlub tuża fl-aħħar tal-output, jew għall-inqas it-tokens speċifikati.
- Ejja ninstallaw il-plugin (CNI) għan-netwerk Pod. Nirrakkomanda li tuża Calico. Possibilment aktar popolari Flannel għandu kwistjonijiet ta 'kompatibilità ma' nftables, iva u Calico - l-unika implimentazzjoni tas-CNI rakkomandata u ttestjata bis-sħiħ mill-proġett Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- Biex tgħaqqad node tal-ħaddiem mal-cluster tagħna, trid tikkonfigurah skont l-istruzzjonijiet 1 u 2, jew tuża , imbagħad mexxi l-kmand mill-output "kubeadm init..." li ktibna fil-pass preċedenti:
kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN --discovery-token-ca-cert-hash $TOKEN_HASH
- Ejja niċċekkjaw li l-cluster tagħna huwa inizjalizzat u beda jaħdem:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
Lest! Diġà tista' tospita payloads fuq il-cluster K8s tiegħek.
- Biex tibda l-cluster, mexxi l-kmand:
Dak li jistenniena 'l quddiem
Nittama li l-istruzzjonijiet ta 'hawn fuq għenuk tiffranka ftit ħin u nervi.
Ir-riżultat tal-proċessi li jseħħu fl-industrija ħafna drabi jiddependi fuq kif jiġu aċċettati mill-biċċa l-kbira tal-utenti finali u l-iżviluppaturi ta 'softwer ieħor fin-niċċa korrispondenti. Għadu mhux ċar għal kollox għal xiex se jwasslu l-inizjattivi OCI fi ftit snin, iżda se nkunu qed naraw bi pjaċir. Tista' taqsam l-opinjoni tiegħek issa fil-kummenti.
Soġġorn sintonizzat!
Dan l-artiklu deher grazzi għas-sorsi li ġejjin:
- Taqsima dwar ir-runtimes tal-Kontenitur
- Proġett CRI-O fuq l-Internet
- Artikli tal-blog Red Hat: , u ħafna oħrajn
Sors: www.habr.com
