TorolΓ lana amin'ny fampandehanana ny Buildah ao anaty fitoeran-javatra

Inona no hatsaran'ny fanasarahana ny fotoana fandehanana kaontenera ho singa fitaovana samihafa? Indrindra indrindra fa afaka manomboka mitambatra ireo fitaovana ireo mba hifampiaro.

TorolΓ lana amin'ny fampandehanana ny Buildah ao anaty fitoeran-javatra

Olona maro no voasarika amin'ny hevitra hananganana sary OCI container ao anatiny Kubernetes na rafitra mitovy. Andeha atao hoe manana CI / CD izay mamorona sary tsy tapaka, avy eo zavatra toy izany RedHat OpenShift/ Kubernetes dia mety ho tena ilaina amin'ny resaka fananganana enta-mavesatra. Hatramin'ny vao haingana, ny ankamaroan'ny olona dia nanome fidirana amin'ny kaontenera amin'ny socket Docker ary namela azy ireo hitantana ny baikon'ny docker build. Nasehonay taona vitsivitsy lasa izayfa tena tsy azo antoka izany, raha ny marina, dia mbola ratsy kokoa noho ny fanomezana root na sudo tsy misy tenimiafina.

Noho izany dia miezaka hatrany ny olona hampandeha ny Buildah ao anaty kaontenera. Raha fintinina dia namorona isika ohatra amin'ny fomba ahoana, araka ny hevitray, dia tsara kokoa ny mampandeha ny Buildah ao anaty fitoeran-javatra iray, ary mametraka ny sary mifanaraka amin'izany quay.io/buildah. Andao hanomboka...

fanitsiana

Ireo sary ireo dia natsangana avy amin'ny Dockerfiles, izay hita ao amin'ny tahiry Buildah ao amin'ny lahatahiry buildahimage.
Eto isika dia handinika stable version of Dockerfile.

# 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

Raha tokony OverlayFS ampiharina amin'ny haavon'ny kernel Linux an'ny mpampiantrano, dia mampiasa ny programa ao anaty container izahay fuse overlay, satria ny OverlayFS amin'izao fotoana izao dia tsy afaka miakatra raha tsy omenao alalana SYS_ADMIN amin'ny alΓ lan'ny fahaiza-manao Linux. Ary tianay ny hampandeha ny kaontenera Buildah tsy misy tombontsoa fototra. Ny Fuse-overlay dia tena haingana ary mahavita tsara kokoa noho ny mpamily fitahirizana VFS. Mariho fa rehefa mampiasa fitoeran'entana Buildah mampiasa Fuse dia mila omena ny fitaovana / dev/fuse.

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

Manaraka, mamorona lahatahiry ho an'ny tahiry fanampiny. fitoeran-javatra / fitehirizana manohana ny foto-kevitry ny fampifandraisana ireo tahirin-tsary vakiana fotsiny. Ohatra, azonao atao ny manangana faritra fitehirizana overlay amin'ny milina iray, ary avy eo mampiasa NFS mba hametahana an'io fitahirizana io amin'ny milina hafa ary mampiasa sary avy aminy tsy misintona amin'ny alΓ lan'ny fisintonana. Mila an'io fitahirizana io isika mba ahafahana mampifandray ny fitahirizana sary avy amin'ny mpampiantrano ho toy ny boky sy mampiasa azy ao anaty fitoeran-javatra.

# 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

Farany, mampiasa ny fari-piainana BUILDAH_ISOLATION izahay mba hilazana ny fitoeran'ny Buildah hanomboka amin'ny fitokanana chroot amin'ny alΓ lan'ny default. Tsy ilaina ny fitokanana fanampiny eto, satria efa miasa ao anaty kaontenera izahay. Mba hahafahan'ny Buildah mamorona kaontenera misaraka amin'ny toerana misy anarana, dia ilaina ny tombontsoa SYS_ADMIN, izay mitaky ny famahana ny fitsipiky ny SELinux sy ny SECCOMP an'ny kaontenera, izay mety hifanohitra amin'ny fanamboarana ataontsika amin'ny fitoerana azo antoka.

Alefaso ao anaty container ny Buildah

Ny drafitry ny sarin'ny kaontenera Buildah resahina etsy ambony dia ahafahanao manovaovaovaovao ny fomba fandefasana ireo kaontenera ireo.

Haingana mifanohitra amin'ny fiarovana

Ny fiarovana amin'ny solosaina dia marimaritra iraisana eo amin'ny hafainganam-pandehan'ny dingana iray sy ny habetsahan'ny fiarovana manodidina azy. Marina ihany koa ity fanambarana ity rehefa manangom-bokatra, ka eto ambany isika dia handinika safidy ho an'ny marimaritra iraisana toy izany.

Ny sary container resahina etsy ambony dia hitazona ny fitahirizana azy ao amin'ny /var/lib/containers. Noho izany, mila mametraka votoaty amin'ity lahatahiry ity isika, ary ny fomba hanaovana izany dia hisy fiantraikany lehibe amin'ny hafainganam-pandehan'ny fananganana sary fitoeran-javatra.

Andeha isika handinika safidy telo.

Option 1. Raha ilaina ny fiarovana ambony indrindra, dia azonao atao ny mamorona lahatahiry manokana ho an'ny container / sary ho an'ny container tsirairay ary mampifandray izany amin'ny container amin'ny alΓ lan'ny volume-mount. Ary ankoatr'izay, apetraho ao anaty container ny lahatahiry contexte, ao amin'ny 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

Security. Ny Buildah mandeha amin'ny kaontenera toy izany dia manana fiarovana ambony indrindra: tsy omena tombontsoa manokana amin'ny alΓ lan'ny fahaiza-manao, ary mihatra aminy avokoa ny fameperana SECOMP sy SELinux. Ny container toy izany dia azo atao mihitsy aza miaraka amin'ny fitokana-monina User Namespace amin'ny alΓ lan'ny fanampiana safidy toy ny --uidmap 0:100000:10000.

Performance. Fa ny fampisehoana eto dia kely indrindra, satria ny sary rehetra avy amin'ny rejisitry ny container dia adika amin'ny mpampiantrano isaky ny mandeha, ary ny caching dia tsy mandeha amin'ny teny hoe "tsy misy fomba". Rehefa vita ny asany dia tsy maintsy mandefa ny sary any amin'ny rejisitra ny kaontenera Buildah ary manimba ny atiny amin'ny mpampiantrano. Amin'ny fotoana manaraka ny sarin'ny kaontenera dia tsy maintsy alaina indray avy amin'ny rejisitra, satria tsy hisy tavela eo amin'ny mpampiantrano amin'io fotoana io.

Option 2. Raha mila fampisehoana ambaratonga Docker ianao dia azonao atao ny mametraka mivantana ny fitoeran'ny mpampiantrano / fitahirizana ao anaty container.

# 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

Security. Ity no fomba tsy azo antoka indrindra amin'ny fananganana kaontenera, satria ahafahan'ny container manova ny fitahirizana ao amin'ny mpampiantrano ary mety hampiditra sary ratsy ao amin'ny Podman na CRI-O. Ho fanampin'izany, mila manaisotra ny fisarahana SELinux ianao mba hahafahan'ireo dingana ao amin'ny container Buildah hifanerasera amin'ny tahiry ao amin'ny mpampiantrano. Mariho fa ity safidy ity dia mbola tsara kokoa noho ny socket Docker, satria voasakana ireo endri-piarovana sisa tavela ny kaontenera ary tsy afaka maka sy mitantana container amin'ny mpampiantrano fotsiny.

Performance. Eto dia ambony indrindra, satria tafiditra tanteraka ny caching. Raha efa nampidinin'i Podman na CRI-O ny sary tiana ho an'ny mpampiantrano, dia tsy mila maka azy indray ny fizotran'ny Buildah ao anaty fitoeran-javatra, ary ny fananganana manaraka ity sary ity dia afaka maka ny ilaina amin'ny cache. .

Option 3. Ny votoatin'ity fomba ity dia ny manambatra sary maromaro ho tetikasa iray miaraka amina lahatahiry iraisana ho an'ny sary fitoeran-javatra.

# 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

Amin'ity ohatra ity, tsy mamafa ny lahatahiry tetikasa (/var/lib/project3) eo anelanelan'ny hazakazaka izahay, ka ny fananganana manaraka ao anatin'ilay tetikasa dia manararaotra caching.

Security. Zavatra eo anelanelan'ny safidy 1 sy 2. Amin'ny lafiny iray, ny kaontenera dia tsy mahazo miditra amin'ny votoaty ao amin'ny mpampiantrano ary, araka izany, dia tsy afaka mampiditra zavatra ratsy ao amin'ny fitahirizana sary Podman / CRI-O. Amin'ny lafiny iray, ao anatin'ny tetikasany manokana, ny kaontenera iray dia mety hanelingelina ny fivorian'ny kaontenera hafa.

Performance. Eto dia ratsy noho ny fampiasana cache ifampizarana amin'ny ambaratonga mpampiantrano, satria tsy afaka mampiasa sary efa nalaina tamin'ny Podman / CRI-O ianao. Na izany aza, rehefa naka ny sary i Buildah, dia azo ampiasaina amin'ny fananganana manaraka ao anatin'ilay tetikasa io sary io.

Fitehirizana fanampiny

Π£ fitoeran-javatra/fitehirizana Misy zavatra mahafinaritra toy ny fivarotana fanampiny (fivarotana fanampiny), noho izany, rehefa manomboka sy manangana kaontenera, ny maotera container dia afaka mampiasa ny fivarotana sary ivelany amin'ny fomba vakiana fotsiny. Raha ny marina, azonao atao ny manampy fitahirizana vakiana iray na maromaro ao amin'ny rakitra storage.conf, ka rehefa manomboka ny fitoeran-javatra, dia hitady ny sary tiana ao anatiny ny motera container. Ankoatra izany, dia hisintona ny sary avy amin'ny rejisitra raha tsy hita ao amin'ny iray amin'ireo fitahirizana ireo. Ny maotera kaontenera dia tsy afaka manoratra afa-tsy amin'ny fitehirizana azo soratana...

Raha mihodina miakatra isika ary mijery ny Dockerfile ampiasaina hananganana ny sary quay.io/buildah/stable dia misy andalana toy izao:

# 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

Eo amin'ny andalana voalohany dia ovainay ny /etc/containers/storage.conf ao anatin'ny sarin'ny container, milaza amin'ny mpamily fitahirizana hampiasa "additionalimagestores" ao amin'ny folder /var/lib/shared. Ary amin'ny andalana manaraka dia mamorona lahatahiry ifampizarana isika ary manampy rakitra hidin-trano roa mba tsy hisian'ny fanararaotana avy amin'ny container / fitehirizana. Amin'ny ankapobeny, mamorona fivarotana sary fitoeran-javatra foana izahay.

Raha mametraka kaontenera/mitahiry ambaratonga ambonin'ity lahatahiry ity ianao dia afaka mampiasa ireo sary i Buildah.

Andeha isika hiverina amin'ny Option 2 resahina etsy ambony, rehefa afaka mamaky sy manoratra amin'ny container / store amin'ny mpampiantrano ny container Buildah ary, araka izany, dia manana fampisehoana ambony indrindra noho ny caching sary amin'ny haavon'ny Podman / CRI-O, fa manome fiarovana kely indrindra, satria afaka manoratra mivantana amin'ny fitahirizana izy. Ary ankehitriny isika dia hanamboatra fitahirizana fanampiny eto ary hahazo ny tsara indrindra amin'ny tontolo roa.

# 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

Mariho fa ny /var/lib/containers/storage an'ny mpampiantrano dia napetraka ao amin'ny /var/lib/shared ao anaty container amin'ny fomba vakiana fotsiny. Noho izany, miasa ao anaty fitoeran-javatra iray, ny Buildah dia afaka mampiasa izay sary efa nalaina tamin'ny alΓ lan'ny Podman / CRI-O (salama, hafainganam-pandeha), fa tsy afaka manoratra amin'ny fitahirizana azy ihany (miarahaba, fiarovana). Mariho ihany koa fa izany dia atao raha tsy manafoana ny fisarahana SELinux ho an'ny container.

Hevitra manan-danja

Na ahoana na ahoana dia tsy tokony hofafana ny sary ao amin'ny tahiry fototra. Raha tsy izany dia mety hianjera ny kaontenera Buildah.

Ary tsy izany ihany no tombony.

Ny fahafaha-mitahiry fanampiny dia tsy voafetra amin'ny toe-javatra etsy ambony. Ohatra, azonao atao ny mametraka ny sary fitoeran-javatra rehetra ao amin'ny fitahirizana tambajotra iombonana ary manome fahafahana miditra amin'izany amin'ny fitahirizana Buildah rehetra. Andeha hatao hoe manana sary an-jatony izay ampiasaintsika matetika ny rafitra CI/CD mba hanamboarana sary voatahiry. Ampifantoka amin'ny mpampiantrano fitahirizana tokana ireo sary rehetra ireo ary avy eo, amin'ny fampiasana ny fitaovana fitahirizana tambajotra (NFS, Gluster, Ceph, iSCSI, S3 ...), mizara ity fitahirizana ity amin'ny node Buildah na Kubernetes rehetra.

Ankehitriny dia ampy ny mametraka ity fitahirizana tambajotra ity ao amin'ny container Buildah amin'ny /var/lib/shared ary izay no izy - tsy mila maka sary amin'ny alalan'ny pull intsony ny containers Buildah. Noho izany, arianay ny dingana alohan'ny mponina ary vonona avy hatrany hamoaka ny kaontenera.

Ary mazava ho azy, azo ampiasaina ao anatin'ny rafitra Kubernetes mivantana na fotodrafitrasa fitoeran'entana izany mba handefasana sy hampandehanana kaontenera na aiza na aiza tsy misy fisintonana sary. Fanampin'izay, rehefa mahazo fangatahana fanosehana ny rejistra kaontenera hampiditra sary nohavaozina aminy, dia afaka mandefa ho azy io sary io ho any amin'ny fitahirizana tambazotra ifampizarana, izay misy azy avy hatrany amin'ny nodes rehetra.

Mety ho gigabytes maro indraindray ny sarin'ny fitoeran-javatra. Ny fampandehanana ny fitahirizana fanampiny dia manafoana ny filΓ na ny fanaovana klΓ΄nina ny sary toy izany amin'ny alalan'ny nodes ary mahatonga ny fandefasana kaontenera ho eo no ho eo.

Ho fanampin'izay, miasa amin'ny endri-javatra vaovao overlay volume mounts izahay amin'izao fotoana izao izay hahatonga ny fananganana kaontenera haingana kokoa.

famaranana

Ny fampandehanana ny Buildah ao anaty kaontenera ao amin'ny tontolo Kubernetes/CRI-O, Podman, na Docker aza dia azo atao, ary tsotra sy azo antoka kokoa noho ny fampiasana docker.socket. Nampitomboinay be ny fahafaha-miasa amin'ny sary, ary azonao atao ny mampandeha azy ireo amin'ny fomba isan-karazany ho an'ny fifandanjana tsara indrindra eo amin'ny fiarovana sy ny fampisehoana.

Ny fiasan'ny fitahirizana fanampiny dia ahafahanao manafaingana na manafoana tanteraka ny fampidinana sary amin'ny nodes.

Source: www.habr.com

Add a comment