KÄds ir konteinera izpildlaika atsaistÄ«Å”anas atseviŔķos instrumentu komponentos skaistums? Jo Ä«paÅ”i Å”os rÄ«kus var sÄkt kombinÄt, lai tie aizsargÄtu viens otru.
Daudzus cilvÄkus piesaista ideja par konteineru OCI attÄlu izveidi
TÄpÄc cilvÄki pastÄvÄ«gi cenÅ”as palaist Buildah konteinerÄ. ÄŖsÄk sakot, mÄs izveidojÄm
koriÄ£ÄÅ”ana
Å ie attÄli ir veidoti no Dockerfiles, ko var atrast mapÄ esoÅ”ajÄ Buildah repozitorijÄ
Å eit mÄs apsvÄrsim
# stable/Dockerfile
#
# Build a Buildah container image from the latest
# stable version of Buildah on the Fedoras Updates System.
# https://bodhi.fedoraproject.org/updates/?search=buildah
# This image can be used to create a secured container
# that runs safely with privileges within the container.
#
FROM fedora:latest
# Don't include container-selinux and remove
# directories used by dnf that are just taking
# up space.
RUN yum -y install buildah fuse-overlayfs --exclude container-selinux; rm -rf /var/cache /var/log/dnf* /var/log/yum.*
# Adjust storage.conf to enable Fuse storage.
RUN sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf
OverlayFS vietÄ, kas ieviesta resursdatora Linux kodola lÄ«menÄ«, mÄs izmantojam programmu konteinerÄ
podman run --device /dev/fuse quay.io/buildahctr ...
RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock
TÄlÄk mÄs izveidojam direktoriju papildu glabÄÅ”anai.
# Set up environment variables to note that this is
# not starting with user namespace and default to
# isolate the filesystem with chroot.
ENV _BUILDAH_STARTED_IN_USERNS="" BUILDAH_ISOLATION=chroot
Visbeidzot, izmantojot vides mainÄ«go BUILDAH_ISOLATION, mÄs sakÄm, ka Buildah konteiners pÄc noklusÄjuma darbojas ar chroot izolÄciju. Å eit papildu izolÄcija nav nepiecieÅ”ama, jo mÄs jau strÄdÄjam konteinerÄ. Lai Buildah varÄtu izveidot savus ar nosaukumvietu atdalÄ«tus konteinerus, ir nepiecieÅ”ama SYS_ADMIN privilÄÄ£ija, kas prasÄ«tu konteinera SELinux un SECCOMP noteikumu atviegloÅ”anu, kas ir pretrunÄ ar mÅ«su vÄlmi veidot no droÅ”a konteinera.
Darbojas Buildah konteinerÄ
IepriekÅ” apspriestÄ Buildah konteinera attÄla diagramma ļauj elastÄ«gi mainÄ«t Å”Ädu konteineru palaiÅ”anas metodes.
Ätrums pret droŔību
Datora droŔība vienmÄr ir kompromiss starp procesa Ätrumu un to, cik daudz aizsardzÄ«bas ir ap to. Å is apgalvojums attiecas arÄ« uz konteineru montÄžu, tÄpÄc tÄlÄk mÄs apsvÄrsim Å”Äda kompromisa iespÄjas.
IepriekÅ” apspriestais konteinera attÄls saglabÄs savu krÄtuvi mapÄ /var/lib/containers. TÄpÄc mums ir jÄpievieno saturs Å”ajÄ mapÄ, un tas, kÄ mÄs to darÄ«sim, lielÄ mÄrÄ ietekmÄs konteinera attÄlu veidoÅ”anas Ätrumu.
ApsvÄrsim trÄ«s iespÄjas.
Opcija 1. Ja nepiecieÅ”ama maksimÄla droŔība, tad katram konteineram varat izveidot savu konteineru/attÄla mapi un savienot to ar konteineru caur volume-mount. TurklÄt ievietojiet konteksta direktoriju paÅ”Ä konteinerÄ, mapÄ /build:
# mkdir /var/lib/containers1
# podman run -v ./build:/build:z -v /var/lib/containers1:/var/lib/containers:Z quay.io/buildah/stable
buildah -t image1 bud /build
# podman run -v /var/lib/containers1:/var/lib/containers:Z quay.io/buildah/stable buildah push image1 registry.company.com/myuser
# rm -rf /var/lib/containers1
DroŔība. Buildah, kas darbojas Å”ÄdÄ konteinerÄ, ir maksimÄla droŔība: tai netiek pieŔķirtas nekÄdas root tiesÄ«bas, izmantojot iespÄjas, un uz to attiecas visi SECOMP un SELinux ierobežojumi. Å Ädu konteineru var palaist pat ar lietotÄja vÄrdu telpas izolÄciju, pievienojot tÄdu opciju kÄ āuidmap 0: 100000:10000.
VeiktspÄja. Bet veiktspÄja Å”eit ir minimÄla, jo visi attÄli no konteineru reÄ£istriem katru reizi tiek kopÄti uz resursdatoru, un keÅ”atmiÅa nedarbojas vispÄr. Pabeidzot darbu, Buildah konteineram ir jÄnosÅ«ta attÄls uz reÄ£istru un jÄiznÄ«cina resursdatora saturs. NÄkamajÄ reizÄ, kad konteinera attÄls tiks izveidots, tas bÅ«s vÄlreiz jÄlejupielÄdÄ no reÄ£istra, jo lÄ«dz tam laikam resursdatorÄ nekas nebÅ«s palicis.
Opcija 2. Ja jums nepiecieÅ”ama Docker lÄ«meÅa veiktspÄja, varat uzstÄdÄ«t resursdatora konteineru/krÄtuvi tieÅ”i konteinerÄ.
# podman run -v ./build:/build:z -v /var/lib/containers:/var/lib/containers --security-opt label:disabled quay.io/buildah/stable buildah -t image2 bud /build
# podman run -v /var/lib/containers:/var/lib/containers --security-opt label:disabled quay.io/buildah/stable buildah push image2 registry.company.com/myuser
DroŔība. Å is ir nedroÅ”Äkais konteineru izveides veids, jo tas ļauj konteineram modificÄt resursdatora krÄtuvi un potenciÄli var ievadÄ«t Podman vai CRI-O ar ļaunprÄtÄ«gu attÄlu. TurklÄt jums bÅ«s jÄatspÄjo SELinux atdalÄ«Å”ana, lai procesi Buildah konteinerÄ varÄtu mijiedarboties ar resursdatora krÄtuvi. Å emiet vÄrÄ, ka Ŕī opcija joprojÄm ir labÄka par Docker ligzdu, jo konteineru bloÄ·Ä atlikuÅ”ie droŔības lÄ«dzekļi, un tas nevar vienkÄrÅ”i palaist konteineru resursdatorÄ.
VeiktspÄja. Å eit tas ir maksimÄlais, jo keÅ”atmiÅa tiek pilnÄ«bÄ izmantota. Ja Podman vai CRI-O jau ir lejupielÄdÄjuÅ”i nepiecieÅ”amo attÄlu resursdatorÄ, tad Buildah procesam konteinera iekÅ”ienÄ tas nebÅ«s jÄlejupielÄdÄ vÄlreiz, un arÄ« turpmÄkÄs uz Ŕī attÄla bÄzes veidotÄs versijas varÄs paÅemt nepiecieÅ”amo no keÅ”atmiÅas. .
Opcija 3. Å Ä«s metodes bÅ«tÄ«ba ir apvienot vairÄkus attÄlus vienÄ projektÄ ar kopÄju mapi konteinera attÄliem.
# mkdir /var/lib/project3
# podman run --security-opt label_level=s0:C100, C200 -v ./build:/build:z
-v /var/lib/project3:/var/lib/containers:Z quay.io/buildah/stable buildah -t image3 bud /build
# podman run --security-opt label_level=s0:C100, C200
-v /var/lib/project3:/var/lib/containers quay.io/buildah/stable buildah push image3 registry.company.com/myuser
Å ajÄ piemÄrÄ mÄs nedzÄÅ”am projekta mapi (/var/lib/project3) starp palaiÅ”anas reizÄm, tÄpÄc visas turpmÄkÄs projekta bÅ«ves gÅ«st labumu no keÅ”atmiÅas saglabÄÅ”anas.
DroŔība. Kaut kas starp 1. un 2. opciju. No vienas puses, konteineriem nav piekļuves resursdatora saturam, un attiecÄ«gi tie nevar ievietot kaut ko sliktu Podman/CRI-O attÄlu krÄtuvÄ. No otras puses, konteiners savas konstrukcijas ietvaros var traucÄt citu konteineru montÄžu.
VeiktspÄja. Å eit tas ir sliktÄk nekÄ tad, ja resursdatora lÄ«menÄ« izmantojat koplietotu keÅ”atmiÅu, jo nevarat izmantot attÄlus, kas jau ir lejupielÄdÄti, izmantojot Podman/CRI-O. TomÄr, tiklÄ«dz Buildah ir lejupielÄdÄjis attÄlu, attÄlu var izmantot jebkurÄ turpmÄkajÄ projekta bÅ«vniecÄ«bÄ.
Papildu krÄtuve
Š£
Ja ritiniet uz augÅ”u un skatÄties uz Dockerfile, ko izmantojam, lai izveidotu attÄlu quay.io/buildah/stable, ir Å”Ädas rindas:
# Adjust storage.conf to enable Fuse storage.
RUN sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf
RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock
PirmajÄ rindÄ mÄs modificÄjam /etc/containers/storage.conf konteinera attÄlÄ, liekot krÄtuves draiverim izmantot āadditionalimagestoresā mapÄ /var/lib/shared. Un nÄkamajÄ rindÄ mÄs izveidojam koplietotu mapi un pievienojam pÄris bloÄ·ÄÅ”anas failus, lai konteineri / krÄtuves netiktu ļaunprÄtÄ«gi izmantoti. BÅ«tÄ«bÄ mÄs vienkÄrÅ”i izveidojam tukÅ”u konteinera attÄlu veikalu.
Ja uzstÄdÄ«sit konteinerus/krÄtuvi augstÄk par Å”o mapi, Buildah varÄs izmantot attÄlus.
Tagad atgriezÄ«simies pie iepriekÅ” apspriestÄs 2. iespÄjas, kad Buildah konteiners var lasÄ«t un rakstÄ«t konteineros/uzglabÄt resursdatoros un attiecÄ«gi tam ir maksimÄla veiktspÄja, pateicoties attÄlu saglabÄÅ”anai keÅ”atmiÅÄ Podman/CRI-O lÄ«menÄ«, taÄu tas nodroÅ”ina minimÄlu droŔību, jo tas var rakstÄ«t tieÅ”i krÄtuvÄ. Tagad pievienosim Å”eit papildu krÄtuvi un iegÅ«sim labÄko no abÄm pasaulÄm.
# mkdir /var/lib/containers4
# podman run -v ./build:/build:z -v /var/lib/containers/storage:/var/lib/shared:ro -v /var/lib/containers4:/var/lib/containers:Z quay.io/buildah/stable
buildah -t image4 bud /build
# podman run -v /var/lib/containers/storage:/var/lib/shared:ro
-v >/var/lib/containers4:/var/lib/containers:Z quay.io/buildah/stable buildah push image4 registry.company.com/myuser
# rm -rf /var/lib/continers4
Å emiet vÄrÄ, ka resursdatora /var/lib/containers/storage ir pievienots mapÄ /var/lib/shared konteinera iekÅ”pusÄ tikai lasÄ«Å”anas režīmÄ. TÄpÄc, strÄdÄjot konteinerÄ, Buildah var izmantot visus attÄlus, kas iepriekÅ” tika lejupielÄdÄti, izmantojot Podman/CRI-O (sveiki, Ätrums), bet var rakstÄ«t tikai savÄ krÄtuvÄ (sveiki, droŔība). Å emiet vÄrÄ arÄ« to, ka tas tiek darÄ«ts, neatspÄjojot konteinera SELinux atdalÄ«Å”anu.
Svarīgs nianses
NekÄdÄ gadÄ«jumÄ nedrÄ«kst dzÄst attÄlus no pamatÄ esoÅ”Äs krÄtuves. PretÄjÄ gadÄ«jumÄ Buildah konteiners var avarÄt.
Un tÄs nav visas priekÅ”rocÄ«bas
Papildu krÄtuves iespÄjas neaprobežojas tikai ar iepriekÅ” minÄto scenÄriju. PiemÄram, varat ievietot visus konteinera attÄlus koplietotÄ tÄ«kla krÄtuvÄ un pieŔķirt tai piekļuvi visiem Buildah konteineriem. PieÅemsim, ka mums ir simtiem attÄlu, ko mÅ«su CI/CD sistÄma regulÄri izmanto, lai izveidotu konteinera attÄlus. MÄs koncentrÄjam visus Å”os attÄlus vienÄ krÄtuves resursdatorÄ un pÄc tam, izmantojot vÄlamos tÄ«kla krÄtuves rÄ«kus (NFS, Gluster, Ceph, ISCSI, S3...), mÄs atveram vispÄrÄju piekļuvi Å”ai krÄtuvei visiem Buildah vai Kubernetes mezgliem.
Tagad pietiek uzstÄdÄ«t Å”o tÄ«kla krÄtuvi Buildah konteinerÄ vietnÄ /var/lib/shared, un viss ā Buildah konteineriem vairs nav jÄlejupielÄdÄ attÄli, izmantojot vilkÅ”anu. TÄdÄjÄdi mÄs izmetam pirmsapdzÄ«votÄ«bas fÄzi un nekavÄjoties esam gatavi izritinÄt konteinerus.
Un, protams, to var izmantot dzÄ«vÄ Kubernetes sistÄmÄ vai konteineru infrastruktÅ«rÄ, lai palaistu un palaistu konteinerus jebkur bez jebkÄdas attÄlu lejupielÄdes. TurklÄt konteinera reÄ£istrs, saÅemot push pieprasÄ«jumu augÅ”upielÄdÄt tajÄ atjauninÄtu attÄlu, var automÄtiski nosÅ«tÄ«t Å”o attÄlu uz koplietojamo tÄ«kla krÄtuvi, kur tas uzreiz kļūst pieejams visiem mezgliem.
Konteinera attÄlu izmÄrs dažkÄrt var sasniegt vairÄkus gigabaitus. Papildu krÄtuves funkcionalitÄte ļauj izvairÄ«ties no Å”Ädu attÄlu klonÄÅ”anas vairÄkos mezglos un padara konteineru palaiÅ”anu gandrÄ«z acumirklÄ«.
TurklÄt mÄs paÅ”laik strÄdÄjam pie jaunas funkcijas, ko sauc par pÄrklÄjuma tilpuma stiprinÄjumiem, kas padarÄ«s konteineru bÅ«vniecÄ«bu vÄl ÄtrÄku.
SecinÄjums
Buildah palaiÅ”ana konteinerÄ programmÄ Kubernetes/CRI-O, Podman vai pat Docker ir iespÄjama, vienkÄrÅ”a un daudz droÅ”Äka nekÄ docker.socket izmantoÅ”ana. MÄs esam ievÄrojami palielinÄjuÅ”i elastÄ«bu darbÄ ar attÄliem, lai jÅ«s varÄtu tos palaist dažÄdos veidos, lai optimizÄtu lÄ«dzsvaru starp droŔību un veiktspÄju.
Papildu krÄtuves funkcionalitÄte ļauj paÄtrinÄt vai pat pilnÄ«bÄ novÄrst attÄlu lejupielÄdi mezglos.
Avots: www.habr.com