X'inhi s-sbuħija tad-diżakkoppjar tar-runtime tal-kontenitur f'komponenti ta 'għodda separati? B'mod partikolari, dawn l-għodod jistgħu jibdew jingħaqdu sabiex jipproteġu lil xulxin.
Ħafna nies huma attirati mill-idea li jibnu immaġini OCI fil-kontejners ġewwa
Huwa għalhekk li n-nies kontinwament jippruvaw imexxu Buildah f'kontenitur. Fil-qosor, ħloqna
aġġustament
Dawn l-immaġini huma mibnija minn Dockerfiles, li jistgħu jinstabu fir-repożitorju Buildah fil-folder
Hawnhekk se nikkunsidraw
# 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
Minflok OverlayFS, implimentat fil-livell tal-kernel Linux ospitanti, nużaw il-programm ġewwa l-kontenitur
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
Sussegwentement noħolqu direttorju għal ħażna addizzjonali.
# 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
Fl-aħħarnett, billi nużaw il-varjabbli tal-ambjent BUILDAH_ISOLATION, qed ngħidu lill-kontenitur Buildah biex jaħdem b'iżolament chroot awtomatikament. Insulazzjoni addizzjonali mhix meħtieġa hawnhekk, peress li diġà qed naħdmu f'kontenitur. Sabiex Buildah toħloq il-kontenituri separati mill-ispazji tal-isem tagħha stess, huwa meħtieġ il-privileġġ SYS_ADMIN, li jkun jeħtieġ li jiġu rilassati r-regoli SELinux u SECCOMP tal-kontenitur, li jmur kontra l-preferenza tagħna li nibnu minn kontenitur sigur.
Tmexxi Buildah ġewwa kontenitur
Id-dijagramma tal-immaġni tal-kontenitur Buildah diskussa hawn fuq tippermettilek tvarja b'mod flessibbli l-metodi ta 'tnedija ta' kontenituri bħal dawn.
Veloċità kontra s-sigurtà
Is-sigurtà tal-kompjuter hija dejjem kompromess bejn il-veloċità tal-proċess u kemm protezzjoni hija mgeżwra madwaru. Din id-dikjarazzjoni hija vera wkoll meta jiġu mmuntati kontenituri, għalhekk hawn taħt se nikkunsidraw għażliet għal tali kompromess.
L-immaġni tal-kontenitur diskussa hawn fuq se żżomm il-ħażna tagħha f'/var/lib/containers. Għalhekk, għandna bżonn li jintramaw il-kontenut f'dan il-folder, u kif nagħmlu dan se jaffettwa ħafna l-veloċità tal-bini ta 'immaġini tal-kontenitur.
Ejja nikkunsidraw tliet għażliet.
Għażla 1. Jekk tkun meħtieġa sigurtà massima, allura għal kull kontenitur tista 'toħloq il-folder tiegħek stess għall-kontenituri/immaġni u qabbadha mal-kontenitur permezz ta' volum-mount. U barra minn hekk, poġġi d-direttorju tal-kuntest fil-kontenitur innifsu, fil-folder / 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
Sigurtà. Buildah li jaħdem f'kontenitur bħal dan għandu sigurtà massima: ma jingħata l-ebda privileġġ tal-għeruq bl-użu tal-kapaċitajiet, u r-restrizzjonijiet kollha tas-SECOMP u SELinux japplikaw għaliha. Kontenitur bħal dan jista 'saħansitra jitħaddem bl-iżolament tal-User Namespace billi żżid għażla bħal —uidmap 0: 100000:10000.
Prestazzjoni. Iżda l-prestazzjoni hawnhekk hija minima, peress li kwalunkwe immaġni mir-reġistri tal-kontejners tiġi kkupjata lill-host kull darba, u l-caching ma jaħdimx xejn. Meta jlesti x-xogħol tiegħu, il-kontenitur Buildah għandu jibgħat l-immaġni lir-reġistru u jeqred il-kontenut fuq il-host. Il-ħin li jmiss li tinbena l-immaġni tal-kontejner, trid terġa' titniżżel mir-reġistru, peress li sa dak iż-żmien ma jkun fadal xejn fuq il-host.
Għażla 2. Jekk għandek bżonn prestazzjoni fil-livell Docker, tista 'timmonta l-kontenitur/ħażna ospitanti direttament fil-kontenitur.
# 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
Sigurtà. Dan huwa l-inqas mod sigur biex jinbnew kontenituri minħabba li jippermetti li l-kontenitur jimmodifika l-ħażna fuq l-ospitant u jista 'potenzjalment jitma' immaġni malizzjuża lil Podman jew CRI-O. Barra minn hekk, ser ikollok bżonn tiddiżattiva s-separazzjoni SELinux sabiex il-proċessi fil-kontenitur Buildah ikunu jistgħu jinteraġixxu mal-ħażna fuq il-host. Innota li din l-għażla għadha aħjar minn socket Docker minħabba li l-kontenitur huwa msakkar mill-karatteristiċi tas-sigurtà li fadal u ma jistax sempliċement iħaddem kontenitur fuq l-ospitant.
Prestazzjoni. Hawnhekk huwa massimu, peress li l-caching jintuża bis-sħiħ. Jekk Podman jew CRI-O diġà niżżlu l-immaġni meħtieġa lill-ospitant, allura l-proċess Buildah ġewwa l-kontenitur ma jkollux għalfejn jerġa' jniżżlu, u l-bini sussegwenti bbażati fuq din l-immaġni se jkunu jistgħu wkoll jieħdu dak li għandhom bżonn mill-cache. .
Għażla 3. L-essenza ta 'dan il-metodu hija li tgħaqqad diversi stampi fi proġett wieħed b'folder komuni għall-immaġini tal-kontenituri.
# 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
F'dan l-eżempju, aħna ma nħassrux il-folder tal-proġett (/var/lib/project3) bejn il-ġirjiet, għalhekk il-bini sussegwenti kollha fi ħdan il-proġett jibbenefikaw minn caching.
Sigurtà. Xi ħaġa bejn l-għażliet 1 u 2. Min-naħa waħda, il-kontenituri m'għandhomx aċċess għall-kontenut fuq il-host u, għalhekk, ma jistgħux jiżolqu xi ħaġa ħażina fil-ħażna tal-immaġni Podman/CRI-O. Min-naħa l-oħra, bħala parti mid-disinn tiegħu, kontenitur jista 'jinterferixxi mal-assemblaġġ ta' kontenituri oħra.
Prestazzjoni. Hawnhekk huwa agħar milli meta tuża cache kondiviża fil-livell tal-host, peress li ma tistax tuża immaġini li diġà ġew imniżżla bl-użu ta 'Podman/CRI-O. Madankollu, ladarba Buildah tniżżel l-immaġni, l-immaġni tista 'tintuża fi kwalunkwe bini sussegwenti fi ħdan il-proġett.
Ħażna addizzjonali
У
Jekk tiskrollja 'l fuq u tħares lejn id-Dockerfile li nużaw biex nibnu l-immaġni quay.io/buildah/stable, hemm linji bħal dawn:
# 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
Fl-ewwel linja, aħna nimmodifikaw /etc/containers/storage.conf ġewwa l-immaġni tal-kontenitur, billi ngħidu lis-sewwieq tal-ħażna juża "additionalimagestores" fil-folder /var/lib/shared. U fil-linja li jmiss noħolqu folder kondiviż u żid ftit fajls lock sabiex ma jkunx hemm abbuż minn kontenituri/ħażna. Essenzjalment, aħna sempliċement noħolqu maħżen tal-immaġni tal-kontenitur vojt.
Jekk timmonta kontenituri/ħażna f'livell ogħla minn dan il-folder, Buildah tkun tista 'tuża l-immaġini.
Issa ejja nerġgħu lura għall-Għażla 2 diskussa hawn fuq, meta l-kontenitur Buildah jista 'jaqra u jikteb lill-kontenituri/jaħżen fuq l-ospiti u, għalhekk, għandu prestazzjoni massima minħabba immaġini caching fil-livell Podman/CRI-O, iżda jipprovdi minimu ta' sigurtà peress li tista 'tikteb direttament lill-ħażna. Issa ejja nżidu ħażna addizzjonali hawn u nikseb l-aħjar taż-żewġ dinjiet.
# 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
Innota li /var/lib/containers/storage tal-host huwa mmuntat fuq /var/lib/shared ġewwa l-kontenitur fil-modalità ta' qari biss. Għalhekk, li jaħdem f'kontenitur, Buildah jista 'juża kwalunkwe immaġini li qabel kienu mniżżla bl-użu ta' Podman/CRI-O (hello, veloċità), iżda jista 'jikteb biss fil-ħażna tiegħu stess (hello, sigurtà). Innota wkoll li dan isir mingħajr ma tiddiżattiva s-separazzjoni SELinux għall-kontenitur.
Uġigħ importanti
Taħt l-ebda ċirkostanza m'għandek tħassar xi immaġini mir-repożitorju sottostanti. Inkella, il-kontenitur Buildah jista 'jiġġarraf.
U dawn mhumiex il-vantaġġi kollha
Il-possibbiltajiet ta 'ħażna addizzjonali mhumiex limitati għax-xenarju ta' hawn fuq. Pereżempju, tista 'tpoġġi l-immaġini kollha tal-kontejners fuq ħażna ta' netwerk kondiviża u tagħti aċċess għaliha lill-kontenituri kollha Buildah. Ejja ngħidu li għandna mijiet ta 'immaġini li s-sistema CI/CD tagħna tuża regolarment biex tibni immaġini tal-kontejners. Aħna nikkonċentraw dawn l-immaġini kollha fuq ospitanti tal-ħażna waħda u mbagħad, bl-użu tal-għodod preferuti tal-ħażna tan-netwerk (NFS, Gluster, Ceph, ISCSI, S3...), niftħu aċċess ġenerali għal din il-ħażna għan-nodi kollha Buildah jew Kubernetes.
Issa huwa biżżejjed li jintramaw din il-ħażna tan-netwerk fil-kontenitur Buildah fuq /var/lib/shared u dan huwa - Il-kontenituri Buildah m'għadhomx ikollhom iniżżlu immaġini permezz ta 'pull. Għalhekk, aħna tarmi l-fażi ta 'qabel il-popolazzjoni u huma immedjatament lesti li roll out il-kontenituri.
U ovvjament, dan jista 'jintuża f'sistema Kubernetes ħaj jew infrastruttura tal-kontejners biex tniedi u tħaddem kontenituri kullimkien mingħajr ebda tniżżil ta' immaġini. Barra minn hekk, ir-reġistru tal-kontejners, li jirċievi talba push biex ittella 'immaġni aġġornata miegħu, jista' awtomatikament jibgħat din l-immaġni lil ħażna ta 'netwerk kondiviża, fejn istantanjament issir disponibbli għan-nodi kollha.
L-immaġini tal-kontenituri kultant jistgħu jilħqu ħafna gigabytes fid-daqs. Il-funzjonalità ta 'ħażna addizzjonali tippermettilek tevita l-ikklonar ta' immaġini bħal dawn fuq in-nodi u tagħmel it-tnedija tal-kontenituri kważi istantanja.
Barra minn hekk, bħalissa qed naħdmu fuq karatteristika ġdida msejħa overlay volume mounts, li se tagħmel kontenituri tal-bini saħansitra aktar malajr.
Konklużjoni
It-tmexxija ta 'Buildah ġewwa kontenitur f'Kubernetes/CRI-O, Podman, jew saħansitra Docker hija fattibbli, sempliċi, u ħafna aktar sigura milli tuża docker.socket. Żidna bil-kbir il-flessibilità ta' xogħol bl-immaġini, sabiex tkun tista' tmexxihom f'varjetà ta' modi biex tottimizza l-bilanċ bejn is-sigurtà u l-prestazzjoni.
Il-funzjonalità ta 'ħażna addizzjonali tippermettilek tħaffef jew saħansitra telimina kompletament it-tniżżil ta' immaġini għal nodi.
Sors: www.habr.com