Cyflwyno Kubernetes CCM (Rheolwr Rheolydd Cwmwl) ar gyfer Yandex.Cloud

Cyflwyno Kubernetes CCM (Rheolwr Rheolydd Cwmwl) ar gyfer Yandex.Cloud

Yn barhad i'r diweddar Rhyddhau gyrrwr CSI ar gyfer Yandex.Cloud rydym yn cyhoeddi prosiect Ffynhonnell Agored arall ar gyfer y cwmwl hwn - Rheolwr Rheolwr Cwmwl. Mae angen CCM nid yn unig ar gyfer y clwstwr cyfan, ond hefyd ar gyfer y gyrrwr CSI ei hun. Mae manylion am ei ddiben a rhai nodweddion gweithredu o dan y toriad.

Cyflwyniad

Pam fod hyn?

Mae'r cymhellion a'n hysgogodd i ddatblygu CCM ar gyfer Yandex.Cloud yn cyd-fynd yn llwyr â'r rhai a ddisgrifiwyd eisoes yn cyhoeddiad Gyrwyr CSI. Rydym yn cynnal llawer o glystyrau Kubernetes o wahanol ddarparwyr cwmwl, ac rydym yn defnyddio un offeryn ar eu cyfer. Mae'n gweithredu nifer o gyfleusterau "gan osgoi" atebion rheoledig y darparwyr hyn. Oes, mae gennym achos ac anghenion eithaf penodol, ond efallai y bydd y datblygiadau a grëwyd o'u herwydd yn ddefnyddiol i ddefnyddwyr eraill.

Beth yn union yw CCM?

Yn nodweddiadol, rydym yn paratoi ein hamgylchedd ar gyfer y clwstwr o'r tu allan - er enghraifft, defnyddio Terraform. Ond weithiau mae angen rheoli amgylchedd y cwmwl o'n cwmpas o glwstwr. Darperir y posibilrwydd hwn, a dyna sy'n cael ei roi ar waith CCM.

Yn benodol, mae Cloud Control Manager yn darparu pum prif fath o ryngweithio:

  1. Hysbysiadau – yn gweithredu perthynas 1:1 rhwng gwrthrych nod yn Kubernetes (Node) a pheiriant rhithwir yn y darparwr cwmwl. Ar gyfer hyn rydym yn:
    • llenwi'r cae spec.providerID yn y gwrthrych Node. Er enghraifft, ar gyfer OpenStack CCM mae gan y maes hwn y fformat canlynol: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Gallwch weld enw darparwr y cwmwl ac UUID unigryw gweinydd (peiriant rhithwir yn OpenStack) y gwrthrych;
    • ategu nodeInfo yn y gwrthrych Node gwybodaeth am y peiriant rhithwir. Er enghraifft, rydym yn nodi math enghraifft yn AWS;
    • Rydym yn gwirio presenoldeb peiriant rhithwir yn y cwmwl. Er enghraifft, os yw gwrthrych Node aeth i gyflwr NotReady, gallwch wirio a yw'r peiriant rhithwir yn bodoli o gwbl yn y darparwr cwmwl gan providerID. Os nad yw yno, dilëwch y gwrthrych Node, a fyddai fel arall yn aros yn y clwstwr am byth;
  2. Parthau - yn gosod y parth methiant ar gyfer y gwrthrych Node, fel y gall y trefnydd ddewis nod ar gyfer y Pod yn ôl y rhanbarthau a'r parthau yn y darparwr cwmwl;
  3. Llwyth Cydbwysydd – wrth greu gwrthrych Service gyda math LoadBalancer yn creu math o balancer a fydd yn cyfeirio traffig o'r tu allan i'r nodau clwstwr. Er enghraifft, yn Yandex.Cloud gallwch ddefnyddio NetworkLoadBalancer и TargetGroup at y dibenion hyn;
  4. Llwybr – adeiladu rhwydwaith rhwng nodau, oherwydd Yn ôl gofynion Kubernetes, rhaid i bob pod gael ei gyfeiriad IP ei hun a gallu cyrraedd unrhyw god arall. At y dibenion hyn, gallwch ddefnyddio rhwydwaith troshaenu (VXLAN, GENEVE) neu osod tabl llwybro yn uniongyrchol yn rhwydwaith rhithwir darparwr y cwmwl:

    Cyflwyno Kubernetes CCM (Rheolwr Rheolydd Cwmwl) ar gyfer Yandex.Cloud

  5. Cyfrol - Yn caniatáu archebu PV yn ddeinamig gan ddefnyddio PVC a SC. I ddechrau, roedd y swyddogaeth hon yn rhan o CCM, ond oherwydd ei gymhlethdod mawr fe'i symudwyd i brosiect ar wahân, Container Storage Interface (CSI). Rydym wedi siarad am CSI fwy nag unwaith писали ac, fel y crybwyllwyd eisoes, hyd yn oed rhyddhau gyrrwr CSI.

Yn flaenorol, roedd yr holl god sy'n rhyngweithio â'r cwmwl wedi'i leoli ym mhrif gadwrfa Git prosiect Kubernetes yn k8s.io/kubernetes/pkg/cloudprovider/providers, ond fe benderfynon nhw roi'r gorau i hyn oherwydd yr anghyfleustra o weithio gyda sylfaen cod mawr. Mae'r holl hen weithrediadau wedi'u symud i storfa ar wahân. Er hwylustod cefnogaeth a datblygiad pellach, symudwyd i'r holl gydrannau cyffredin hefyd storfa ar wahân.

Yn yr un modd â CSI, mae llawer o ddarparwyr cwmwl mawr eisoes wedi dylunio eu CCMs i drosoli cymylau ar Kubernetes. Os nad oes gan y cyflenwr CCM, ond mae'r holl swyddogaethau angenrheidiol ar gael trwy API, yna gallwch chi weithredu CCM eich hun.

I ysgrifennu eich gweithrediad CCM eich hun, mae'n ddigon i'w weithredu rhyngwynebau Go gofynnol.

И dyma beth a gawsom.

Gweithredu

Sut daethoch chi i hyn

Rydym yn dechrau datblygu (neu yn hytrach, hyd yn oed defnyddio) gyda barod(!) CCM ar gyfer Yandex.Cloud flwyddyn yn ôl.

Fodd bynnag, yn y gweithrediad hwn roeddem ar goll:

  • dilysu trwy docyn JWT IAM;
  • Cefnogaeth rheolwr gwasanaeth.

Mewn cytundeb â'r awdur (dlisin) yn Telegram, fe wnaethom fforchio yandex-cloud-controller-manager ac ychwanegu'r swyddogaethau coll.

Prif nodweddion

Ar hyn o bryd, mae CCM yn cefnogi'r rhyngwynebau canlynol:

  • Hysbysiadau;
  • Parthau;
  • Llwyth Cydbwysydd.

Yn y dyfodol, pan fydd Yandex.Cloud yn dechrau gweithio gyda galluoedd VPC uwch, byddwn yn ychwanegu rhyngwyneb llwybrau.

LoadBalanacer fel y brif her

I ddechrau, fe wnaethom geisio, fel gweithrediadau CCM eraill, greu pâr o LoadBalancer и TargetGroup ar gyfer pob un Service gyda math LoadBalancer. Fodd bynnag, darganfu Yandex.Cloud un cyfyngiad diddorol: ni allwch ei ddefnyddio TargetGroups gyda croestorri Targets (pâr SubnetID - IpAddress).

Cyflwyno Kubernetes CCM (Rheolwr Rheolydd Cwmwl) ar gyfer Yandex.Cloud

Felly, y tu mewn i'r CCM a grëwyd, mae rheolydd yn cael ei lansio, sydd, pan fydd gwrthrychau'n newid Node yn casglu gwybodaeth am yr holl ryngwynebau ar bob peiriant rhithwir, yn eu grwpio yn ôl eu perthyn i rai penodol NetworkID, yn creu gan TargetGroup ar NetworkID, a hefyd yn monitro perthnasedd. Yn dilyn hynny, wrth greu gwrthrych Service gyda math LoadBalanacer rydym yn syml atodi cyn-greu TargetGroup i newydd NetworkLoadBalanacer'yn.

Sut i ddechrau defnyddio?

Mae CCM yn cefnogi fersiwn Kubernetes 1.15 ac uwch. Mewn clwstwr, er mwyn iddo weithio, mae'n gofyn bod y faner --cloud-provider=external ei osod i true ar gyfer kube-apiserver, ciwb-rheolwr-rheolwr, kube-scheduler a phob ciwbedi.

Disgrifir yr holl gamau angenrheidiol ar gyfer y gosodiad ei hun yn README. Mae gosod yn ymwneud â chreu gwrthrychau yn Kubernetes o faniffestau.

I ddefnyddio CCM bydd angen y canlynol arnoch hefyd:

  • nodi yn y maniffest dynodwr y cyfeiriadur (folder-id) Yandex.Cloud;
  • cyfrif gwasanaeth ar gyfer rhyngweithio â'r API Yandex.Cloud. Yn y maniffesto Secret angenrheidiol trosglwyddo allweddi awdurdodedig o'r cyfrif gwasanaeth. Yn y ddogfennaeth a ddisgrifiwyd, sut i greu cyfrif gwasanaeth a chael allweddi.

Byddwn yn falch o dderbyn eich adborth a materion newyddos ydych chi'n dod ar draws unrhyw broblemau!

Canlyniadau

Rydym wedi bod yn defnyddio'r CCM a roddwyd ar waith mewn pum clwstwr Kubernetes dros y pythefnos diwethaf ac yn bwriadu ehangu eu nifer i 20 yn ystod y mis nesaf. Ar hyn o bryd nid ydym yn argymell defnyddio CCM ar gyfer gosodiadau K8s mawr a beirniadol.

Fel yn achos CSI, byddwn yn falch pe bai datblygwyr Yandex yn ymgymryd â datblygiad a chefnogaeth y prosiect hwn - rydym yn barod i drosglwyddo'r ystorfa ar eu cais er mwyn delio â thasgau sy'n fwy perthnasol i ni.

PS

Darllenwch hefyd ar ein blog:

Ffynhonnell: hab.com

Ychwanegu sylw