புரோஹோஸ்டர் > Блог > நிர்வாகம் > சேமிப்பக திறன் கண்காணிப்புடன் கூடிய எபிமரல் தொகுதிகள்: ஸ்டீராய்டுகளில் EmptyDir
சேமிப்பக திறன் கண்காணிப்புடன் கூடிய எபிமரல் தொகுதிகள்: ஸ்டீராய்டுகளில் EmptyDir
சில பயன்பாடுகளும் தரவைச் சேமிக்க வேண்டும், ஆனால் மறுதொடக்கம் செய்த பிறகு தரவு சேமிக்கப்படாது என்ற உண்மையுடன் அவை மிகவும் வசதியாக உள்ளன.
எடுத்துக்காட்டாக, கேச்சிங் சேவைகள் RAM ஆல் வரையறுக்கப்பட்டுள்ளன, ஆனால் RAM ஐ விட மெதுவாக இருக்கும் சேமிப்பகத்திற்கு அரிதாகப் பயன்படுத்தப்படும் தரவையும் நகர்த்தலாம், ஒட்டுமொத்த செயல்திறனில் சிறிய தாக்கமும் இருக்கும். அமைப்புகள் அல்லது ரகசிய விசைகள் போன்ற கோப்புகளில் படிக்க-மட்டும் உள்ளீடு இருக்கலாம் என்பதை பிற பயன்பாடுகள் அறிந்திருக்க வேண்டும்.
குபெர்னெட்டஸில் ஏற்கனவே பல வகைகள் உள்ளன இடைக்கால தொகுதிகள், ஆனால் அவற்றின் செயல்பாடு K8 களில் செயல்படுத்தப்படுவதற்கு மட்டுமே.
எபிமரல் CSI தொகுதிகள் இலகுரக உள்ளூர் தொகுதிகளுக்கு ஆதரவை வழங்குவதற்காக குபெர்னெட்ஸை CSI இயக்கிகளுடன் நீட்டிக்க அனுமதித்தது. இந்த வழியில் பயன்படுத்த முடியும் தன்னிச்சையான கட்டமைப்புகள்: அமைப்புகள், ரகசியங்கள், அடையாள தரவு, மாறிகள் மற்றும் பல. வழக்கமான தரப்படுத்தப்பட்ட இயக்கிகள் வேலை செய்யாது என்று கருதப்படுவதால், இந்த குபெர்னெட்ஸ் அம்சத்தை ஆதரிக்க CSI இயக்கிகள் மாற்றியமைக்கப்பட வேண்டும் - ஆனால் அத்தகைய தொகுதிகள் பாட்க்கு தேர்ந்தெடுக்கப்பட்ட எந்த முனையிலும் பயன்படுத்தப்படலாம் என்று கருதப்படுகிறது.
இது குறிப்பிடத்தக்க ஹோஸ்ட் ஆதாரங்களைப் பயன்படுத்தும் தொகுதிகளுக்கு அல்லது சில ஹோஸ்ட்களில் மட்டுமே கிடைக்கும் சேமிப்பகத்திற்குச் சிக்கலாக இருக்கலாம். அதனால்தான் குபெர்னெட்டஸ் 1.19 இரண்டு புதிய ஆல்பா சோதனை தொகுதி அம்சங்களை அறிமுகப்படுத்துகிறது, அவை கருத்தியல் ரீதியாக EmptyDir தொகுதிகளுக்கு ஒத்தவை:
பொது நோக்கத்திற்கான எபிமரல் தொகுதிகள்;
CSI சேமிப்பு திறன் கண்காணிப்பு.
புதிய அணுகுமுறையின் நன்மைகள்:
சேமிப்பகம் உள்ளூர் அல்லது பிணையம் வழியாக இணைக்கப்படலாம்;
தொகுதிகள் ஒரு குறிப்பிட்ட அளவைக் கொண்டிருக்கலாம், அதை பயன்பாட்டினால் மீற முடியாது;
நிலையான தொகுதிகளை வழங்குவதை ஆதரிக்கும் மற்றும் (திறன் கண்காணிப்பை ஆதரிக்க) அழைப்பை செயல்படுத்தும் எந்த CSI இயக்கிகளுடனும் வேலை செய்கிறது GetCapacity;
இயக்கி மற்றும் அமைப்புகளைப் பொறுத்து தொகுதிகளில் சில ஆரம்ப தரவு இருக்கலாம்;
ஒரு தொகுதியுடன் அனைத்து நிலையான செயல்பாடுகளும் (ஸ்னாப்ஷாட்டை உருவாக்குதல், மறுஅளவிடுதல் போன்றவை) ஆதரிக்கப்படுகின்றன;
தொகுதி அல்லது தொகுதி விவரக்குறிப்பை ஏற்கும் எந்த பயன்பாட்டுக் கட்டுப்படுத்தியிலும் தொகுதிகள் பயன்படுத்தப்படலாம்;
குபெர்னெட்டஸ் ஷெட்யூலர் பொருத்தமான முனைகளைத் தானாகவே தேர்ந்தெடுக்கிறது, எனவே நீங்கள் இனி திட்டமிடல் நீட்டிப்புகளை வழங்கவும் கட்டமைக்கவும் மற்றும் வெப்ஹூக்குகளை மாற்றவும் தேவையில்லை.
பயன்பாட்டு விருப்பங்கள்
எனவே, பொது நோக்கத்திற்கான எபிமரல் தொகுதிகள் பின்வரும் பயன்பாட்டு நிகழ்வுகளுக்கு ஏற்றது:
மெம்கேச் செய்யப்பட்ட ரேமுக்கு மாற்றாக நிரந்தர நினைவகம்
Memcached இன் சமீபத்திய வெளியீடுகள் ஆதரவு சேர்க்கப்பட்டது நிலையான நினைவகத்தைப் பயன்படுத்துதல் (இன்டெல் ஆப்டேன், முதலியன, தோராயமாக மொழிபெயர்ப்பாளர்) வழக்கமான ரேம் பதிலாக. பயன்பாட்டுக் கட்டுப்படுத்தி மூலம் memcached ஐப் பயன்படுத்தும்போது, CSI இயக்கியைப் பயன்படுத்தி PMEM இலிருந்து கொடுக்கப்பட்ட அளவிலான ஒரு தொகுதியை ஒதுக்குமாறு கோர, பொது நோக்கத்திற்கான எபிமரல் தொகுதிகளைப் பயன்படுத்தலாம். PMEM-CSI.
LVM உள்ளூர் சேமிப்பகம் ஒரு பணியிடமாக
ரேமை விட பெரிய தரவுகளுடன் பணிபுரியும் பயன்பாடுகளுக்கு, குபெர்னெட்டஸின் வழக்கமான EmptyDir தொகுதிகள் வழங்க முடியாத அளவு அல்லது செயல்திறன் அளவீடுகளுடன் உள்ளூர் சேமிப்பிடம் தேவைப்படலாம். உதாரணமாக, இந்த நோக்கத்திற்காக இது எழுதப்பட்டது TopoLVM.
தரவு தொகுதிகளுக்கான படிக்க-மட்டும் அணுகல்
ஒரு தொகுதியின் ஒதுக்கீடு ஒரு முழு தொகுதியை உருவாக்குவதற்கு வழிவகுக்கும்:
இந்த தொகுதிகளை படிக்க மட்டும் பயன்முறையில் ஏற்றலாம்.
இது எப்படி வேலை செய்கிறது
பொது நோக்கம் எபிமரல் தொகுதிகள்
பொது நோக்கத்திற்கான எபிமரல் தொகுதிகளின் முக்கிய அம்சம் புதிய தொகுதி மூலமாகும், EphemeralVolumeSource, வால்யூம் கோரிக்கையை உருவாக்குவதற்கான அனைத்து புலங்களையும் கொண்டுள்ளது (வரலாற்று ரீதியாக ஒரு நிலையான தொகுதி கோரிக்கை, பிவிசி என அழைக்கப்படுகிறது). உள்ளே புதிய கட்டுப்படுத்தி kube-controller-manager அத்தகைய வால்யூம் மூலத்தை உருவாக்கும் காய்களைப் பார்த்து, அந்த காய்களுக்கு PVC ஐ உருவாக்குகிறது. CSI இயக்கிக்கு, இந்தக் கோரிக்கை மற்றவற்றைப் போலவே இருக்கும், எனவே இங்கு சிறப்பு ஆதரவு தேவையில்லை.
அத்தகைய PVCகள் இருக்கும் வரை, தொகுதியில் உள்ள மற்ற கோரிக்கைகளைப் போலவே அவற்றையும் பயன்படுத்தலாம். குறிப்பாக, ஒரு தொகுதியை நகலெடுக்கும் போது அல்லது ஒரு தொகுதியிலிருந்து ஒரு ஸ்னாப்ஷாட்டை உருவாக்கும் போது அவை தரவு மூலமாகக் குறிப்பிடப்படலாம். PVC பொருளில் தொகுதியின் தற்போதைய நிலையும் உள்ளது.
தானாக உருவாக்கப்பட்ட PVC களின் பெயர்கள் முன் வரையறுக்கப்பட்டவை: அவை பாட் பெயர் மற்றும் தொகுதி பெயரின் கலவையாகும், அவை ஹைபனால் பிரிக்கப்படுகின்றன. முன்வரையறுக்கப்பட்ட பெயர்கள் PVC உடன் தொடர்புகொள்வதை எளிதாக்குகின்றன, ஏனெனில் நீங்கள் பாட் பெயர் மற்றும் தொகுதி பெயர் தெரிந்தால் அதைத் தேட வேண்டியதில்லை. தீங்கு என்னவென்றால், பெயர் ஏற்கனவே பயன்பாட்டில் இருக்கலாம், இது குபெர்னெட்டஸால் கண்டறியப்பட்டது, இதன் விளைவாக பாட் தொடங்குவதில் இருந்து தடுக்கப்பட்டது.
பாட் உடன் வால்யூம் நீக்கப்படுவதை உறுதிசெய்ய, கன்ட்ரோலர் உரிமையாளரின் கீழ் உள்ள வால்யூமுக்கு கோரிக்கை வைக்கிறது. நெற்று நீக்கப்படும் போது, நிலையான குப்பை சேகரிப்பு நுட்பம் வேலை செய்கிறது, இது கோரிக்கை மற்றும் தொகுதி இரண்டையும் நீக்குகிறது.
சேமிப்பக வகுப்பின் இயல்பான வழிமுறை மூலம் சேமிப்பக இயக்கி மூலம் கோரிக்கைகள் பொருந்துகின்றன. உடனடி மற்றும் தாமதமான பிணைப்பு கொண்ட வகுப்புகள் என்றாலும் (aka WaitForFirstConsumer) ஆதரிக்கப்படுகின்றன, இடைக்கால தொகுதிகளுக்குப் பயன்படுத்துவது அர்த்தமுள்ளதாக இருக்கிறது WaitForFirstConsumer, ஒரு முனையைத் தேர்ந்தெடுக்கும் போது திட்டமிடுபவர் முனை பயன்பாடு மற்றும் சேமிப்பக இருப்பு இரண்டையும் கருத்தில் கொள்ளலாம். ஒரு புதிய அம்சம் இங்கே தோன்றும்.
சேமிப்பக திறன் கண்காணிப்பு
பொதுவாக, சிஎஸ்ஐ இயக்கி வால்யூமை உருவாக்கும் இடத்தைப் பற்றி திட்டமிடுபவருக்குத் தெரியாது. இந்தத் தகவலைக் கோர, திட்டமிடுபவர் நேரடியாக டிரைவரைத் தொடர்புகொள்வதற்கும் வழி இல்லை. எனவே, எந்த தொகுதிகளை அணுகலாம் (தாமதமாக பிணைத்தல்) அல்லது இருப்பிடத்தின் தேர்வை முழுவதுமாக இயக்குனரிடம் (உடனடி பிணைப்பு) விட்டுவிடும் வரை திட்டமிடுபவர் வாக்கெடுப்பு முனைகளை நடத்துகிறார்.
புதிய ஏபிஐCSIStorageCapacity, இது ஆல்பா நிலையில் உள்ளது, தேவையான தரவுகளை முதலியன சேமிக்க அனுமதிக்கிறது, இதனால் அது திட்டமிடுபவருக்கு கிடைக்கும். பொது நோக்கத்திற்கான எபிமரல் தொகுதிகளுக்கான ஆதரவைப் போலன்றி, நீங்கள் இயக்கியைப் பயன்படுத்தும்போது, சேமிப்பக திறன் கண்காணிப்பை நீங்கள் இயக்க வேண்டும்: external-provisioner ஓட்டுநரிடமிருந்து பெறப்பட்ட திறன் தகவலை சாதாரண வழியாக வெளியிட வேண்டும் GetCapacity.
காலதாமதமான பிணைப்பைப் பயன்படுத்தும் வரம்பற்ற ஒலியளவு கொண்ட பாட்க்கான முனையைத் திட்டமிடுபவர் தேர்ந்தெடுக்க வேண்டும் என்றால், இயக்கி இந்த அம்சத்தை இயக்கத்தின் போது கொடியை அமைப்பதன் மூலம் இயக்கியிருந்தால் CSIDriver.storageCapacity, பின்னர் போதுமான சேமிப்பு திறன் இல்லாத முனைகள் தானாகவே நிராகரிக்கப்படும். இது பொது நோக்கத்திற்கான எபிமரல் மற்றும் தொடர்ச்சியான தொகுதிகள் இரண்டிற்கும் வேலை செய்கிறது, ஆனால் CSI எபிமரல் தொகுதிகளுக்கு அல்ல, ஏனெனில் அவற்றின் அளவுருக்கள் குபெர்னெட்டஸால் படிக்க முடியாது.
வழக்கம் போல், காய்கள் திட்டமிடப்படுவதற்கு முன் உடனடியாக இணைக்கப்பட்ட தொகுதிகள் உருவாக்கப்படும், மேலும் அவற்றின் இடம் சேமிப்பக இயக்கி மூலம் தேர்ந்தெடுக்கப்படும், எனவே கட்டமைக்கும் போது external-provisioner முன்னிருப்பாக, உடனடி பிணைப்புடன் கூடிய சேமிப்பக வகுப்புகள் தவிர்க்கப்படும், ஏனெனில் இந்தத் தரவு எப்படியும் பயன்படுத்தப்படாது.
kubernetes திட்டமிடுபவர் காலாவதியான தகவல்களுடன் பணிபுரிய வேண்டிய கட்டாயத்தில் இருப்பதால், ஒலியளவை உருவாக்கும் போது ஒவ்வொரு சந்தர்ப்பத்திலும் திறன் கிடைக்கும் என்பதற்கு எந்த உத்தரவாதமும் இல்லை, இருப்பினும் மீண்டும் முயற்சிகள் இல்லாமல் உருவாக்கப்படும் வாய்ப்புகள் அதிகரிக்கின்றன.
பின்குறிப்பு நீங்கள் இன்னும் விரிவான தகவல்களைப் பெறலாம், அதே போல் பாதுகாப்பாக "பூனைகளின் நிலைப்பாட்டில் பயிற்சி" செய்யலாம், மேலும் முற்றிலும் புரிந்துகொள்ள முடியாத சூழ்நிலை ஏற்பட்டால், தீவிர படிப்புகளில் தகுதிவாய்ந்த தொழில்நுட்ப ஆதரவு உதவியைப் பெறலாம் - குபெர்னெட்டஸ் தளம் செப்டம்பர் 28-30 அன்று நடைபெறும், மேலும் மேம்பட்ட நிபுணர்களுக்காக குபெர்னெட்டஸ் மெகா அக்டோபர் 14-16.
பாதுகாப்பு
CSIS சேமிப்பக திறன்
CSIStorageCapacity ஆப்ஜெக்ட்கள் பெயர்வெளிகளில் உள்ளன; ஒவ்வொரு CSI இயக்கியையும் அதன் சொந்த பெயர்வெளியில் உருட்டும்போது, தரவு எங்கிருந்து வருகிறது என்பது தெளிவாக இருப்பதால், அந்த இடத்தில் CSIStorageCapacityக்கு RBAC உரிமைகளை கட்டுப்படுத்துவது பரிந்துரைக்கப்படுகிறது. குபெர்னெட்டஸ் இதை எப்படியும் சரிபார்க்கவில்லை, பொதுவாக இயக்கிகள் அதே பெயர்வெளியில் வைக்கப்படுகின்றன, எனவே இறுதியில் டிரைவர்கள் வேலை செய்வார்கள் மற்றும் தவறான தரவை வெளியிட மாட்டார்கள் என்று எதிர்பார்க்கப்படுகிறது (இங்குதான் எனது கார்டு தோல்வியடைந்தது, தோராயமாக ஒரு தாடி நகைச்சுவையை அடிப்படையாகக் கொண்ட மொழிபெயர்ப்பாளர்)
பொது நோக்கம் எபிமரல் தொகுதிகள்
பயனர்களுக்கு ஒரு பாட் (நேரடியாகவோ அல்லது மறைமுகமாகவோ) உருவாக்க உரிமை இருந்தால், தொகுதியில் கோரிக்கையை உருவாக்க அவர்களுக்கு உரிமை இல்லாவிட்டாலும், பொது நோக்கத்திற்கான இடைக்கால தொகுதிகளை உருவாக்க முடியும். ஏனென்றால், RBAC அனுமதிச் சோதனைகள் பயனருக்கு அல்ல, PVC ஐ உருவாக்கும் கட்டுப்படுத்திக்கு பயன்படுத்தப்படும். சேர்க்க வேண்டிய முக்கிய மாற்றம் இதுதான் உங்கள் கணக்கில், நம்பத்தகாத பயனர்களுக்கு தொகுதிகளை உருவாக்க உரிமை இல்லாத கிளஸ்டர்களில் இந்த அம்சத்தை இயக்கும் முன்.
உதாரணமாக
தனி கிளை ஆல்பா நிலையில் உள்ள அனைத்து அம்சங்களுடன் QEMU மெய்நிகர் இயந்திரங்களுக்குள் குபெர்னெட்ஸ் 1.19 கிளஸ்டரை இயக்க தேவையான அனைத்து மாற்றங்களையும் PMEM-CSI கொண்டுள்ளது. இயக்கி குறியீடு மாறவில்லை, வரிசைப்படுத்தல் மட்டுமே மாறிவிட்டது.
பொருத்தமான கணினியில் (லினக்ஸ், ஒரு சாதாரண பயனர் பயன்படுத்தலாம் கூலியாள், பார் இங்கே விவரங்கள்) இந்த கட்டளைகள் கிளஸ்டரைக் கொண்டு வந்து PMEM-CSI இயக்கியை நிறுவும்:
git clone --branch=kubernetes-1-19-blog-post https://github.com/intel/pmem-csi.git
cd pmem-csi
export TEST_KUBERNETES_VERSION=1.19 TEST_FEATURE_GATES=CSIStorageCapacity=true,GenericEphemeralVolume=true TEST_PMEM_REGISTRY=intel
make start && echo && test/setup-deployment.sh
எல்லாம் வேலை செய்த பிறகு, வெளியீட்டில் பயன்பாட்டிற்கான வழிமுறைகள் இருக்கும்:
The test cluster is ready. Log in with [...]/pmem-csi/_work/pmem-govm/ssh.0, run
kubectl once logged in. Alternatively, use kubectl directly with the
following env variable:
KUBECONFIG=[...]/pmem-csi/_work/pmem-govm/kube.config
secret/pmem-csi-registry-secrets created
secret/pmem-csi-node-secrets created
serviceaccount/pmem-csi-controller created
...
To try out the pmem-csi driver ephemeral volumes:
cat deploy/kubernetes-1.19/pmem-app-ephemeral.yaml |
[...]/pmem-csi/_work/pmem-govm/ssh.0 kubectl create -f -
CSIStorageCapacity பொருள்கள் மனிதர்களால் படிக்கப்பட வேண்டியவை அல்ல, எனவே சில செயலாக்கம் தேவைப்படுகிறது. கோலாங் டெம்ப்ளேட் வடிப்பான்கள் சேமிப்பக வகுப்புகளைக் காண்பிக்கும், இந்த எடுத்துக்காட்டு பெயர், இடவியல் மற்றும் திறன் ஆகியவற்றைக் காண்பிக்கும்:
ஒரு பொது நோக்கத்திற்கான எபிமரல் தொகுதியுடன் டெமோ பயன்பாட்டை உருவாக்க முயற்சிப்போம். கோப்பு உள்ளடக்கங்கள் pmem-app-ephemeral.yaml:
# This example Pod definition demonstrates
# how to use generic ephemeral inline volumes
# with a PMEM-CSI storage class.
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app-inline-volume
spec:
containers:
- name: my-frontend
image: intel/pmem-csi-driver-test:v0.7.14
command: [ "sleep", "100000" ]
volumeMounts:
- mountPath: "/data"
name: my-csi-volume
volumes:
- name: my-csi-volume
ephemeral:
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
storageClassName: pmem-csi-sc-late-binding
உருவாக்கிய பிறகு, மேலே உள்ள வழிமுறைகளில் காட்டப்பட்டுள்ளபடி, இப்போது எங்களிடம் கூடுதல் பாட் மற்றும் PVC உள்ளது:
$ kubectl get pods/my-csi-app-inline-volume -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-csi-app-inline-volume 1/1 Running 0 6m58s 10.36.0.2 pmem-csi-pmem-govm-worker1 <none> <none>
$ kubectl get pvc/my-csi-app-inline-volume-my-csi-volume
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-csi-app-inline-volume-my-csi-volume Bound pvc-c11eb7ab-a4fa-46fe-b515-b366be908823 4Gi RWO pmem-csi-sc-late-binding 9m21s
மற்றொரு பயன்பாட்டிற்கு 26620Miக்கு மேல் தேவைப்பட்டால், திட்டமிடுபவர் கணக்கில் எடுத்துக்கொள்ள மாட்டார் pmem-csi-pmem-govm-worker1 எந்த விஷயத்திலும்.
அடுத்து என்ன?
இரண்டு அம்சங்களும் இன்னும் வளர்ச்சியில் உள்ளன. ஆல்பா சோதனையின் போது பல பயன்பாடுகள் திறக்கப்பட்டன. மேம்படுத்தல் முன்மொழிவு இணைப்புகள் பீட்டா நிலைக்குச் செல்வதற்குச் செய்ய வேண்டிய பணிகளை ஆவணப்படுத்துகின்றன, அத்துடன் மாற்று வழிகள் ஏற்கனவே பரிசீலிக்கப்பட்டு நிராகரிக்கப்பட்டுள்ளன: