කන්ටේනරයක් තුළ Buildah ධාවනය කිරීම සඳහා නිර්දේශ

බහාලුම් ධාවන කාලය වෙනම මෙවලම් සංරචක වලට විසන්ධි කිරීමේ අලංකාරය කුමක්ද? විශේෂයෙන්ම, මෙම මෙවලම් එකිනෙකා ආරක්ෂා වන පරිදි ඒකාබද්ධ කිරීමට පටන් ගත හැකිය.

කන්ටේනරයක් තුළ Buildah ධාවනය කිරීම සඳහා නිර්දේශ

ඇතුළත බහාලුම් OCI රූප ගොඩනැගීමේ අදහසට බොහෝ අය ආකර්ෂණය වී ඇත කුබර්නෙට්ස් හෝ සමාන පද්ධතියක්. අපි හිතමු අපි ළඟ CI/CD එකක් තියෙනවා, එය නිරන්තරයෙන් පින්තූර එකතු කරනවා, ඊට පස්සේ මේ වගේ දෙයක් RedHat OpenShift/ ගොඩනැගීමේදී බර තුලනය කිරීමේදී Kubernetes බෙහෙවින් ප්‍රයෝජනවත් වනු ඇත. මෑතක් වන තුරු, බොහෝ අය ඩොකර් සොකට් එකකට බහාලුම්වලට ප්‍රවේශය ලබා දුන් අතර ඔවුන්ට ඩොකර් බිල්ඩ් විධානය ක්‍රියාත්මක කිරීමට ඉඩ දුන්හ. මීට වසර කිහිපයකට පෙර අපි පෙන්නුවාමෙය ඉතා අනාරක්ෂිත බව, ඇත්ත වශයෙන්ම, එය මුරපදය රහිත root හෝ sudo ලබා දීමට වඩා නරක ය.

මිනිසුන් නිරන්තරයෙන්ම කන්ටේනරයක Buildah ධාවනය කිරීමට උත්සාහ කරන්නේ එබැවිනි. කෙටියෙන් කිවහොත්, අපි නිර්මාණය කළෙමු උදාහරණයකි අපගේ මතය අනුව, කන්ටේනරයක් තුළ Buildah ධාවනය කිරීම වඩාත් සුදුසු වන්නේ කෙසේද සහ අනුරූප පින්තූර පළ කළේ කෙසේද? quay.io/buildah. අපි පටන් ගමු...

ගැලපුම්

මෙම පින්තූර ෆෝල්ඩරයේ ඇති Buildah ගබඩාවේ සොයා ගත හැකි Dockerfiles වෙතින් ගොඩනගා ඇත. ගොඩනැගීම.
මෙන්න අපි සලකා බලමු 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

ධාරක ලිනක්ස් කර්නල් මට්ටමින් ක්‍රියාත්මක කරන ලද OverlayFS වෙනුවට, අපි කන්ටේනරය තුළ වැඩසටහන භාවිතා කරමු. ෆියුස්-වැඩිපෙළ, මන්ද දැනට OverlayFS සවි කළ හැක්කේ Linux හැකියාවන් භාවිතා කරමින් SYS_ADMIN අවසර ලබා දෙන්නේ නම් පමණි. තවද අපට අපගේ Buildah බහාලුම් කිසිදු මූල වරප්‍රසාදයකින් තොරව ධාවනය කිරීමට අවශ්‍යය. Fuse-overlay ඉතා ඉක්මනින් ක්‍රියා කරන අතර VFS ගබඩා ධාවකයට වඩා හොඳ කාර්ය සාධනයක් ඇත. ෆියුස් භාවිතා කරන Buildah බහාලුමක් ධාවනය කරන විට, ඔබ /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

ඊළඟට අපි අතිරේක ගබඩා කිරීම සඳහා නාමාවලියක් සාදන්නෙමු. බහාලුම් / ගබඩා අමතර කියවීමට පමණක් රූප ගබඩා සම්බන්ධ කිරීමේ සංකල්පයට සහය දක්වයි. උදාහරණයක් ලෙස, ඔබට එක් යන්ත්‍රයක උඩැතිරි ගබඩා ප්‍රදේශයක් වින්‍යාසගත කළ හැකි අතර, මෙම ගබඩාව වෙනත් යන්ත්‍රයක සවි කිරීමට NFS භාවිතා කර ඇදීමෙන් බාගත නොකර එයින් රූප භාවිතා කරන්න. අපට මෙම ගබඩාව අවශ්‍ය වන්නේ ධාරකයෙන් යම් රූප ආචයනයක් පරිමාවක් ලෙස සම්බන්ධ කිරීමට සහ එය බහාලුම තුළ භාවිතා කිරීමට හැකි වීම සඳහාය.

# 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

අවසාන වශයෙන්, BUILDAH_ISOLATION පරිසර විචල්‍යය භාවිතා කිරීමෙන්, අපි Buildah කන්ටේනරයට පෙරනිමියෙන් chroot හුදකලා කිරීම සමඟ ක්‍රියාත්මක වන ලෙස කියමු. අපි දැනටමත් කන්ටේනරයක වැඩ කරන බැවින් අතිරේක පරිවරණය මෙහි අවශ්ය නොවේ. Buildah හට තමන්ගේම නාම අවකාශයෙන් වෙන් වූ බහාලුම් නිර්මාණය කිරීම සඳහා, SYS_ADMIN වරප්‍රසාදය අවශ්‍ය වේ, ඒ සඳහා බහාලුම්වල SELinux සහ SECCOMP නීති ලිහිල් කිරීම අවශ්‍ය වේ, එය ආරක්ෂිත බහාලුමකින් තැනීමට අපගේ මනාපයට පටහැනි වේ.

කන්ටේනරයක් තුළ Buildah ධාවනය කිරීම

ඉහත සාකච්ඡා කර ඇති Buildah බහාලුම් රූප සටහන ඔබට එවැනි බහාලුම් දියත් කිරීමේ ක්‍රම නම්‍යශීලීව වෙනස් කිරීමට ඉඩ සලසයි.

ආරක්ෂාවට එරෙහිව වේගය

පරිගණක ආරක්ෂාව යනු ක්‍රියාවලියේ වේගය සහ එය වටා කොපමණ ආරක්ෂාවක් වට කර තිබේද යන්න අතර සම්මුතියකි. බහාලුම් එකලස් කිරීමේදී මෙම ප්‍රකාශය ද සත්‍ය වේ, එබැවින් පහත අපි එවැනි සම්මුතියක් සඳහා විකල්ප සලකා බලමු.

ඉහත සාකච්ඡා කර ඇති බහාලුම් රූපය එහි ගබඩාව /var/lib/containers තුළ තබා ගනී. එමනිසා, අපි මෙම ෆෝල්ඩරය තුළට අන්තර්ගතය සවි කළ යුතු අතර, අපි මෙය කරන ආකාරය බහාලුම් රූප ගොඩනැගීමේ වේගයට බෙහෙවින් බලපානු ඇත.

අපි විකල්ප තුනක් සලකා බලමු.

1 විකල්පය. උපරිම ආරක්ෂාව අවශ්‍ය නම්, එක් එක් බහාලුම් සඳහා ඔබට බහාලුම්/රූපය සඳහා ඔබේම ෆෝල්ඩරයක් සාදා එය පරිමාව සවි කිරීම හරහා කන්ටේනරයට සම්බන්ධ කළ හැකිය. ඊට අමතරව, සන්දර්භය නාමාවලිය බහාලුම් තුළම, /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

ආරක්ෂාව. එවැනි බහාලුමක් තුළ ක්‍රියාත්මක වන Buildah හට උපරිම ආරක්‍ෂාව ඇත: එයට හැකියාවන් භාවිතා කරමින් කිසිදු මූල වරප්‍රසාදයක් ලබා දී නොමැති අතර, සියලුම SECOMP සහ SELinux සීමාවන් එයට අදාළ වේ.එවැනි බහාලුමක් පරිශීලක නාම අවකාශයේ හුදකලා කිරීම සමඟ පවා ක්‍රියාත්මක කළ හැක්කේ —uidmap 0: 100000:10000.

කාර්ය සාධනය. නමුත් මෙහි කාර්ය සාධනය අවම වේ, මන්ද බහාලුම් රෙජිස්ට්‍රාර් වලින් ඕනෑම රූපයක් සෑම අවස්ථාවකම ධාරකයට පිටපත් කරන අතර හැඹිලි කිරීම කිසිසේත් ක්‍රියා නොකරයි. එහි කාර්යය සම්පූර්ණ කරන විට, Buildah කන්ටේනරය රෙජිස්ට්රි වෙත රූපය යැවිය යුතු අතර සත්කාරකයේ අන්තර්ගතය විනාශ කළ යුතුය. ඊළඟ වතාවේ බහාලුම් රූපය ගොඩනඟන විට, එය නැවත රෙජිස්ට්‍රි එකෙන් බාගත කිරීමට සිදුවනු ඇත, මන්ද ඒ වන විට සත්කාරකයේ කිසිවක් ඉතිරි නොවනු ඇත.

2 විකල්පය. ඔබට ඩොකර් මට්ටමේ කාර්ය සාධනයක් අවශ්‍ය නම්, ඔබට ධාරක බහාලුම්/ගබඩාව සෘජුවම බහාලුමට සවි කළ හැක.

# 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

ආරක්ෂාව. බහාලුම් තැනීමට ඇති අවම ආරක්ෂිත ක්‍රමය මෙය වන අතර එය ධාරකයේ ගබඩාව වෙනස් කිරීමට කන්ටේනරයට ඉඩ දෙන අතර Podman හෝ CRI-O හට ද්වේෂසහගත රූපයක් පෝෂණය කළ හැකි බැවිනි. මීට අමතරව, Buildah කන්ටේනරයේ ඇති ක්‍රියාවලීන්ට ධාරකයේ ගබඩාව සමඟ අන්තර් ක්‍රියා කළ හැකි වන පරිදි ඔබට SELinux වෙන් කිරීම අක්‍රිය කිරීමට අවශ්‍ය වනු ඇත. මෙම විකල්පය තවමත් Docker socket එකකට වඩා හොඳ බව සලකන්න, මන්ද කන්ටේනරය ඉතිරිව ඇති ආරක්ෂක විශේෂාංග මගින් අගුලු දමා ඇති අතර සරලව ධාරකය මත බහාලුමක් ධාවනය කළ නොහැක.

කාර්ය සාධනය. හැඹිලි කිරීම සම්පූර්ණයෙන්ම භාවිතා වන බැවින් මෙහි එය උපරිම වේ. Podman හෝ CRI-O විසින් දැනටමත් අවශ්‍ය රූපය ධාරකයට බාගත කර ඇත්නම්, කන්ටේනරය තුළ ඇති Buildah ක්‍රියාවලියට එය නැවත බාගත කිරීමට සිදු නොවනු ඇති අතර, මෙම රූපය මත පදනම් වූ පසුකාලීන ගොඩනැගීම් වලටද හැඹිලියෙන් අවශ්‍ය දේ ලබා ගැනීමට හැකි වේ. .

3 විකල්පය. මෙම ක්‍රමයේ සාරය නම් බහාලුම් රූප සඳහා පොදු ෆෝල්ඩරයක් සමඟ එක් ව්‍යාපෘතියකට පින්තූර කිහිපයක් ඒකාබද්ධ කිරීමයි.

# 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

මෙම උදාහරණයේ දී, අපි ව්‍යාපෘති ෆෝල්ඩරය (/var/lib/project3) ධාවනය අතර මකා නොදමන්නෙමු, එබැවින් ව්‍යාපෘතිය තුළ ඇති සියලුම පසුකාලීන ගොඩනැගීම් හැඹිලියෙන් ප්‍රතිලාභ ලබයි.

ආරක්ෂාව. විකල්ප 1 සහ 2 අතර යමක්. එක් අතකින්, බහාලුම්වලට ධාරකයේ අන්තර්ගතයට ප්‍රවේශය නොමැති අතර, ඒ අනුව, Podman/CRI-O රූප ගබඩාවට නරක දෙයක් ලිස්සා යා නොහැක. අනෙක් අතට, එහි සැලසුමේ කොටසක් ලෙස, බහාලුම් වෙනත් බහාලුම් එකලස් කිරීමට බාධා කළ හැකිය.

කාර්ය සාධනය. මෙහිදී ඔබට Podman/CRI-O භාවිතයෙන් දැනටමත් බාගත කර ඇති පින්තූර භාවිතා කළ නොහැකි බැවින්, ධාරක මට්ටමින් බෙදාගත් හැඹිලියක් භාවිතා කරන විට වඩා නරකයි. කෙසේ වෙතත්, Buildah විසින් රූපය බාගත කළ පසු, එම රූපය ව්‍යාපෘතිය තුළ ඇති ඕනෑම පසුකාලීන ගොඩනැගීමකදී භාවිතා කළ හැක.

අමතර ගබඩා කිරීම

У බහාලුම් / ගබඩා අතිරේක වෙළඳසැල් (අමතර ගබඩා) වැනි සිසිල් දෙයක් තිබේ, එයට ස්තූතිවන්ත වන පරිදි බහාලුම් දියත් කිරීමේදී සහ ගොඩනඟන විට, බහාලුම් එන්ජින්වලට කියවීමට පමණක් උඩැතිරි මාදිලියේ බාහිර රූප ගබඩා භාවිතා කළ හැකිය. අත්‍යවශ්‍යයෙන්ම, ඔබට store.conf ගොනුව වෙත කියවීමට පමණක් ගබඩා එකක් හෝ කිහිපයක් එක් කළ හැක, එවිට ඔබ කන්ටේනරය ආරම්භ කරන විට, බහාලුම් එන්ජිම ඒවා තුළ අපේක්ෂිත රූපය සොයයි. එපමණක් නොව, එය රෙජිස්ට්‍රියෙන් රූපය බාගත කරනු ලබන්නේ එය මෙම කිසිදු ගබඩාවක එය සොයාගත නොහැකි නම් පමණි. බහාලුම් එන්ජිමට ලිවිය හැකි ගබඩාවට පමණක් ලිවීමට හැකි වනු ඇත...

ඔබ ඉහළට අනුචලනය කර quay.io/buildah/stable රූපය තැනීමට අප භාවිතා කරන Dockerfile දෙස බැලුවහොත්, මෙවැනි රේඛා තිබේ:

# 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

පළමු පේළියේ, අපි බහාලුම් රූපය තුළ /etc/containers/storage.conf වෙනස් කරමු, ගබඩා ධාවකයට /var/lib/shared ෆෝල්ඩරය තුළ "additionalimagestores" භාවිතා කරන ලෙස පවසමු. ඊළඟ පේළියේ අපි හවුල් ෆෝල්ඩරයක් සාදා අගුළු ගොනු කිහිපයක් එකතු කරන්නෙමු, එවිට බහාලුම් / ගබඩාවෙන් අපයෝජනයක් සිදු නොවේ. අත්යවශ්යයෙන්ම, අපි හුදෙක් හිස් බහාලුම් රූප ගබඩාවක් නිර්මාණය කරමු.

ඔබ මෙම ෆෝල්ඩරයට වඩා ඉහළ මට්ටමක බහාලුම්/ගබඩාව සවි කළහොත්, Buildah හට පින්තූර භාවිතා කිරීමට හැකි වනු ඇත.

දැන් අපි ඉහත සාකච්ඡා කර ඇති විකල්ප 2 වෙත ආපසු යමු, Buildah කන්ටේනරය ධාරකයේ බහාලුම්/ගබඩාවට කියවීමට සහ ලිවීමට හැකි වන අතර, ඒ අනුව, Podman/CRI-O මට්ටමේ පින්තූර හැඹිලි කිරීම හේතුවෙන් උපරිම කාර්ය සාධනයක් ඇති නමුත් අවම ආරක්ෂාවක් සපයන විට. එය ගබඩාවට කෙලින්ම ලිවිය හැකි බැවින්. දැන් අපි මෙහි අමතර ගබඩා එකතු කර ලෝක දෙකෙන්ම හොඳම දේ ලබා ගනිමු.

# 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

ධාරකයේ /var/lib/containers/storage එක /var/lib/shared වෙත කන්ටේනරය තුළ කියවීමට-පමණි ආකාරයෙන් සවි කර ඇති බව සලකන්න. එබැවින්, කන්ටේනරයක වැඩ කරන, Buildah Podman/CRI-O (hello, speed) භාවිතයෙන් කලින් බාගත කළ ඕනෑම පින්තූර භාවිතා කළ හැක, නමුත් ලිවිය හැක්කේ එහි ගබඩාවට පමණි (ආයුබෝවන්, ආරක්ෂාව). මෙය බහාලුම සඳහා SELinux වෙන් කිරීම අක්‍රිය නොකර සිදු කරන බව සලකන්න.

වැදගත් නිශ්චයයකි

කිසිම අවස්ථාවක ඔබ යටින් පවතින ගබඩාවෙන් කිසිදු රූපයක් මකා දැමිය යුතු නැත. එසේ නොමැති නම්, Buildah කන්ටේනරය කඩා වැටිය හැකිය.

තවද මේ සියලු වාසි නොවේ

අතිරේක ගබඩා කිරීමේ හැකියාව ඉහත අවස්ථාවට සීමා නොවේ. උදාහරණයක් ලෙස, ඔබට සියලුම බහාලුම් පින්තූර බෙදාගත් ජාල ගබඩාවක තබා සියලු Buildah බහාලුම් වෙත ප්‍රවේශය ලබා දිය හැක. අපගේ CI/CD පද්ධතිය බහාලුම් රූප තැනීමට නිතිපතා භාවිතා කරන රූප සිය ගණනක් ඇතැයි සිතමු. අපි මෙම සියලු පින්තූර එක් ගබඩා ධාරකයක් මත සංකේන්ද්‍රණය කර, පසුව කැමති ජාල ගබඩා මෙවලම් (NFS, Gluster, Ceph, ISCSI, S3...) භාවිතා කරමින්, අපි මෙම ගබඩාවට සාමාන්‍ය ප්‍රවේශය සියලු Buildah හෝ Kubernetes nodes වෙත විවෘත කරමු.

දැන් මෙම ජාල ආචයනය /var/lib/shared මත ඇති Buildah කන්ටේනරය වෙත සවි කිරීමට ප්‍රමාණවත් වන අතර එය එයයි - Buildah බහාලුම්වලට තවදුරටත් පුල් හරහා පින්තූර බාගත කිරීමට අවශ්‍ය නොවේ. මේ අනුව, අපි පූර්ව ජනගහන අවධිය ඉවතට විසි කර වහාම බහාලුම් පෙරළීමට සූදානම්ව සිටිමු.

ඇත්ත වශයෙන්ම, මෙය සජීවී Kubernetes පද්ධතියක් හෝ බහාලුම් යටිතල ව්‍යුහයක් තුළ පින්තූර බාගත කිරීමකින් තොරව ඕනෑම තැනක බහාලුම් දියත් කිරීමට සහ ධාවනය කිරීමට භාවිතා කළ හැකිය. එපමනක් නොව, බහාලුම් රෙජිස්ට්‍රියට, යාවත්කාලීන කළ රූපයක් උඩුගත කිරීමට තල්ලු ඉල්ලීමක් ලැබීමෙන්, මෙම රූපය ස්වයංක්‍රීයව බෙදාගත් ජාල ගබඩාවකට යැවිය හැක, එහිදී එය සියලුම නෝඩ් වෙත ක්ෂණිකව ලබා ගත හැකිය.

බහාලුම් පින්තූර සමහර විට විශාලත්වයෙන් ගිගාබයිට් ගණනකට ළඟා විය හැකිය. අමතර ආචයනයේ ක්‍රියාකාරීත්වය මඟින් නෝඩ් හරහා එවැනි රූප ක්ලෝන කිරීම වළක්වා ගැනීමට සහ බහාලුම් දියත් කිරීම ක්ෂණිකව සිදු කරයි.

මීට අමතරව, අපි දැනට නව විශේෂාංගයක් මත වැඩ කරමින් සිටිමු overlay volume mounts, එය බහාලුම් තැනීම වඩාත් වේගවත් කරයි.

නිගමනය

Kubernetes/CRI-O, Podman, හෝ Docker හි කන්ටේනරයක් තුළ Buildah ධාවනය කිරීම docker.socket භාවිතා කරනවාට වඩා ශක්‍ය, සරල සහ ආරක්ෂිත වේ. අපි පින්තූර සමඟ වැඩ කිරීමේ නම්‍යශීලීභාවය බෙහෙවින් වැඩි කර ඇත, එබැවින් ඔබට ආරක්ෂාව සහ කාර්ය සාධනය අතර සමතුලිතතාවය ප්‍රශස්ත කිරීමට විවිධ ආකාරවලින් ඒවා ධාවනය කළ හැකිය.

අමතර ආචයනයේ ක්‍රියාකාරිත්වය මඟින් නෝඩ් වෙත පින්තූර බාගත කිරීම වේගවත් කිරීමට හෝ සම්පූර්ණයෙන්ම ඉවත් කිරීමට ඔබට ඉඩ සලසයි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න