በመያዣ ውስጥ Buildah ለማሄድ መመሪያዎች

የእቃ መጫኛ ጊዜውን ወደ ተለያዩ የመሳሪያ ክፍሎች የመለየት ውበት ምንድነው? በተለይም እነዚህ መሳሪያዎች እርስ በርስ እንዲከላከሉ ለማድረግ መቀላቀል ሊጀምሩ ይችላሉ.

በመያዣ ውስጥ Buildah ለማሄድ መመሪያዎች

ብዙ ሰዎች የ OCI መያዣ ምስሎችን በመገንባት ሀሳብ ይሳባሉ ኩባንያቶች ወይም ተመሳሳይ ስርዓት. ምስሎችን ያለማቋረጥ የሚገነባ CI/ሲዲ አለን እንበል፣ ከዚያ የሆነ ነገር Red Hat OpenShift/ Kubernetes የግንባታ ጭነት ሚዛንን በተመለከተ በጣም ጠቃሚ ይሆናል. እስከ ቅርብ ጊዜ ድረስ፣ አብዛኛው ሰው በቀላሉ ኮንቴይነሮችን ወደ ዶከር ሶኬት ሰጥተው የመትከያ ግንባታ ትዕዛዙን እንዲያሄዱ ፈቅዶላቸዋል። ከጥቂት አመታት በፊት አሳይተናልይህ በጣም ደህንነቱ ያልተጠበቀ ነው፣ በእውነቱ፣ የይለፍ ቃል አልባ ስር ወይም ሱዶ ከመስጠት የበለጠ የከፋ ነው።

ስለዚህ ሰዎች ያለማቋረጥ Buildah በኮንቴይነር ውስጥ ለማስኬድ እየሞከሩ ነው። ባጭሩ እኛ ፈጠርን። ምሳሌ በእኛ አስተያየት, Buildah በእቃ መያዣ ውስጥ እንዴት ማስኬድ የተሻለ ነው, እና ተዛማጅ ምስሎችን በመለጠፍ ላይ quay.io/buildah. እንጀምር...

በደንብ ማድረግ

እነዚህ ምስሎች ከ Dockerfiles የተገነቡ ናቸው, ይህም በአቃፊው ውስጥ ባለው የBuildah ማከማቻ ውስጥ ሊገኙ ይችላሉ ግንባታ.
እዚህ እንመለከታለን የተረጋጋ የ 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 ይልቅ፣ ፕሮግራሙን በመያዣው ውስጥ እንጠቀማለን ፊውዝ ተደራቢምክንያቱም በአሁኑ ጊዜ ተደራቢFS ሊሰካ የሚችለው የSYS_ADMIN ፍቃዶችን በሊኑክስ ችሎታዎች ከሰጡት ብቻ ነው። እና የእኛን የBuildah ኮንቴይነሮች ያለ ምንም የስር መብቶችን ማስኬድ እንፈልጋለን። ፊውዝ-ተደራቢ በጣም ፈጣን ነው እና ከቪኤፍኤስ ማከማቻ ነጂ የተሻለ ይሰራል። Fuse ን በመጠቀም የ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. ከፍተኛ ደህንነት የሚያስፈልግ ከሆነ ለእያንዳንዱ ኮንቴይነር የራስዎን ማህደር ለመያዣዎች / ምስል መፍጠር እና ከእቃ መያዣው ጋር በድምጽ ማያያዣ ማገናኘት ይችላሉ ። እና በተጨማሪ፣ የአውድ ማውጫውን በእቃ መያዣው ውስጥ፣ በ/ግንባታ ማህደር ውስጥ ያስቀምጡ፡-

# 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

ደህንነት. መያዣው በአስተናጋጁ ላይ ያለውን ማከማቻ እንዲቀይር ስለሚያስችለው እና ተንኮል-አዘል ምስል ወደ ፖድማን ወይም CRI-O ሊያስገባ ስለሚችል ይህ ኮንቴይነሮችን ለመገንባት በጣም አስተማማኝ መንገድ ነው። በተጨማሪም, በBuildah ኮንቴይነር ውስጥ ያሉት ሂደቶች በአስተናጋጁ ላይ ካለው ማከማቻ ጋር መስተጋብር እንዲፈጥሩ የ SELinux መለያየትን ማሰናከል ያስፈልግዎታል. ይህ አማራጭ አሁንም ከዶከር ሶኬት የተሻለ መሆኑን ልብ ይበሉ, ምክንያቱም መያዣው በቀሩት የደህንነት ባህሪያት ታግዷል እና በአስተናጋጁ ላይ ማንኛውንም ኮንቴይነር በቀላሉ ማንሳት እና ማስኬድ አይችልም.

አፈፃፀም ፡፡ መሸጎጫ ሙሉ በሙሉ ስለሚሳተፍ እዚህ ከፍተኛው ነው። 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 መካከል የሆነ ነገር በአንድ በኩል ኮንቴይነሮች በአስተናጋጁ ላይ የይዘት መዳረሻ የላቸውም እና በዚህ መሰረት መጥፎ ነገርን ወደ ፖድማን / CRI-O ምስል ማከማቻ ውስጥ ማስገባት አይችሉም። በሌላ በኩል, በእራሱ ፕሮጀክት ውስጥ, አንድ ኮንቴይነር የሌሎች ኮንቴይነሮች ስብስብ ውስጥ ጣልቃ መግባት ይችላል.

አፈፃፀም ፡፡ ፖድማን / CRI-Oን በመጠቀም የወረዱ ምስሎችን መጠቀም ስለማይችሉ እዚህ በአስተናጋጅ ደረጃ የጋራ መሸጎጫ ከመጠቀም የከፋ ነው። ነገር ግን፣ አንድ ጊዜ Buildah ምስሉን ካወረደ በኋላ፣ ያ ምስል በፕሮጀክቱ ውስጥ በሚደረጉ ማናቸውም ግንባታዎች ውስጥ ጥቅም ላይ ሊውል ይችላል።

ተጨማሪ ማከማቻ

У መያዣዎች / ማከማቻ እንደ ተጨማሪ መደብሮች (ተጨማሪ መደብሮች) ጥሩ ነገር አለ ፣ ለዚህም ምስጋና ይግባውና ኮንቴይነሮችን በሚገነቡበት ጊዜ የእቃ መያዢያ ሞተሮች ውጫዊ ምስሎችን በንባብ-ብቻ ተደራቢ ሁነታ መጠቀም ይችላሉ። በእውነቱ, አንድ ወይም ከዚያ በላይ ተነባቢ-ብቻ ማከማቻዎችን ወደ ማከማቻ.conf ፋይል ማከል ይችላሉ, ስለዚህም መያዣው ሲጀምር, የእቃ መጫኛ ሞተሩ በእነሱ ውስጥ የሚፈለገውን ምስል ይፈልጋል. ከዚህም በላይ ምስሉን ከመዝገቡ ውስጥ የሚያወርደው በእነዚህ ማከማቻዎች ውስጥ ካላገኘ ብቻ ነው። የኮንቴይነር ሞተር ሊፃፍ በሚችል ማከማቻ ላይ ብቻ መጻፍ ይችላል።

ወደላይ ከተሸብልልን እና የ quay.io/buildah/stable ምስልን ለመገንባት የምንጠቀመውን ዶከርፋይል ከተመለከትን እንደዚህ ያሉ መስመሮች አሉ።

# 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/share አቃፊ ውስጥ "additionalimagestores" እንዲጠቀም እንነግረዋለን. እና በሚቀጥለው መስመር ፣የተጋራ አቃፊ እንፈጥራለን እና ከመያዣ / ማከማቻ ምንም አይነት አላግባብ መጠቀም እንዳይኖር ሁለት የመቆለፊያ ፋይሎችን እንጨምራለን ። በመሰረቱ፣ ባዶ የመያዣ ምስል ማከማቻ እየፈጠርን ነው።

ኮንቴይነሮችን ከጫኑ/ከዚህ አቃፊ በላይ ደረጃ ካከማቹ Buildah ምስሎቹን መጠቀም ይችላል።

አሁን ከላይ ወደ ተነጋገርነው አማራጭ 2 እንመለስ፣ የBuildah ኮንቴይነሩ ወደ ኮንቴይነሮች ማንበብ እና መጻፍ ሲችል / በአስተናጋጆች ላይ ማከማቸት እና በዚህ መሠረት በፖድማን / 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/ማከማቻ ወደ /var/lib/በመያዣው ውስጥ በተነባቢ-ብቻ ሁነታ እንደተጋራ ልብ ይበሉ። ስለዚህ, በኮንቴይነር ውስጥ በመስራት, Buildah ቀድሞውኑ በፖድማን / CRI-O (ሄሎ, ፍጥነት) በመጠቀም የወረዱትን ማንኛውንም ምስሎች መጠቀም ይችላል, ነገር ግን ወደ ራሱ ማከማቻ (ሄሎ, ደህንነት) ብቻ መጻፍ ይችላል. እንዲሁም ይህ የሚደረገው ለመያዣው የ SELinux መለያየትን ሳያሰናክል መሆኑን ልብ ይበሉ።

አስፈላጊ ባህርይ

በምንም አይነት ሁኔታ ማንኛውም ምስሎች ከስር ማከማቻው መሰረዝ የለባቸውም። አለበለዚያ የBuildah መያዣው ሊበላሽ ይችላል.

ጥቅሞቹም ያ ብቻ አይደሉም።

የተጨማሪ ማከማቻ እድሎች ከላይ ባለው ሁኔታ ብቻ የተገደቡ አይደሉም። ለምሳሌ፣ ሁሉንም የመያዣ ምስሎች በጋራ የአውታረ መረብ ማከማቻ ውስጥ ማስቀመጥ እና ለሁሉም የBuildah ኮንቴይነሮች መዳረሻ መስጠት ይችላሉ። የእኛ የሲአይ/ሲዲ ስርዓታችን በመያዣ የተያዙ ምስሎችን ለመገንባት በየጊዜው የሚጠቀምባቸው በመቶዎች የሚቆጠሩ ምስሎች አሉን እንበል። እነዚህን ሁሉ ምስሎች በአንድ የማከማቻ አስተናጋጅ ላይ እናተኩራቸዋለን እና ከዚያም ተመራጭ የአውታረ መረብ ማከማቻ መሳሪያዎችን (NFS፣ Gluster፣ Ceph፣ iSCSI፣ S3 ...) በመጠቀም ይህን ማከማቻ ከሁሉም Buildah ወይም Kubernetes nodes ጋር እናጋራለን።

አሁን ይህንን የአውታረ መረብ ማከማቻ ወደ Buildah መያዣ በ /var/lib/share ላይ መጫን በቂ ነው እና ያ ነው - Buildah ኮንቴይነሮች ከአሁን በኋላ ምስሎችን በመጎተት ማውረድ የለባቸውም። ስለዚህ, የቅድመ-ሕዝብ ደረጃን እንወረውራለን እና ወዲያውኑ እቃዎቹን ለማውጣት ዝግጁ ነን.

እና በእርግጥ ፣ ይህ በቀጥታ የኩበርኔትስ ስርዓት ወይም የእቃ መያዥያ መሠረተ ልማት ውስጥ ማንኛውንም ምስል ሳይጎትቱ ኮንቴይነሮችን በማንኛውም ቦታ ለማስጀመር እና ለማስኬድ ሊያገለግል ይችላል። ከዚህም በላይ የኮንቴይነር መዝገብ ቤት የዘመነውን ምስል ወደ እሱ ለመጫን የግፊት ጥያቄ ሲደርሰው፣ ይህን ምስል በራስ ሰር ወደ የተጋራ የአውታረ መረብ ማከማቻ መላክ ይችላል፣ ይህም ለሁሉም አንጓዎች ወዲያውኑ ይገኛል።

የመያዣ ምስሎች አንዳንድ ጊዜ በመጠን ብዙ ጊጋባይት ሊሆኑ ይችላሉ። የተጨማሪ ማከማቻዎች ተግባራዊነት እንደዚህ ያሉ ምስሎችን በመስቀለኛ መንገድ የመዝጋትን አስፈላጊነት ያስወግዳል እና የእቃ መያዢያዎችን መጀመር ወዲያውኑ ያደርገዋል።

በተጨማሪም, በአሁኑ ጊዜ ኮንቴይነሮችን ግንባታ የበለጠ ፈጣን የሚያደርገውን አዲስ የተደራቢ ጥራዝ መጫኛዎች ባህሪ እየሰራን ነው.

መደምደሚያ

Buildah በኮንቴይነር ውስጥ በኩበርኔትስ/CRI-O አካባቢ፣ ፖድማን ወይም ዶከር ውስጥ ማስኬድ በጣም ይቻላል፣ እና docker.socketን ከመጠቀም ቀላል እና የበለጠ ደህንነቱ የተጠበቀ ነው። ከምስሎች ጋር የመሥራት ተለዋዋጭነትን በእጅጉ ጨምረናል, እና አሁን በደህንነት እና በአፈፃፀም መካከል የተሻለውን ሚዛን ለመጠበቅ በተለያዩ መንገዶች ማስኬድ ይችላሉ.

የተጨማሪ ማከማቻዎች ተግባራዊነት ምስሎችን ወደ አንጓዎች ማውረድን ለማፋጠን ወይም ሙሉ በሙሉ ለማስወገድ ያስችልዎታል።

ምንጭ: hab.com

አስተያየት ያክሉ