L-introduzzjoni ta' Kubernetes CCM (Cloud Controller Manager) għal Yandex.Cloud

L-introduzzjoni ta' Kubernetes CCM (Cloud Controller Manager) għal Yandex.Cloud

B'kontinwazzjoni għall-aħħar Rilaxx tas-sewwieq CSI għal Yandex.Cloud qed nippubblikaw proġett ieħor Open Source għal dan il-cloud - Maniġer tal-Kontrollur tal-Cloud. Is-CCM huwa meħtieġ mhux biss għall-cluster kollu kemm hu, iżda wkoll għas-sewwieq CSI innifsu. Dettalji dwar l-iskop tiegħu u xi karatteristiċi ta 'implimentazzjoni huma taħt il-qatgħa.

Introduzzjoni

Għaliex dan?

Il-motivi li wassluna biex niżviluppaw CCM għal Yandex.Cloud jikkoinċidu kompletament ma 'dawk diġà deskritti fi avviż Is-sewwieqa tas-CSI. Aħna nżommu ħafna raggruppamenti ta' Kubernetes minn fornituri ta' cloud differenti, li għalihom nużaw għodda waħda. Hija timplimenta bosta konvenjenzi "jgħixu" s-soluzzjonijiet ġestiti ta 'dawn il-fornituri. Iva, għandna każ u bżonnijiet pjuttost speċifiċi, iżda l-iżviluppi maħluqa minħabba fihom jistgħu jkunu utli għal utenti oħra.

X'inhu eżattament CCM?

Tipikament, aħna nippreparaw l-ambjent tagħna għall-cluster minn barra - pereżempju, bl-użu ta' Terraform. Imma xi drabi jkun hemm bżonn li niġġestixxu l-ambjent tas-sħab ta’ madwarna mill-cluster. Din il-possibbiltà hija pprovduta, u hija li hija implimentata CCM.

Speċifikament, Cloud Controller Manager jipprovdi ħames tipi ewlenin ta’ interazzjoni:

  1. Każijiet – jimplimenta relazzjoni 1:1 bejn oġġett node f'Kubernetes (Node) u magna virtwali fil-fornitur tal-cloud. Għal dan aħna:
    • imla l-qasam spec.providerID fl-oġġett Node. Pereżempju, għal OpenStack CCM dan il-qasam għandu l-format li ġej: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Tista 'tara l-isem tal-fornitur tas-sħab u l-UUID uniku tas-server (magna virtwali f'OpenStack) tal-oġġett;
    • jikkumplimentaw nodeInfo fl-oġġett Node informazzjoni dwar il-magna virtwali. Pereżempju, aħna nispeċifikaw it-tip ta' istanza f'AWS;
    • Aħna niċċekkjaw il-preżenza ta 'magna virtwali fis-sħaba. Per eżempju, jekk oġġett Node marru fi stat NotReady, tista 'tiċċekkja jekk il-magna virtwali teżisti xejn fil-fornitur tas-sħab minn providerID. Jekk ma jkunx hemm, ħassar l-oġġett Node, li inkella jibqgħu fil-cluster għal dejjem;
  2. żoni – jistabbilixxi d-dominju tal-falliment għall-oġġett Node, sabiex l-iskeder ikun jista 'jagħżel node għall-Pod skond ir-reġjuni u ż-żoni fil-fornitur tas-sħab;
  3. LoadBalancer – meta toħloq oġġett Service bit-tip LoadBalancer joħloq tip ta 'balancer li jidderieġi t-traffiku minn barra lejn in-nodi tal-cluster. Per eżempju, f'Yandex.Cloud tista 'tuża NetworkLoadBalancer и TargetGroup għal dawn l-għanijiet;
  4. Rotta – jibni netwerk bejn in-nodi, għaliex Skont ir-rekwiżiti tal-Kubernetes, kull pod għandu jkollu l-indirizz IP tiegħu stess u jkun jista 'jilħaq kwalunkwe pod ieħor. Għal dawn l-għanijiet, tista' tuża netwerk ta' overlay (VXLAN, GENEVE) jew issettja tabella ta' rotta direttament fin-netwerk virtwali tal-fornitur tas-sħab:

    L-introduzzjoni ta' Kubernetes CCM (Cloud Controller Manager) għal Yandex.Cloud

  5. volum – Jippermetti l-ordni dinamiku tal-PV bl-użu tal-PVC u SC. Inizjalment, din il-funzjonalità kienet parti mis-CCM, iżda minħabba l-kumplessità kbira tagħha ġiet imċaqalqa għal proġett separat, Container Storage Interface (CSI). Tkellimna dwar CSI aktar minn darba писали u, kif diġà ssemma, anke meħlusa Is-sewwieq tas-CSI.

Preċedentement, il-kodiċi kollu li jinteraġixxi mas-sħaba kien jinsab fir-repożitorju Git ewlieni tal-proġett Kubernetes fi k8s.io/kubernetes/pkg/cloudprovider/providers, iżda ddeċidew li jabbandunaw dan minħabba l-inkonvenjenza li jaħdmu ma 'bażi ​​ta' kodiċi kbira. L-implimentazzjonijiet antiki kollha ġew imċaqalqa għal repożitorju separat. Għall-konvenjenza ta 'appoġġ u żvilupp ulterjuri, il-komponenti komuni kollha ġew imċaqalqa wkoll lejn repożitorju separat.

Bħal CSI, ħafna fornituri kbar tal-cloud diġà ddisinjaw is-CCMs tagħhom biex jisfruttaw is-sħab fuq Kubernetes. Jekk il-fornitur m'għandux CCM, iżda l-funzjonijiet kollha meħtieġa huma disponibbli permezz tal-API, allura tista 'timplimenta CCM lilek innifsek.

Biex tikteb l-implimentazzjoni tiegħek tas-CCM, huwa biżżejjed li timplimenta meħtieġa Go interfaces.

И dan huwa dak li sirna.

Реализация

Kif wasalt għal dan

Bdejna l-iżvilupp (jew aħjar, anke l-użu) bi lest(!) CCM għal Yandex.Cloud sena ilu.

Madankollu, f'din l-implimentazzjoni konna neqsin:

  • awtentikazzjoni permezz tat-token JWT IAM;
  • Appoġġ għall-kontrollur tas-servizz.

Bi qbil mal-awtur (dlisin) f'Telegram, aħna forked yandex-cloud-controller-manager u żidna l-funzjonijiet neqsin.

Karatteristiċi ewlenin

Bħalissa, CCM jappoġġja l-interfaces li ġejjin:

  • Każijiet;
  • żoni;
  • LoadBalancer.

Fil-futur, meta Yandex.Cloud jibda jaħdem b'kapaċitajiet avvanzati ta 'VPC, aħna se nżidu interface rotot.

LoadBalanacer bħala sfida ewlenija

Inizjalment, ippruvajna, bħal implimentazzjonijiet CCM oħra, noħolqu par ta ' LoadBalancer и TargetGroup għal kull Service bit-tip LoadBalancer. Madankollu, Yandex.Cloud skopra limitazzjoni waħda interessanti: ma tistax tuża TargetGroups b'intersezzjoni Targets (par SubnetID - IpAddress).

L-introduzzjoni ta' Kubernetes CCM (Cloud Controller Manager) għal Yandex.Cloud

Għalhekk, ġewwa l-CCM maħluqa, jitnieda kontrollur, li, meta l-oġġetti jinbidlu Node jiġbor informazzjoni dwar l-interfaces kollha fuq kull magna virtwali, jiġborhom skond l-appartenenza tagħhom għal ċerti NetworkID, toħloq minn TargetGroup fuq NetworkID, u tissorvelja wkoll ir-rilevanza. Sussegwentement, meta toħloq oġġett Service bit-tip LoadBalanacer aħna sempliċiment ehmeż pre-maħluqa TargetGroup lil oħrajn ġodda NetworkLoadBalanacer'am.

Kif tibda tuża?

CCM jappoġġja l-verżjoni 1.15 ta' Kubernetes u ogħla. Fi cluster, biex jaħdem, jeħtieġ li l-bandiera --cloud-provider=external kien stabbilit li true għal kube-apiserver, kube-controller-manager, kube-scheduler u kubelets kollha.

Il-passi kollha meħtieġa għall-installazzjoni nnifisha huma deskritti fi README. L-installazzjoni tirriżulta mill-ħolqien ta 'oġġetti f'Kubernetes minn manifesti.

Biex tuża CCM ser ikollok bżonn ukoll:

  • indika fil-manifest l-identifikatur tad-direttorju (folder-id) Yandex.Cloud;
  • kont tas-servizz għall-interazzjoni mal-API Yandex.Cloud. Fil-manifest Secret huwa meħtieġ jittrasferixxi ċwievet awtorizzati mill-kont tas-servizz. Fid-dokumentazzjoni deskritt, kif toħloq kont tas-servizz u tikseb ċwievet.

Se nkunu ferħanin li nirċievu l-feedback tiegħek u kwistjonijiet ġoddajekk tiltaqa' ma' xi problemi!

Riżultati ta '

Ilna nużaw is-CCM implimentat f'ħames clusters Kubernetes matul l-aħħar ġimgħatejn u nippjanaw li nespandu n-numru tagħhom għal 20 fix-xahar li ġej. Bħalissa ma nirrakkomandawx li tuża CCM għal installazzjonijiet K8s kbar u kritiċi.

Bħal fil-każ ta 'CSI, inkunu ferħanin jekk l-iżviluppaturi Yandex jieħdu l-iżvilupp u l-appoġġ ta' dan il-proġett - aħna lesti li nittrasferixxu r-repożitorju fuq talba tagħhom sabiex nittrattaw kompiti li huma aktar rilevanti għalina.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment