Yandex.Cloud க்கு Kubernetes CCM (கிளவுட் கன்ட்ரோலர் மேலாளர்) அறிமுகம்

Yandex.Cloud க்கு Kubernetes CCM (கிளவுட் கன்ட்ரோலர் மேலாளர்) அறிமுகம்

சமீபத்தியவற்றின் தொடர்ச்சியாக CSI இயக்கி வெளியீடு Yandex.Cloud க்கு இந்த மேகக்கணிக்கான மற்றொரு ஓப்பன் சோர்ஸ் திட்டத்தை வெளியிடுகிறோம் - கிளவுட் கன்ட்ரோலர் மேலாளர். CCM ஆனது ஒட்டுமொத்த கிளஸ்டருக்கு மட்டுமல்ல, CSI டிரைவருக்கும் தேவைப்படுகிறது. அதன் நோக்கம் மற்றும் சில செயல்படுத்தல் அம்சங்கள் பற்றிய விவரங்கள் வெட்டப்படுகின்றன.

அறிமுகம்

இது ஏன்?

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

சிசிஎம் என்றால் என்ன?

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

குறிப்பாக, கிளவுட் கன்ட்ரோலர் மேலாளர் ஐந்து முக்கிய வகையான தொடர்புகளை வழங்குகிறது:

  1. சந்தர்ப்பங்கள் - குபெர்னெட்டஸில் ஒரு முனை பொருளுக்கு இடையே 1:1 உறவை செயல்படுத்துகிறது (Node) மற்றும் கிளவுட் வழங்குநரில் ஒரு மெய்நிகர் இயந்திரம். இதற்காக நாங்கள்:
    • புலத்தில் நிரப்பவும் spec.providerID பொருளில் Node. எடுத்துக்காட்டாக, OpenStack CCMக்கு இந்தப் புலம் பின்வரும் வடிவமைப்பைக் கொண்டுள்ளது: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. நீங்கள் கிளவுட் வழங்குநரின் பெயரையும், பொருளின் சேவையகத்தின் தனிப்பட்ட UUID ஐயும் (OpenStack இல் உள்ள மெய்நிகர் இயந்திரம்) பார்க்கலாம்;
    • நிரப்பு nodeInfo பொருளில் Node மெய்நிகர் இயந்திரம் பற்றிய தகவல். எடுத்துக்காட்டாக, AWS இல் நிகழ்வு வகையைக் குறிப்பிடுகிறோம்;
    • மேகக்கணியில் ஒரு மெய்நிகர் இயந்திரம் இருப்பதை நாங்கள் சரிபார்க்கிறோம். உதாரணமாக, ஒரு பொருள் என்றால் Node ஒரு நிலைக்கு சென்றது NotReady, கிளவுட் வழங்குநரில் மெய்நிகர் இயந்திரம் உள்ளதா என்பதை நீங்கள் சரிபார்க்கலாம் providerID. அது இல்லை என்றால், பொருளை நீக்கவும் Node, இது இல்லையெனில் எப்போதும் கிளஸ்டரில் இருக்கும்;
  2. மண்டலங்கள் - பொருளுக்கான தோல்வி டொமைனை அமைக்கிறது Node, கிளவுட் வழங்குநரில் உள்ள பகுதிகள் மற்றும் மண்டலங்களுக்கு ஏற்ப திட்டமிடுபவர் Podக்கான முனையைத் தேர்ந்தெடுக்க முடியும்;
  3. லோட் பேலன்சர் - ஒரு பொருளை உருவாக்கும் போது Service வகையுடன் LoadBalancer வெளியில் இருந்து கிளஸ்டர் முனைகளுக்கு போக்குவரத்தை வழிநடத்தும் ஒரு வகையான சமநிலையை உருவாக்குகிறது. எடுத்துக்காட்டாக, Yandex.Cloud இல் நீங்கள் பயன்படுத்தலாம் NetworkLoadBalancer и TargetGroup இந்த நோக்கங்களுக்காக;
  4. பாதை - முனைகளுக்கு இடையில் ஒரு பிணையத்தை உருவாக்குகிறது, ஏனெனில் குபெர்னெட்டஸின் தேவைகளின்படி, ஒவ்வொரு பாட்க்கும் அதன் சொந்த ஐபி முகவரி இருக்க வேண்டும் மற்றும் வேறு எந்த பாட்களையும் அடைய முடியும். இந்த நோக்கங்களுக்காக, நீங்கள் மேலடுக்கு நெட்வொர்க்கை (VXLAN, GENEVE) பயன்படுத்தலாம் அல்லது கிளவுட் வழங்குநரின் மெய்நிகர் நெட்வொர்க்கில் நேரடியாக ஒரு ரூட்டிங் அட்டவணையை அமைக்கலாம்:

    Yandex.Cloud க்கு Kubernetes CCM (கிளவுட் கன்ட்ரோலர் மேலாளர்) அறிமுகம்

  5. தொகுதி - PVC மற்றும் SC ஐப் பயன்படுத்தி PV இன் மாறும் வரிசைப்படுத்தலை அனுமதிக்கிறது. ஆரம்பத்தில், இந்த செயல்பாடு CCM இன் ஒரு பகுதியாக இருந்தது, ஆனால் அதன் பெரும் சிக்கலான தன்மை காரணமாக இது ஒரு தனி திட்டத்திற்கு மாற்றப்பட்டது, கொள்கலன் சேமிப்பு இடைமுகம் (CSI). நாங்கள் ஒன்றுக்கு மேற்பட்ட முறை CSI பற்றி பேசியுள்ளோம் எழுதினார் மற்றும், ஏற்கனவே குறிப்பிட்டுள்ளபடி, கூட வெளியிடப்பட்டது சிஎஸ்ஐ டிரைவர்.

முன்னதாக, கிளவுட் உடன் தொடர்பு கொள்ளும் அனைத்து குறியீடுகளும் குபெர்னெட்ஸ் திட்டத்தின் முக்கிய Git களஞ்சியத்தில் அமைந்திருந்தன. k8s.io/kubernetes/pkg/cloudprovider/providers, ஆனால் பெரிய குறியீட்டுத் தளத்துடன் பணிபுரிவதில் உள்ள சிரமம் காரணமாக இதை கைவிட முடிவு செய்தனர். அனைத்து பழைய செயலாக்கங்களும் மாற்றப்பட்டுள்ளன தனி களஞ்சியம். மேலும் ஆதரவு மற்றும் மேம்பாட்டிற்கான வசதிக்காக, அனைத்து பொதுவான கூறுகளும் நகர்த்தப்பட்டன தனி களஞ்சியம்.

CSI ஐப் போலவே, பல பெரிய கிளவுட் வழங்குநர்கள் ஏற்கனவே தங்கள் CCMகளை Kubernetes இல் மேகங்களை மேம்படுத்துவதற்காக வடிவமைத்துள்ளனர். சப்ளையர் CCM இல்லை, ஆனால் தேவையான அனைத்து செயல்பாடுகளும் API வழியாக இருந்தால், நீங்கள் CCM ஐ செயல்படுத்தலாம்.

உங்கள் சொந்த CCM செயல்படுத்தலை எழுத, செயல்படுத்தினால் போதும் தேவையான Go இடைமுகங்கள்.

И இதுதான் எங்களுக்கு கிடைத்தது.

Реализация

நீ எப்படி இதற்கு வந்தாய்

நாங்கள் வளர்ச்சியைத் தொடங்கினோம் (அல்லது பயன்படுத்தவும்). தயார்(!) CCM Yandex.Cloud க்கு ஒரு வருடம் முன்பு.

இருப்பினும், இந்தச் செயலாக்கத்தில் நாங்கள் காணவில்லை:

  • JWT IAM டோக்கன் மூலம் அங்கீகாரம்;
  • சேவை கட்டுப்படுத்தி ஆதரவு.

ஆசிரியருடன் உடன்பாடு (dlisin) Telegram இல், yandex-Cloud-controller-managerஐ பிரித்து, விடுபட்ட செயல்பாடுகளைச் சேர்த்துள்ளோம்.

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

தற்போது, ​​CCM பின்வரும் இடைமுகங்களை ஆதரிக்கிறது:

  • சந்தர்ப்பங்கள்;
  • மண்டலங்கள்;
  • லோட் பேலன்சர்.

எதிர்காலத்தில், Yandex.Cloud மேம்பட்ட VPC திறன்களுடன் வேலை செய்யத் தொடங்கும் போது, ​​நாங்கள் ஒரு இடைமுகத்தைச் சேர்ப்போம் தடங்கல்.

LoadBalanacer முக்கிய சவாலாக உள்ளது

ஆரம்பத்தில், மற்ற CCM செயலாக்கங்களைப் போலவே, ஒரு ஜோடியை உருவாக்க முயற்சித்தோம் LoadBalancer и TargetGroup ஒவ்வொரு Service வகையுடன் LoadBalancer. இருப்பினும், Yandex.Cloud ஒரு சுவாரஸ்யமான வரம்பைக் கண்டறிந்தது: நீங்கள் பயன்படுத்த முடியாது TargetGroups வெட்டுவதுடன் Targets (ஜோடி SubnetID - IpAddress).

Yandex.Cloud க்கு Kubernetes CCM (கிளவுட் கன்ட்ரோலர் மேலாளர்) அறிமுகம்

எனவே, உருவாக்கப்பட்ட CCM க்குள், ஒரு கட்டுப்படுத்தி தொடங்கப்பட்டது, இது, பொருள்கள் மாறும்போது Node ஒவ்வொரு மெய்நிகர் கணினியிலும் உள்ள அனைத்து இடைமுகங்களைப் பற்றிய தகவலைச் சேகரிக்கிறது, அவை குறிப்பிட்டவற்றின் படி அவற்றைக் குழுவாக்குகிறது NetworkID, உருவாக்குகிறது TargetGroup மீது NetworkID, மற்றும் பொருத்தத்தை கண்காணிக்கிறது. பின்னர், ஒரு பொருளை உருவாக்கும் போது Service வகையுடன் LoadBalanacer முன்பே உருவாக்கப்பட்ட ஒன்றை இணைக்கிறோம் TargetGroup புதியது NetworkLoadBalanacer'நான்.

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

CCM Kubernetes பதிப்பு 1.15 மற்றும் அதற்கு மேற்பட்டவற்றை ஆதரிக்கிறது. ஒரு கிளஸ்டரில், அது வேலை செய்ய, கொடி தேவை --cloud-provider=external என அமைக்கப்பட்டது true kube-apiserver, kube-controller-manager, kube-scheduler மற்றும் அனைத்து kubelets.

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

CCM ஐப் பயன்படுத்த உங்களுக்கு இதுவும் தேவைப்படும்:

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

முடிவுகளை

செயல்படுத்தப்பட்ட CCM ஐ கடந்த இரண்டு வாரங்களாக ஐந்து குபெர்னெட்ஸ் கிளஸ்டர்களில் பயன்படுத்தி வருகிறோம், வரும் மாதத்தில் அவற்றின் எண்ணிக்கையை 20 ஆக விரிவுபடுத்த திட்டமிட்டுள்ளோம். பெரிய மற்றும் முக்கியமான K8s நிறுவல்களுக்கு CCM ஐப் பயன்படுத்த நாங்கள் தற்போது பரிந்துரைக்கவில்லை.

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

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

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

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

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