Awọn itọnisọna fun ṣiṣe Buildah inu apo eiyan kan

Kini ẹwa ti yiya sọtọ akoko asiko eiyan sinu awọn paati irinṣẹ lọtọ? Ni pato, otitọ pe awọn irinṣẹ wọnyi le bẹrẹ lati ni idapo ki wọn le dabobo ara wọn.

Awọn itọnisọna fun ṣiṣe Buildah inu apo eiyan kan

Ọpọlọpọ eniyan ni ifamọra nipasẹ imọran ti kikọ awọn aworan eiyan OCI laarin Kubernetes tabi iru eto. Jẹ ki a sọ pe a ni CI / CD ti o kọ awọn aworan nigbagbogbo, lẹhinna nkan bii RedHat Hat OpenShift/ Kubernetes yoo wulo pupọ ni awọn ofin ti iwọntunwọnsi fifuye. Titi di aipẹ, ọpọlọpọ eniyan ni irọrun fun awọn apoti ni iraye si iho Docker kan ati gba wọn laaye lati ṣiṣẹ aṣẹ kikọ docker. A fihan kan diẹ odun seyinpe eyi ko ni aabo pupọ, ni otitọ, o buru paapaa ju fifun gbongbo aṣiwadi tabi sudo.

Nitorinaa awọn eniyan n gbiyanju nigbagbogbo lati ṣiṣe Buildah ninu apoti kan. Ni kukuru, a ti ṣẹda apẹẹrẹ bawo ni, ninu ero wa, o dara julọ lati ṣiṣe Buildah sinu apo eiyan kan, ati firanṣẹ awọn aworan ti o baamu lori quay.io/buildah. Jẹ ki a bẹrẹ ...

Ṣe akanṣe

Awọn aworan wọnyi ni a kọ lati Dockerfiles, eyiti o le rii ni ibi ipamọ Buildah ninu folda naa buildahimage.
Nibi ti a yoo ro ẹya iduroṣinṣin ti 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

Dipo OverlayFS, ti a ṣe ni ipele ti ekuro Linux ti agbalejo, a lo eto naa inu eiyan naa. fiusi agbekọja, nitori Lọwọlọwọ OverlayFS le gbe soke nikan ti o ba fun ni awọn igbanilaaye SYS_ADMIN nipasẹ awọn agbara Linux. Ati pe a fẹ lati ṣiṣẹ awọn apoti Buildah wa laisi awọn anfani gbongbo eyikeyi. Fuse-overlay jẹ iyara lẹwa ati ṣiṣe dara julọ ju awakọ ibi ipamọ VFS lọ. Ṣe akiyesi pe nigbati o ba nṣiṣẹ eiyan Buildah nipa lilo Fuse, ẹrọ / dev/fuse gbọdọ wa ni ipese.

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

Nigbamii ti, a ṣẹda itọsọna kan fun awọn ibi ipamọ afikun. eiyan / ibi ipamọ ṣe atilẹyin imọran ti sisopọ afikun awọn ibi ipamọ aworan kika-nikan. Fun apẹẹrẹ, o le ṣeto agbegbe ibi ipamọ agbekọja lori ẹrọ kan, lẹhinna lo NFS lati gbe ibi ipamọ yii sori ẹrọ miiran ati lo awọn aworan lati inu rẹ laisi igbasilẹ nipasẹ fifa. A nilo ibi ipamọ yii lati le ni anfani lati sopọ diẹ ninu ibi ipamọ aworan lati ọdọ agbalejo bi iwọn didun ati lo ninu apo eiyan naa.

# 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

Nikẹhin, a lo BUILDAH_ISOLATION oniyipada ayika lati sọ fun apoti Buildah lati bẹrẹ pẹlu ipinya chroot nipasẹ aiyipada. Afikun ipinya ko nilo nibi, nitori a ti n ṣiṣẹ tẹlẹ ninu apoti kan. Ni ibere fun Buildah lati ṣẹda awọn apoti ti o ya sọtọ orukọ tirẹ, anfani SYS_ADMIN ni a nilo, eyiti yoo nilo ṣiṣi silẹ awọn ofin SELinux ati SECCOMP ti eiyan naa, eyiti yoo tako pẹlu iṣeto wa lati kọ lati inu apoti to ni aabo.

Ṣiṣe Buildah inu apo eiyan kan

Eto aworan eiyan Buildah ti a jiroro loke gba ọ laaye lati ni irọrun yatọ bi iru awọn apoti ṣe ṣe ifilọlẹ.

Iyara dipo ailewu

Aabo Kọmputa nigbagbogbo jẹ adehun laarin iyara ti ilana kan ati iye aabo ti a we ni ayika rẹ. Gbólóhùn yii tun jẹ otitọ nigbati o ba ṣajọpọ awọn apoti, nitorinaa ni isalẹ a yoo gbero awọn aṣayan fun iru adehun.

Aworan apoti ti a jiroro loke yoo tọju ibi ipamọ rẹ sinu /var/lib/awọn apoti. Nitorinaa, a nilo lati gbe akoonu si folda yii, ati bii a ṣe ṣe eyi yoo ni ipa pupọ iyara ti awọn aworan eiyan ile.

Ẹ jẹ́ ká gbé ọ̀nà mẹ́ta yẹ̀ wò.

Aṣayan 1. Ti o ba nilo aabo ti o pọju, lẹhinna fun eiyan kọọkan o le ṣẹda folda tirẹ fun awọn apoti / aworan ki o so pọ si eiyan nipasẹ iwọn didun. Ati ni afikun, gbe itọsọna ọrọ-ọrọ sinu eiyan funrararẹ, ninu folda / kọ:

# 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

Aabo. Buildah ti n ṣiṣẹ ninu iru eiyan ni aabo ti o pọju: ko fun ni awọn anfani gbongbo eyikeyi nipasẹ awọn agbara, ati gbogbo awọn ihamọ SECOMP ati SELinux kan si rẹ. 0:100000:10000.

Išẹ. Ṣugbọn iṣẹ ti o wa nibi jẹ iwonba, nitori eyikeyi awọn aworan lati awọn iforukọsilẹ eiyan ni a daakọ si agbalejo ni akoko kọọkan, ati caching ko ṣiṣẹ lati ọrọ naa “ko si ọna”. Nigbati o ba pari iṣẹ rẹ, eiyan Buildah gbọdọ fi aworan ranṣẹ si iforukọsilẹ ati ki o run akoonu lori agbalejo naa. Nigbamii ti aworan eiyan ti kọ, yoo ni lati ṣe igbasilẹ lẹẹkansii lati iforukọsilẹ, nitori pe ko si nkankan ti yoo fi silẹ lori agbalejo naa ni akoko yẹn.

Aṣayan 2. Ti o ba nilo iṣẹ ipele Docker, o le gbe eiyan / ibi ipamọ agbalejo taara sinu eiyan naa.

# 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

Aabo. Eyi ni ọna ti o ni aabo ti o kere julọ lati kọ awọn apoti, bi o ṣe gba eiyan laaye lati yipada ibi ipamọ lori agbalejo ati pe o le fa aworan irira sinu Podman tabi CRI-O. Ni afikun, iwọ yoo nilo lati mu iyapa SELinux kuro ki awọn ilana ti o wa ninu apoti Buildah le ṣe ajọṣepọ pẹlu ibi ipamọ lori agbalejo naa. Ṣe akiyesi pe aṣayan yii tun dara julọ ju iho Docker kan, bi apoti ti dina nipasẹ awọn ẹya aabo ti o ku ati pe ko le gbe soke nikan ati ṣiṣe eyikeyi eiyan lori agbalejo naa.

Išẹ. Nibi o pọju, niwon caching ti ni ipa ni kikun. Ti Podman tabi CRI-O ti ṣe igbasilẹ aworan ti o fẹ tẹlẹ si agbalejo, lẹhinna ilana Buildah inu eiyan naa kii yoo ni lati ṣe igbasilẹ lẹẹkansii, ati awọn ipilẹ ti o tẹle ti o da lori aworan yii yoo tun ni anfani lati mu ọkan pataki lati kaṣe naa. .

Aṣayan 3. Ohun pataki ti ọna yii ni lati darapo awọn aworan pupọ sinu iṣẹ akanṣe kan pẹlu folda ti o wọpọ fun awọn aworan eiyan.

# 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

Ni apẹẹrẹ yii, a ko paarẹ folda ise agbese (/ var / lib/project3) laarin awọn ṣiṣe, nitorinaa gbogbo awọn igbekalẹ ti o tẹle laarin iṣẹ akanṣe lo anfani ti caching.

Aabo. Nkankan laarin awọn aṣayan 1 ati 2. Ni apa kan, awọn apoti ko ni iwọle si akoonu lori agbalejo ati, ni ibamu, ko le isokuso nkan buburu sinu ibi ipamọ aworan Podman / CRI-O. Ni apa keji, laarin iṣẹ akanṣe tirẹ, eiyan le dabaru pẹlu apejọ awọn apoti miiran.

Išẹ. Nibi o buru ju lilo kaṣe pinpin ni ipele agbalejo, nitori o ko le lo awọn aworan ti o ti ṣe igbasilẹ tẹlẹ nipa lilo Podman / CRI-O. Bibẹẹkọ, ni kete ti Buildah ti ṣe igbasilẹ aworan naa, aworan yẹn le ṣee lo ni eyikeyi awọn itumọ ti o tẹle laarin iṣẹ akanṣe naa.

Afikun ipamọ

У awọn apoti / ibi ipamọ o wa iru nkan ti o tutu bi awọn ile itaja afikun (awọn ile itaja afikun), o ṣeun si eyi, nigbati o bẹrẹ ati awọn apoti ile, awọn ẹrọ eiyan le lo awọn ile itaja aworan ita ni ipo iṣaju kika-nikan. Ni otitọ, o le ṣafikun ọkan tabi diẹ sii awọn ibi ipamọ kika-nikan si faili storage.conf, nitorinaa nigbati eiyan ba bẹrẹ, ẹrọ eiyan yoo wa aworan ti o fẹ ninu wọn. Pẹlupẹlu, yoo ṣe igbasilẹ aworan naa lati iforukọsilẹ nikan ti ko ba rii ni eyikeyi awọn ibi ipamọ wọnyi. Ẹrọ eiyan yoo ni anfani lati kọ si ibi ipamọ kikọ nikan…

Ti a ba yi lọ si oke ati wo Dockerfile ti a lo lati kọ aworan quay.io/buildah/stable, awọn ila bii eyi wa:

# 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

Lori laini akọkọ, a ṣe atunṣe /etc/containers/storage.conf inu aworan eiyan, sọ fun awakọ ipamọ lati lo "additionalimagestores" ninu folda / var / lib / pínpín. Ati ni laini atẹle, a ṣẹda folda ti o pin ati ṣafikun tọkọtaya awọn faili titiipa ki ko si ilokulo lati awọn apoti / ibi ipamọ. Ni pataki, a kan n ṣẹda ile itaja aworan eiyan ti o ṣofo.

Ti o ba gbe awọn apoti / ibi ipamọ ipele kan loke folda yii, Buildah yoo ni anfani lati lo awọn aworan naa.

Bayi jẹ ki a pada si Aṣayan 2 ti a sọrọ loke, nigbati apoti Buildah le ka ati kọ si awọn apoti / itaja lori awọn ọmọ-ogun ati, ni ibamu, ni iṣẹ ṣiṣe ti o pọju nitori caching aworan ni ipele Podman / CRI-O, ṣugbọn o fun ni aabo to kere ju, niwon o le kọ taara ni ipamọ. Ati ni bayi a yoo dabaru ni ibi ipamọ afikun nibi ati gba ohun ti o dara julọ ti awọn agbaye mejeeji.

# 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

Ṣe akiyesi pe ogun / var / lib / awọn apoti / ibi ipamọ ti wa ni gbigbe si / var / lib / pinpin inu apoti ni ipo kika-nikan. Nitorinaa, ṣiṣẹ ninu apo eiyan, Buildah le lo eyikeyi awọn aworan ti o ti gba lati ayelujara tẹlẹ nipa lilo Podman / CRI-O (hello, iyara), ṣugbọn o le kọ nikan si ibi ipamọ tirẹ (hello, aabo). Tun ṣe akiyesi pe eyi ni a ṣe laisi piparẹ iyapa SELinux fun eiyan naa.

Nuance pataki kan

Labẹ ọran kankan ko yẹ ki o paarẹ eyikeyi awọn aworan lati ibi ipamọ ti o wa labẹ. Bibẹẹkọ, apoti Buildah le ṣubu.

Ati pe kii ṣe gbogbo awọn anfani.

Awọn aye fun afikun ibi ipamọ ko ni opin si oju iṣẹlẹ ti o wa loke. Fun apẹẹrẹ, o le gbe gbogbo awọn aworan eiyan sinu ibi ipamọ nẹtiwọọki pinpin ati fun ni iwọle si gbogbo awọn apoti Buildah. Jẹ ki a sọ pe a ni awọn ọgọọgọrun awọn aworan ti eto CI/CD wa nigbagbogbo nlo lati kọ awọn aworan apoti. A ṣojumọ gbogbo awọn aworan wọnyi lori ibi-itọju ibi-itọju ẹyọkan ati lẹhinna, lilo awọn irinṣẹ ibi ipamọ nẹtiwọọki ti o fẹ julọ (NFS, Gluster, Ceph, iSCSI, S3 ...), pin ibi ipamọ yii pẹlu gbogbo awọn apa Buildah tabi Kubernetes.

Bayi o to lati gbe ibi ipamọ nẹtiwọọki yii sinu eiyan Buildah lori / var / lib / pinpin ati pe iyẹn - Awọn apoti Buildah ko ni lati ṣe igbasilẹ awọn aworan nipasẹ fifa ni gbogbo. Nitorinaa, a jabọ ipele iṣaaju-olugbe jade ati pe o ṣetan lẹsẹkẹsẹ lati yi awọn apoti jade.

Ati pe dajudaju, eyi le ṣee lo laarin eto Kubernetes laaye tabi awọn amayederun eiyan lati ṣe ifilọlẹ ati ṣiṣe awọn apoti nibikibi laisi fifa aworan eyikeyi. Pẹlupẹlu, nigbati iforukọsilẹ eiyan ba gba ibeere titari lati gbe aworan imudojuiwọn sori rẹ, o le fi aworan yii ranṣẹ laifọwọyi si ibi ipamọ nẹtiwọọki ti o pin, nibiti o ti wa lẹsẹkẹsẹ si gbogbo awọn apa.

Awọn aworan apoti le jẹ ọpọlọpọ gigabytes nigba miiran ni iwọn. Awọn iṣẹ-ṣiṣe ti awọn ibi ipamọ afikun ṣe imukuro iwulo fun didi iru awọn aworan nipasẹ awọn apa ati ki o jẹ ki ifilọlẹ awọn apoti ti fẹrẹẹ jẹ lẹsẹkẹsẹ.

Ni afikun, a n ṣiṣẹ lọwọlọwọ lori ẹya tuntun ti iwọn iwọn apọju ti yoo jẹ ki awọn apoti ile paapaa yiyara.

ipari

Ṣiṣe Buildah inu apo eiyan kan ni agbegbe Kubernetes/CRI-O, Podman, tabi paapaa Docker ṣee ṣe, ati pe o rọrun ati ailewu pupọ ju lilo docker.socket. A ti pọ pupọ ni irọrun ti ṣiṣẹ pẹlu awọn aworan, ati bayi o le ṣiṣe wọn ni awọn ọna pupọ fun iwọntunwọnsi ti o dara julọ laarin aabo ati iṣẹ.

Iṣẹ ṣiṣe ti awọn ibi ipamọ afikun gba ọ laaye lati yara tabi paapaa imukuro igbasilẹ awọn aworan si awọn apa.

orisun: www.habr.com

Fi ọrọìwòye kun