Yandex.Cloud க்கான குபெர்னெட்ஸில் ஒரு CSI இயக்கியை உருவாக்குவதில் எங்கள் அனுபவம்

Yandex.Cloud க்கான குபெர்னெட்ஸில் ஒரு CSI இயக்கியை உருவாக்குவதில் எங்கள் அனுபவம்

குபெர்னெட்ஸிற்கான ஓப்பன் சோர்ஸ் கருவிகளை வெளியிடுவதன் மூலம் Flant அதன் பங்களிப்பை விரிவுபடுத்துகிறது என்பதை அறிவிப்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம். CSI இயக்கியின் ஆல்பா பதிப்பு (கொள்கலன் சேமிப்பு இடைமுகம்) Yandex.Cloud க்கான.

ஆனால் செயல்படுத்தல் விவரங்களுக்குச் செல்வதற்கு முன், யாண்டெக்ஸில் ஏற்கனவே ஒரு சேவை இருக்கும்போது இது ஏன் தேவைப்படுகிறது என்ற கேள்விக்கு பதிலளிப்போம். குபெர்னெட்டிற்கான நிர்வகிக்கப்பட்ட சேவை.

அறிமுகம்

இது ஏன்?

எங்கள் நிறுவனத்திற்குள், உற்பத்தியில் குபெர்னெட்ஸைப் பயன்படுத்துவதற்கான ஆரம்பத்திலிருந்தே (அதாவது இப்போது பல ஆண்டுகளாக), நாங்கள் எங்கள் சொந்த கருவியை (டெக்ஹவுஸ்) உருவாக்கி வருகிறோம், இது விரைவில் திறந்த மூல திட்டமாக கிடைக்கவும் திட்டமிட்டுள்ளோம். . அதன் உதவியுடன், நாங்கள் எங்கள் அனைத்து கிளஸ்டர்களையும் ஒரே மாதிரியாக உள்ளமைத்து உள்ளமைக்கிறோம், தற்போது அவற்றில் 100 க்கும் மேற்பட்டவை, பல்வேறு வகையான வன்பொருள் உள்ளமைவுகள் மற்றும் கிடைக்கக்கூடிய அனைத்து கிளவுட் சேவைகளிலும் உள்ளன.

டெக்ஹவுஸைப் பயன்படுத்தும் கிளஸ்டர்கள் செயல்பாட்டிற்குத் தேவையான அனைத்து கூறுகளையும் கொண்டிருக்கின்றன: பேலன்சர்கள், வசதியான விளக்கப்படங்களுடன் கண்காணிப்பு, அளவீடுகள் மற்றும் விழிப்பூட்டல்கள், அனைத்து டாஷ்போர்டுகளுக்கான அணுகலுக்கான வெளிப்புற வழங்குநர்கள் மூலம் பயனர் அங்கீகாரம் மற்றும் பல. நிர்வகிக்கப்பட்ட தீர்வில் அத்தகைய "பம்ப் அப்" கிளஸ்டரை நிறுவுவதில் எந்த அர்த்தமும் இல்லை, ஏனெனில் இது பெரும்பாலும் சாத்தியமற்றது அல்லது பாதி கூறுகளை முடக்க வேண்டிய அவசியத்திற்கு வழிவகுக்கும்.

NB: இது எங்கள் அனுபவம், இது மிகவும் குறிப்பிட்டது. ஆயத்த தீர்வுகளைப் பயன்படுத்துவதற்குப் பதிலாக ஒவ்வொருவரும் சொந்தமாக குபெர்னெட்ஸ் கிளஸ்டர்களைப் பயன்படுத்த வேண்டும் என்று நாங்கள் எந்த வகையிலும் பரிந்துரைக்கவில்லை. மூலம், Yandex இலிருந்து Kubernetes ஐ இயக்குவதில் எங்களுக்கு உண்மையான அனுபவம் இல்லை, மேலும் இந்த கட்டுரையில் இந்த சேவையின் எந்த மதிப்பீட்டையும் நாங்கள் வழங்க மாட்டோம்.

அது என்ன, யாருக்காக?

எனவே, குபெர்னெட்ஸில் சேமிப்பதற்கான நவீன அணுகுமுறை பற்றி நாங்கள் ஏற்கனவே பேசினோம்: CSI எப்படி வேலை செய்கிறது? и சமூகம் எப்படி வந்தது இந்த அணுகுமுறைக்கு.

தற்போது, ​​பல பெரிய கிளவுட் சேவை வழங்குநர்கள் தங்கள் கிளவுட் டிஸ்க்குகளை குபெர்னெட்ஸில் பெர்சிஸ்டன்ட் வால்யூமாக பயன்படுத்துவதற்கான இயக்கிகளை உருவாக்கியுள்ளனர். சப்ளையருக்கு அத்தகைய இயக்கி இல்லை, ஆனால் தேவையான அனைத்து செயல்பாடுகளும் API வழியாக வழங்கப்பட்டால், இயக்கியை நீங்களே செயல்படுத்துவதில் இருந்து எதுவும் உங்களைத் தடுக்காது. Yandex.Cloud உடன் நடந்தது இதுதான்.

வளர்ச்சிக்கான அடிப்படையாக எடுத்துக் கொண்டோம் DigitalOcean Cloudக்கான CSI இயக்கி மற்றும் ஒரு ஜோடி யோசனைகள் GCP க்கான இயக்கிகள், இந்த மேகங்களின் (Google மற்றும் Yandex) API உடனான தொடர்பு பல ஒற்றுமைகளைக் கொண்டுள்ளது. குறிப்பாக, ஏபிஐ மற்றும் ஜி.சி.பி., மற்றும் யாண்டேக்ஸ் ஒரு பொருளை திருப்பி அனுப்பு Operation நீண்ட கால செயல்பாடுகளின் நிலையை கண்காணிக்க (உதாரணமாக, ஒரு புதிய வட்டை உருவாக்குதல்). Yandex.Cloud API உடன் தொடர்பு கொள்ள, பயன்படுத்தவும் Yandex.Cloud Go SDK.

செய்த வேலையின் விளைவு GitHub இல் опубликован மற்றும் சில காரணங்களால், Yandex.Cloud மெய்நிகர் கணினிகளில் தங்கள் சொந்த குபெர்னெட்ஸ் நிறுவலைப் பயன்படுத்துபவர்களுக்கு பயனுள்ளதாக இருக்கும் (ஆனால் ஆயத்த நிர்வகிக்கப்பட்ட கிளஸ்டர் அல்ல) மற்றும் CSI மூலம் வட்டுகளைப் (ஆர்டர்) பயன்படுத்த விரும்புவர்.

Реализация

முக்கிய அம்சங்கள்

தற்போது இயக்கி பின்வரும் செயல்பாடுகளை ஆதரிக்கிறது:

  • கிளஸ்டரில் உள்ள முனைகளின் இடவியல் படி கிளஸ்டரின் அனைத்து மண்டலங்களிலும் வட்டுகளை வரிசைப்படுத்துதல்;
  • முன்பு ஆர்டர் செய்யப்பட்ட வட்டுகளை நீக்குதல்;
  • வட்டுகளுக்கான ஆஃப்லைன் அளவை மாற்றவும் (Yandex.Cloud ஆதரிக்க வேண்டாம் மெய்நிகர் கணினியில் ஏற்றப்பட்ட வட்டுகளை அதிகரிக்கிறது). மறுஅளவை முடிந்தவரை வலியற்றதாக மாற்ற, இயக்கி எவ்வாறு மாற்றியமைக்கப்பட வேண்டும் என்பது பற்றிய தகவலுக்கு, கீழே பார்க்கவும்.

எதிர்காலத்தில், வட்டு ஸ்னாப்ஷாட்களை உருவாக்குவதற்கும் நீக்குவதற்கும் ஆதரவை செயல்படுத்த திட்டமிட்டுள்ளோம்.

முக்கிய சிரமம் மற்றும் அதை எவ்வாறு சமாளிப்பது

Yandex.Cloud API இல் நிகழ்நேரத்தில் வட்டுகளை அதிகரிக்கும் திறன் இல்லாதது PV க்கான மறுஅளவிடுதல் செயல்பாட்டை சிக்கலாக்கும் ஒரு வரம்பு (தொடர்ச்சியான தொகுதி): இந்த வழக்கில், வட்டைப் பயன்படுத்தும் பயன்பாட்டு பாட் நிறுத்தப்பட வேண்டியது அவசியம், மேலும் இது வேலையில்லா நேர பயன்பாடுகளை ஏற்படுத்தலாம்.

படி CSI விவரக்குறிப்புகள், CSI கட்டுப்படுத்தி அது வட்டுகளின் அளவை "ஆஃப்லைனில்" மட்டுமே மாற்ற முடியும் என்று தெரிவித்தால் (VolumeExpansion.OFFLINE), பின்னர் வட்டை அதிகரிக்கும் செயல்முறை இப்படி இருக்க வேண்டும்:

சொருகி இருந்தால் மட்டுமே VolumeExpansion.OFFLINE விரிவாக்க திறன் மற்றும் தொகுதி தற்போது வெளியிடப்பட்டது அல்லது ஒரு முனையில் கிடைக்கிறது ControllerExpandVolume பின்வருவனவற்றிற்குப் பிறகு மட்டுமே அழைக்கப்பட வேண்டும்:

  • சொருகி கட்டுப்படுத்தி உள்ளது PUBLISH_UNPUBLISH_VOLUME திறன் மற்றும் ControllerUnpublishVolume வெற்றிகரமாக செயல்படுத்தப்பட்டது.

இல்லையெனில்

  • சொருகி கட்டுப்படுத்தி இல்லை PUBLISH_UNPUBLISH_VOLUME திறன், சொருகி முனை உள்ளது STAGE_UNSTAGE_VOLUME திறன், மற்றும் NodeUnstageVolume வெற்றிகரமாக முடிக்கப்பட்டுள்ளது.

இல்லையெனில்

  • சொருகி கட்டுப்படுத்தி இல்லை PUBLISH_UNPUBLISH_VOLUME திறன், அல்லது முனை STAGE_UNSTAGE_VOLUME திறன், மற்றும் NodeUnpublishVolume வெற்றிகரமாக முடிந்தது.

இதன் பொருள் நீங்கள் அதை விரிவாக்கும் முன் மெய்நிகர் கணினியில் இருந்து வட்டை பிரிக்க வேண்டும்.

எனினும், துரதிருஷ்டவசமாக செயல்படுத்த சைட்கார்கள் மூலம் CSI விவரக்குறிப்பு இந்த தேவைகளை பூர்த்தி செய்யவில்லை:

  • ஒரு பக்கவாட்டு கொள்கலனில் csi-attacher, மவுண்ட்களுக்கு இடையே தேவையான இடைவெளி இருப்பதற்கு இது பொறுப்பாக இருக்க வேண்டும், இந்த செயல்பாடு ஆஃப்லைன் மறுஅளவில் செயல்படுத்தப்படவில்லை. இது தொடர்பான விவாதம் தொடங்கப்பட்டது இங்கே.
  • இந்த சூழலில் சைட்கார் கொள்கலன் என்றால் என்ன? CSI செருகுநிரல் குபெர்னெட்டஸ் API உடன் தொடர்பு கொள்ளாது, ஆனால் சைட்கார் கொள்கலன்கள் மூலம் அனுப்பப்படும் gRPC அழைப்புகளுக்கு மட்டுமே பதிலளிக்கிறது. சமீபத்திய அபிவிருத்தி செய்யப்பட்டு வருகின்றன குபெர்னெட்ஸ் சமூகத்தால்.

எங்கள் விஷயத்தில் (சிஎஸ்ஐ சொருகி), வட்டை அதிகரிக்கும் செயல்பாடு இதுபோல் தெரிகிறது:

  1. நாங்கள் ஒரு gRPC அழைப்பைப் பெறுகிறோம் ControllerExpandVolume;
  2. நாங்கள் API இல் வட்டை அதிகரிக்க முயற்சிக்கிறோம், ஆனால் வட்டு ஏற்றப்பட்டிருப்பதால் செயல்பாட்டைச் செய்ய இயலாது என்ற பிழையைப் பெறுகிறோம்;
  3. வட்டு அடையாளங்காட்டியை வரைபடத்தில் சேமித்து வைக்கிறோம், அதில் அதிகரிப்பு செயல்பாட்டைச் செய்ய வேண்டிய வட்டுகள் உள்ளன. கீழே, சுருக்கத்திற்காக, இந்த வரைபடத்தை இவ்வாறு அழைப்போம் volumeResizeRequired;
  4. வட்டைப் பயன்படுத்தும் பாடை கைமுறையாக அகற்றவும். குபெர்னெட்ஸ் அதை மீண்டும் தொடங்கும். அதனால் வட்டுக்கு ஏற்ற நேரம் இல்லை (ControllerPublishVolume) ஏற்ற முயலும் போது, ​​அதிகரிப்பு செயல்பாட்டை முடிப்பதற்கு முன், கொடுக்கப்பட்ட வட்டு இன்னும் உள்ளதா எனச் சரிபார்க்கிறோம் volumeResizeRequired மற்றும் ஒரு பிழை திரும்ப;
  5. CSI இயக்கி மறுஅளவிடுதல் செயல்பாட்டை மீண்டும் செயல்படுத்த முயற்சிக்கிறது. செயல்பாடு வெற்றிகரமாக இருந்தால், வட்டை அகற்றவும் volumeResizeRequired;
  6. ஏனெனில் வட்டு ஐடி இல்லை volumeResizeRequired, ControllerPublishVolume வெற்றிகரமாக கடந்து, வட்டு ஏற்றப்பட்டது, பாட் தொடங்குகிறது.

எல்லாம் மிகவும் எளிமையானதாகத் தெரிகிறது, ஆனால் எப்போதும் போல் ஆபத்துகள் உள்ளன. வட்டுகளை பெரிதாக்குகிறது வெளிப்புற மறுஅளவாக்கி, செயல்பாட்டின் போது பிழை ஏற்பட்டால் ஒரு வரிசையைப் பயன்படுத்துகிறது 1000 வினாடிகள் வரை காலக்கெடு நேரத்தின் அதிவேக அதிகரிப்புடன்:

func DefaultControllerRateLimiter() RateLimiter {
  return NewMaxOfRateLimiter(
  NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second),
  // 10 qps, 100 bucket size.  This is only for retry speed and its only the overall factor (not per item)
  &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},
  )
}

இது அவ்வப்போது வட்டு விரிவாக்கம் 15 நிமிடங்களுக்கு நீட்டிக்கப்படலாம், இதனால் தொடர்புடைய பாட் கிடைக்காது.

சாத்தியமான வேலையில்லா நேரத்தைக் குறைக்க மிகவும் எளிதாகவும் வலியின்றியும் எங்களை அனுமதித்த ஒரே வழி, அதிகபட்ச காலக்கெடு வரம்புடன் வெளிப்புற மறுஅளவிடுதலைப் பயன்படுத்துவதாகும். 5 வினாடிகளில்:

workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)

ஒரு விவாதத்தை அவசரமாகத் தொடங்குவது மற்றும் வெளிப்புற மறுஅளவிடுதலைப் பொருத்துவது அவசியம் என்று நாங்கள் கருதவில்லை, ஏனெனில் வட்டுகளின் ஆஃப்லைன் மறுஅளவாக்கம் என்பது அனைத்து கிளவுட் வழங்குநர்களிடமிருந்தும் விரைவில் மறைந்துவிடும்.

அதைப் பயன்படுத்தத் தொடங்குவது எப்படி?

இயக்கி Kubernetes பதிப்பு 1.15 மற்றும் அதற்கு மேற்பட்டவற்றில் ஆதரிக்கப்படுகிறது. இயக்கி வேலை செய்ய, பின்வரும் தேவைகள் பூர்த்தி செய்யப்பட வேண்டும்:

  • கொடியை --allow-privileged மதிப்பில் அமைக்கப்பட்டுள்ளது true ஏபிஐ சர்வர் மற்றும் குபெலெட்டுக்கு;
  • சேர்க்கப்பட்டுள்ளது --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true ஏபிஐ சர்வர் மற்றும் குபெலெட்டுக்கு;
  • மவுண்ட் பரப்புதல் (ஏற்ற பரவல்) கிளஸ்டரில் இயக்கப்பட வேண்டும். டோக்கரைப் பயன்படுத்தும் போது, ​​பகிர்ந்த ஏற்றங்களை அனுமதிக்க டீமான் கட்டமைக்கப்பட வேண்டும்.

நிறுவலுக்கு தேவையான அனைத்து நடவடிக்கைகளும் README இல் விவரிக்கப்பட்டுள்ளது. நிறுவல் என்பது மேனிஃபெஸ்ட்டிலிருந்து குபெர்னெட்டஸில் பொருட்களை உருவாக்குவதை உள்ளடக்குகிறது.

இயக்கி வேலை செய்ய, உங்களுக்கு பின்வருபவை தேவைப்படும்:

  • மேனிஃபெஸ்ட்டில் கோப்பக அடையாளங்காட்டியைக் குறிப்பிடவும் (folder-id) Yandex.Cloud (ஆவணங்களைப் பார்க்கவும்);
  • Yandex.Cloud API உடன் தொடர்பு கொள்ள, CSI இயக்கி ஒரு சேவைக் கணக்கைப் பயன்படுத்துகிறது. சீக்ரெட் மேனிஃபெஸ்ட்டில், நீங்கள் தேர்ச்சி பெற வேண்டும் அங்கீகரிக்கப்பட்ட விசைகள் சேவை கணக்கிலிருந்து. ஆவணத்தில் விவரித்தார், சேவைக் கணக்கை உருவாக்கி விசைகளைப் பெறுவது எப்படி.

மொத்தத்தில் - அதை முயற்சிக்கவும், மற்றும் கருத்துக்களைப் பெறுவதில் நாங்கள் மகிழ்ச்சியடைவோம் மற்றும் புதிய பிரச்சினைகள்நீங்கள் ஏதேனும் பிரச்சனைகளை சந்தித்தால்!

மேலும் ஆதரவு

இதன் விளைவாக, இந்த CSI இயக்கியை Go வில் எழுதும் விண்ணப்பங்களை வேடிக்கையாகப் பெற வேண்டும் என்ற பெரும் விருப்பத்தால் அல்ல, மாறாக நிறுவனத்தில் அவசரத் தேவையின் காரணமாக நாங்கள் செயல்படுத்தினோம் என்பதைக் கவனத்தில் கொள்ள விரும்புகிறோம். எங்கள் சொந்த செயலாக்கத்தை பராமரிப்பது எங்களுக்கு நடைமுறையில் இல்லை, எனவே Yandex ஆர்வத்தை வெளிப்படுத்தி, டிரைவரை தொடர்ந்து ஆதரிக்க முடிவு செய்தால், களஞ்சியத்தை அவர்களுக்கு மாற்றுவதில் நாங்கள் மகிழ்ச்சியடைவோம்.

கூடுதலாக, யாண்டெக்ஸ் அதன் நிர்வகிக்கப்பட்ட குபெர்னெட்ஸ் கிளஸ்டரில் சிஎஸ்ஐ இயக்கியின் சொந்த செயலாக்கத்தைக் கொண்டுள்ளது, இது திறந்த மூலத்தில் வெளியிடப்படலாம். இந்த மேம்பாட்டு விருப்பத்தை நாங்கள் சாதகமாகப் பார்க்கிறோம் - சமூகம் ஒரு சேவை வழங்குநரிடமிருந்து நிரூபிக்கப்பட்ட இயக்கியைப் பயன்படுத்த முடியும், மூன்றாம் தரப்பு நிறுவனத்திடமிருந்து அல்ல.

சோசலிஸ்ட் கட்சி

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்