Rekomendasi pikeun ngajalankeun Buildah di jero wadah

Naon kaéndahan decoupling wadahna runtime kana komponén tooling misah? Khususna, alat-alat ieu tiasa ngawitan digabungkeun supados saling ngajaga.

Rekomendasi pikeun ngajalankeun Buildah di jero wadah

Seueur jalma anu katarik ideu ngawangun gambar OCI wadahna Kubernetes atawa sistem sarupa. Hayu urang nyebutkeun urang boga CI / CD nu terus ngumpulkeun gambar, lajeng hal kawas Hat Beureum OpenShift/ Kubernetes bakal jadi rada mangpaat dina watesan beban balancing salila ngawangun. Nepi ka ayeuna, seuseueurna jalma ngan saukur masihan wadah aksés kana stop kontak Docker sareng ngantepkeun aranjeunna ngajalankeun paréntah docker build. Sababaraha taun ka pengker kami némbongkeunyén ieu pisan teu aman, saleresna, éta langkung parah tibatan masihan root atanapi sudo tanpa sandi.

Éta sababna jalma-jalma terus-terusan nyoba ngajalankeun Buildah dina wadah. Pondokna, urang dijieun conto kumaha, dina pamadegan urang, pangalusna ngajalankeun Buildah jero wadahna, sarta dipasang dina gambar pakait dina quay.io/buildah. Hayu urang mimitian...

carana ngatur

Gambar ieu diwangun ti Dockerfiles, anu tiasa dipendakan dina gudang Buildah dina polder ngawangun gambar.
Di dieu urang bakal mertimbangkeun Vérsi stabil tina 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

Gantina OverlayFS, dilaksanakeun dina tingkat kernel Linux host, kami nganggo program di jero wadahna sekering-overlay, sabab ayeuna OverlayFS ngan ukur tiasa dipasang upami anjeun masihan idin SYS_ADMIN nganggo kamampuan Linux. Sareng kami hoyong ngajalankeun wadah Buildah kami tanpa hak istimewa akar. Fuse-overlay jalan rada gancang sarta boga kinerja hadé ti supir gudang VFS. Punten dicatet yén nalika ngajalankeun wadah Buildah anu nganggo Fuse, anjeun kedah nyayogikeun alat / 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

Salajengna urang nyieun diréktori pikeun neundeun tambahan. Wadah / gudang ngarojong konsép nyambungkeun toko gambar baca-hijina tambahan. Contona, Anjeun bisa ngonpigurasikeun wewengkon gudang overlay on hiji mesin, lajeng nganggo NFS ka Gunung gudang ieu dina mesin sejen tur nganggo gambar ti dinya tanpa ngundeur via tarikan. Urang kudu gudang ieu guna bisa nyambungkeun sababaraha gudang gambar ti host salaku volume sarta ngagunakeun eta di jero wadahna.

# 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

Tungtungna, ku ngagunakeun variabel lingkungan BUILDAH_ISOLATION, kami nyarioskeun wadahna Buildah pikeun ngajalankeun kalayan isolasi chroot sacara standar. Insulasi tambahan henteu diperyogikeun di dieu, sabab kami parantos damel dina wadah. Supados Buildah tiasa ngadamel wadahna anu dipisahkeun ku rohangan ngaran, hak husus SYS_ADMIN diperyogikeun, anu ngabutuhkeun sayah aturan SELinux sareng SECCOMP wadahna, anu bertentangan sareng karesep urang pikeun ngawangun tina wadah anu aman.

Ngajalankeun Buildah di jero wadah

Diagram gambar wadahna Buildah anu dibahas di luhur ngamungkinkeun anjeun sacara fleksibel rupa-rupa metode pikeun ngaluncurkeun wadah sapertos kitu.

Laju versus kaamanan

Kaamanan komputer sok kompromi antara laju prosés sareng sabaraha panyalindungan anu dibungkus. Pernyataan ieu ogé leres nalika ngumpul wadah, janten di handap ieu urang bakal mertimbangkeun pilihan pikeun kompromi sapertos kitu.

Gambar wadahna anu dibahas di luhur bakal tetep disimpen dina /var/lib/containers. Kituna, urang kudu Gunung eusi kana folder ieu, sarta kumaha urang ngalakukeun ieu bakal greatly mangaruhan laju ngawangun gambar wadahna.

Hayu urang nganggap tilu pilihan.

pilihan 1. Lamun kaamanan maksimum diperlukeun, lajeng pikeun tiap wadah bisa nyieun folder sorangan pikeun wadahna / gambar tur sambungkeun ka wadahna via volume-Gunung. Sajaba ti éta, nempatkeun diréktori kontéks dina wadahna sorangan, dina folder / ngawangun:

# 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

Kaamanan. Pangwangunan anu dijalankeun dina wadah sapertos kitu gaduh kaamanan anu maksimal: henteu dipasihkeun hak-hak akar anu nganggo kamampuan, sareng sadaya larangan SECOMP sareng SELinux diterapkeun kana éta. 0: 100000.

Kinerja. Tapi kinerja di dieu téh minimal, saprak sagala gambar tina registries wadahna disalin ka host unggal waktu, sarta cache teu dianggo pisan. Nalika ngalengkepan karyana, wadahna Buildah kedah ngirim gambar ka pendaptaran sareng ngancurkeun eusi dina host. Dina waktos salajengna gambar wadahna diwangun, éta kedah diunduh deui tina pendaptaran, sabab ku waktos éta bakal aya anu tinggaleun dina host.

pilihan 2. Upami anjeun peryogi kinerja tingkat Docker, anjeun tiasa pasang wadah / panyimpen host langsung kana wadahna.

# 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

Kaamanan. Ieu mangrupikeun cara anu paling aman pikeun ngawangun wadah sabab ngamungkinkeun wadahna ngarobih panyimpenan dina host sareng berpotensi tiasa nyoco Podman atanapi CRI-O gambar jahat. Salaku tambahan, anjeun kedah nganonaktipkeun separation SELinux supados prosés dina wadahna Buildah tiasa berinteraksi sareng panyimpenan dina host. Catet yén pilihan ieu masih langkung saé tibatan stop kontak Docker sabab wadahna dikonci ku sésana fitur kaamanan sareng henteu tiasa ngan ukur ngajalankeun wadah dina host.

Kinerja. Di dieu éta maksimum, saprak cache pinuh dipaké. Upami Podman atanapi CRI-O parantos ngaunduh gambar anu diperyogikeun ka host, maka prosés Buildah di jero wadahna henteu kedah diunduh deui, sareng ngawangun salajengna dumasar kana gambar ieu ogé bakal tiasa nyandak naon anu diperyogikeun tina cache. .

pilihan 3. Intina tina metoda ieu nyaéta ngagabungkeun sababaraha gambar kana hiji proyék sareng folder umum pikeun gambar wadahna.

# 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

Dina conto ieu, urang teu ngahapus folder proyék (/ var / lib / project3) antara ngajalankeun, jadi sakabeh wangunan saterusna dina kauntungan proyék ti cache.

Kaamanan. Hal di antara pilihan 1 jeung 2. Di hiji sisi, peti teu boga aksés ka eusi dina host na, sasuai, teu bisa dieunakeun hal goréng kana gudang gambar Podman / CRI-O. Di sisi anu sanésna, salaku bagian tina rarancangna, wadahna tiasa ngaganggu pangumpulan wadah anu sanés.

Kinerja. Ieu langkung parah tibatan nalika nganggo cache anu dibagikeun dina tingkat host, sabab anjeun henteu tiasa nganggo gambar anu parantos diunduh nganggo Podman / CRI-O. Sanajan kitu, sakali Buildah ngundeur gambar, gambar bisa dipaké dina sagala ngawangun saterusna dina proyék.

Panyimpenan tambahan

У wadahna / neundeun Aya hal anu keren sapertos toko tambahan (toko tambahan), hatur nuhun anu nalika ngaluncurkeun sareng ngawangun wadah, mesin wadahna tiasa nganggo toko gambar éksternal dina modeu overlay anu dibaca wungkul. Intina, anjeun tiasa nambihan hiji atanapi langkung panyimpen anu dibaca wungkul kana file storage.conf supados nalika anjeun ngamimitian wadahna, mesin wadahna milarian gambar anu dipikahoyong dina éta. Sumawona, éta bakal ngaunduh gambar tina pendaptaran ngan upami henteu mendakanana dina panyimpen ieu. Mesin wadahna ngan ukur tiasa nyerat kana panyimpenan anu tiasa ditulis...

Upami anjeun ngagulung ka luhur sareng ningali Dockerfile anu kami anggo pikeun ngawangun gambar quay.io/buildah/stable, aya garis sapertos kieu:

# 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

Dina baris kahiji, urang ngaropea /etc/containers/storage.conf jero gambar wadahna, ngabejaan supir gudang ngagunakeun "additionalimagestores" dina /var/lib/folder dibagikeun. Sareng dina baris salajengna urang nyiptakeun folder anu dibagikeun sareng nambihan sababaraha file konci supados henteu aya panyalahgunaan tina wadah / panyimpen. Intina, urang ngan ukur nyiptakeun toko gambar wadahna kosong.

Upami anjeun masang wadah / panyimpen dina tingkat anu langkung luhur tibatan folder ieu, Buildah tiasa nganggo gambar.

Ayeuna hayu urang uih deui ka Pilihan 2 anu dibahas di luhur, nalika wadah Buildah tiasa maca sareng nyerat kana wadah / toko dina host sareng, sasuai, gaduh pagelaran maksimal kusabab gambar cache dina tingkat Podman / CRI-O, tapi nyayogikeun kaamanan minimum. sabab bisa nulis langsung ka gudang. Ayeuna hayu urang tambahkeun panyimpenan tambahan di dieu sareng kéngingkeun anu pangsaéna tina dua dunya.

# 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

Catet yén host /var/lib/containers/storage dipasang ka /var/lib/shared di jero wadahna dina modeu baca wungkul. Ku alatan éta, gawe dina wadahna, Buildah bisa ngagunakeun sagala gambar nu saméméhna diundeur maké Podman / CRI-O (halo, speed), tapi ngan bisa nulis ka gudang sorangan (halo, kaamanan). Catet ogé yén ieu dilakukeun tanpa nganonaktipkeun separation SELinux pikeun wadahna.

hal penting

Dina kaayaan naon waé anjeun kedah ngahapus gambar naon waé tina gudang dasar. Upami teu kitu, wadah Buildah tiasa ngadat.

Sareng ieu sanés sadayana kauntungan

Kamungkinan neundeun tambahan henteu dugi ka skenario di luhur. Salaku conto, anjeun tiasa nempatkeun sadaya gambar wadahna dina panyimpenan jaringan anu dibagikeun sareng masihan aksés ka sadaya wadah Buildah. Sebutkeun urang ngagaduhan ratusan gambar anu rutin dianggo ku sistem CI/CD pikeun ngawangun gambar wadahna. Urang konsentrasi sakabéh gambar ieu dina hiji host gudang lajeng, ngagunakeun parabot panyimpen jaringan pikaresep (NFS, Gluster, Ceph, ISCSI, S3 ...), urang muka aksés umum kana gudang ieu ka sadaya titik Buildah atanapi Kubernetes.

Ayeuna cukup pikeun masang panyimpen jaringan ieu kana wadahna Buildah dina /var/lib/shared sareng éta - wadah Buildah henteu kedah ngaunduh gambar liwat tarikan. Ku kituna, urang buang kaluar fase pre-populasi jeung geura siap gulung kaluar wadahna.

Sareng tangtosna, ieu tiasa dianggo dina sistem Kubernetes langsung atanapi infrastruktur wadah pikeun ngaluncurkeun sareng ngajalankeun peti di mana waé tanpa ngaunduh gambar. Sumawona, pendaptaran wadahna, nampi pamundut push pikeun unggah gambar anu diropéa, sacara otomatis tiasa ngirim gambar ieu ka panyimpenan jaringan anu dibagikeun, dimana éta langsung sayogi ka sadaya titik.

Gambar wadahna sakapeung tiasa ngahontal seueur gigabyte ukuranana. Fungsi panyimpen tambahan ngamungkinkeun anjeun pikeun ngahindarkeun kloning gambar sapertos dina titik-titik sareng ngajantenkeun wadah peluncuran ampir sakedapan.

Sajaba ti éta, urang ayeuna keur dipake dina fitur anyar disebut overlay volume mounts, nu bakal nyieun wadah wangunan malah gancang.

kacindekan

Ngajalankeun Buildah di jero wadah di Kubernetes / CRI-O, Podman, atanapi bahkan Docker tiasa dilaksanakeun, sederhana, sareng langkung aman tibatan nganggo docker.socket. Kami parantos ningkatkeun pisan kalenturan pikeun damel sareng gambar, ku kituna anjeun tiasa ngajalankeunana ku sababaraha cara pikeun ngaoptimalkeun kasaimbangan antara kaamanan sareng kinerja.

Fungsi panyimpen tambahan ngamungkinkeun anjeun nyepetkeun atanapi malah ngaleungitkeun unduhan gambar ka titik.

sumber: www.habr.com

Tambahkeun komentar