Naon kaéndahan decoupling wadahna runtime kana komponén tooling misah? Khususna, alat-alat ieu tiasa ngawitan digabungkeun supados saling ngajaga.
Seueur jalma anu katarik ideu ngawangun gambar OCI wadahna
Éta sababna jalma-jalma terus-terusan nyoba ngajalankeun Buildah dina wadah. Pondokna, urang dijieun
carana ngatur
Gambar ieu diwangun ti Dockerfiles, anu tiasa dipendakan dina gudang Buildah dina polder
Di dieu urang bakal mertimbangkeun
# 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
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.
# 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
У
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