கன்டெய்னர் இயக்க நேரத்தை தனித்தனி கருவி கூறுகளாக பிரித்தெடுப்பதில் என்ன அழகு? குறிப்பாக, இந்த கருவிகள் ஒன்றிணைக்கத் தொடங்கலாம், இதனால் அவை ஒருவருக்கொருவர் பாதுகாக்கின்றன.
கன்டெய்னரைஸ் செய்யப்பட்ட OCI படங்களை உள்ளே உருவாக்கும் யோசனையில் பலர் ஈர்க்கப்படுகிறார்கள்
அதனால்தான் மக்கள் தொடர்ந்து பில்டாவை ஒரு கொள்கலனில் இயக்க முயற்சிக்கிறார்கள். சுருக்கமாக, நாங்கள் உருவாக்கினோம்
சரிசெய்தல்
இந்த படங்கள் Dockerfiles இலிருந்து உருவாக்கப்பட்டுள்ளன, அவை கோப்புறையில் உள்ள Buildah களஞ்சியத்தில் காணப்படுகின்றன.
இங்கே நாம் பார்ப்போம்
# 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 க்குப் பதிலாக, கொள்கலனுக்குள் நிரலைப் பயன்படுத்துகிறோம்
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
அடுத்து கூடுதல் சேமிப்பகத்திற்காக ஒரு கோப்பகத்தை உருவாக்குகிறோம்.
# 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 சூழல் மாறியைப் பயன்படுத்துவதன் மூலம், பில்டாஹ் கொள்கலனை இயல்பாக chroot தனிமைப்படுத்தலுடன் இயக்கச் சொல்கிறோம். நாங்கள் ஏற்கனவே ஒரு கொள்கலனில் வேலை செய்வதால் கூடுதல் காப்பு இங்கே தேவையில்லை. Buildah அதன் சொந்த பெயர்வெளி-பிரிக்கப்பட்ட கண்டெய்னர்களை உருவாக்க, SYS_ADMIN சிறப்புரிமை தேவைப்படுகிறது, இது கொள்கலனின் SELinux மற்றும் SECCOMP விதிகளை தளர்த்த வேண்டும், இது பாதுகாப்பான கொள்கலனில் இருந்து உருவாக்குவதற்கான எங்கள் விருப்பத்திற்கு முரணானது.
ஒரு கொள்கலனுக்குள் பில்டாவை இயக்குதல்
மேலே விவாதிக்கப்பட்ட 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 க்கு தீங்கிழைக்கும் படத்தை ஊட்டக்கூடும். கூடுதலாக, நீங்கள் SELinux பிரிப்பை முடக்க வேண்டும், இதனால் Buildah கொள்கலனில் உள்ள செயல்முறைகள் ஹோஸ்டில் உள்ள சேமிப்பகத்துடன் தொடர்பு கொள்ள முடியும். டோக்கர் சாக்கெட்டை விட இந்த விருப்பம் இன்னும் சிறந்தது என்பதை நினைவில் கொள்ளவும், ஏனெனில் மீதமுள்ள பாதுகாப்பு அம்சங்களால் கொள்கலன் பூட்டப்பட்டுள்ளது மற்றும் ஹோஸ்டில் ஒரு கொள்கலனை இயக்க முடியாது.
செயல்திறன். கேச்சிங் முழுமையாகப் பயன்படுத்தப்படுவதால், இங்கே இது அதிகபட்சம். 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 படத்தைப் பதிவிறக்கம் செய்தவுடன், அந்தத் திட்டத்தில் உள்ள எந்த அடுத்தடுத்த கட்டங்களிலும் படத்தைப் பயன்படுத்தலாம்.
கூடுதல் சேமிப்பு
У
நீங்கள் மேலே சென்று, 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 க்குத் திரும்புவோம், பில்டா கொள்கலன் ஹோஸ்ட்களில் உள்ள கொள்கலன்கள்/சேமிப்புகளைப் படிக்கவும் எழுதவும் முடியும், அதன்படி, 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 (ஹலோ, வேகம்) பயன்படுத்தி முன்பு பதிவிறக்கம் செய்யப்பட்ட எந்தப் படங்களையும் பயன்படுத்த முடியும், ஆனால் அதன் சொந்த சேமிப்பகத்தில் மட்டுமே எழுத முடியும் (ஹலோ, பாதுகாப்பு). கொள்கலனுக்கான SELinux பிரிப்பை முடக்காமல் இது செய்யப்படுகிறது என்பதையும் நினைவில் கொள்ளவும்.
முக்கியமான நுணுக்கம்
எந்தச் சூழ்நிலையிலும் அடிப்படைக் களஞ்சியத்திலிருந்து எந்தப் படங்களையும் நீக்கக் கூடாது. இல்லையெனில், Buildah கொள்கலன் செயலிழக்கக்கூடும்.
மேலும் இவை அனைத்தும் நன்மைகள் அல்ல
கூடுதல் சேமிப்பகத்தின் சாத்தியக்கூறுகள் மேலே உள்ள சூழ்நிலையில் மட்டும் அல்ல. எடுத்துக்காட்டாக, நீங்கள் அனைத்து கொள்கலன் படங்களையும் பகிரப்பட்ட பிணைய சேமிப்பகத்தில் வைக்கலாம் மற்றும் அனைத்து Buildah கொள்கலன்களுக்கும் அணுகலை வழங்கலாம். எங்களிடம் நூற்றுக்கணக்கான படங்கள் உள்ளன என்று வைத்துக்கொள்வோம், எங்கள் CI/CD அமைப்பு, கொள்கலன் படங்களை உருவாக்க வழக்கமாகப் பயன்படுத்துகிறது. இந்தப் படங்கள் அனைத்தையும் ஒரு சேமிப்பக ஹோஸ்டில் குவித்து, விருப்பமான பிணைய சேமிப்பகக் கருவிகளைப் (NFS, Gluster, Ceph, ISCSI, S3...) பயன்படுத்தி, இந்தச் சேமிப்பகத்திற்கான பொது அணுகலை அனைத்து Buildah அல்லது Kubernetes முனைகளுக்கும் திறக்கிறோம்.
இப்போது இந்த நெட்வொர்க் சேமிப்பகத்தை /var/lib/shared இல் உள்ள Buildah கொள்கலனில் ஏற்றினால் போதும், அவ்வளவுதான் - Buildah கண்டெய்னர்கள் இனி இழுப்பதன் மூலம் படங்களைப் பதிவிறக்க வேண்டியதில்லை. இதனால், மக்கள்தொகைக்கு முந்தைய கட்டத்தை நாங்கள் தூக்கி எறிந்துவிட்டு, உடனடியாக கொள்கலன்களை உருட்ட தயாராக இருக்கிறோம்.
நிச்சயமாக, இது ஒரு நேரடி குபெர்னெட்டஸ் அமைப்பு அல்லது கொள்கலன் உள்கட்டமைப்பில் படங்களைப் பதிவிறக்கம் செய்யாமல் எங்கும் கொள்கலன்களைத் தொடங்கவும் இயக்கவும் பயன்படுத்தப்படலாம். மேலும், கன்டெய்னர் ரெஜிஸ்ட்ரி, அதில் புதுப்பிக்கப்பட்ட படத்தைப் பதிவேற்றுவதற்கான புஷ் கோரிக்கையைப் பெறுகிறது, இந்தப் படத்தை தானாகவே பகிரப்பட்ட பிணைய சேமிப்பகத்திற்கு அனுப்பலாம், அங்கு அது உடனடியாக எல்லா முனைகளுக்கும் கிடைக்கும்.
கொள்கலன் படங்கள் சில நேரங்களில் பல ஜிகாபைட் அளவை எட்டும். கூடுதல் சேமிப்பகத்தின் செயல்பாடு, கணுக்கள் முழுவதும் இதுபோன்ற படங்களை குளோனிங் செய்வதைத் தவிர்க்க உங்களை அனுமதிக்கிறது மற்றும் கொள்கலன்களைத் தொடங்குவதை கிட்டத்தட்ட உடனடியாக செய்கிறது.
கூடுதலாக, நாங்கள் தற்போது ஓவர்லே வால்யூம் மவுண்ட்ஸ் எனப்படும் புதிய அம்சத்தை உருவாக்கி வருகிறோம், இது கொள்கலன்களை இன்னும் வேகமாக உருவாக்கும்.
முடிவுக்கு
Kubernetes/CRI-O, Podman அல்லது Docker இல் உள்ள ஒரு கொள்கலனுக்குள் Buildah ஐ இயக்குவது சாத்தியமானது, எளிமையானது மற்றும் docker.socket ஐப் பயன்படுத்துவதை விட மிகவும் பாதுகாப்பானது. படங்களுடன் பணிபுரியும் நெகிழ்வுத்தன்மையை நாங்கள் பெரிதும் அதிகரித்துள்ளோம், எனவே பாதுகாப்புக்கும் செயல்திறனுக்கும் இடையிலான சமநிலையை மேம்படுத்த பல்வேறு வழிகளில் அவற்றை இயக்கலாம்.
கூடுதல் சேமிப்பகத்தின் செயல்பாடு முனைகளில் படங்களைப் பதிவிறக்குவதை விரைவுபடுத்த அல்லது முற்றிலுமாக அகற்ற உங்களை அனுமதிக்கிறது.
ஆதாரம்: www.habr.com