A’ toirt a-steach Kubernetes CCM (Manaidsear Rianadair Cloud) airson Yandex.Cloud

A’ toirt a-steach Kubernetes CCM (Manaidsear Rianadair Cloud) airson Yandex.Cloud

A’ leantainn air an fhear o chionn ghoirid Sgaoileadh CSI driver airson Yandex.Cloud tha sinn a’ foillseachadh pròiseact Open Source eile airson an sgòth seo - Manaidsear Cloud Control. Tha feum air CCM chan ann a-mhàin airson a’ bhuidheann gu h-iomlan, ach cuideachd airson an draibhear CSI fhèin. Tha mion-fhiosrachadh mun adhbhar aige agus cuid de fheartan buileachaidh fon ghearradh.

Ro-ràdh

Carson a tha seo?

Tha na h-adhbharan a thug oirnn CCM a leasachadh airson Yandex.Cloud gu tur aig an aon àm ris an fheadhainn a chaidh a mhìneachadh mar-thà sanas Draibhearan airson CSI. Bidh sinn a’ cumail mòran chruinneachaidhean Kubernetes bho dhiofar sholaraichean sgòthan, airson am bi sinn a’ cleachdadh aon inneal. Bidh e a’ buileachadh grunn ghoireasan “a’ dol seachad air ”fhuasglaidhean stiùirichte nan solaraichean sin. Tha, tha cùis agus feumalachdan caran sònraichte againn, ach dh’ fhaodadh na leasachaidhean a chaidh a chruthachadh air sgàth sin a bhith feumail do luchd-cleachdaidh eile.

Dè dìreach a th’ ann an CCM?

Mar as trice, bidh sinn ag ullachadh na h-àrainneachd timcheall oirnn airson a’ bhraisle bhon taobh a-muigh - mar eisimpleir, a 'cleachdadh Terraform. Ach uaireannan tha feum air an àrainneachd sgòthan timcheall oirnn a riaghladh bho bhraisle. Tha an comas seo air a thoirt seachad, agus is e sin a tha air a bhuileachadh CCM.

Gu sònraichte, tha Manaidsear Rianadair Cloud a’ toirt seachad còig prìomh sheòrsan eadar-obrachaidh:

  1. Àrainnean - a’ cur an gnìomh dàimh 1: 1 eadar nì nód ann an Kubernetes (Node) agus inneal brìgheil anns an t-solaraiche sgòthan. Airson seo tha sinn:
    • lìon an raon spec.providerID anns an nì Node. Mar eisimpleir, airson OpenStack CCM tha an cruth a leanas aig an raon seo: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Chì thu ainm an t-solaraiche sgòthan agus UUID sònraichte an fhrithealaiche (inneal mas-fhìor ann an OpenStack) an nì;
    • coimhlionta nodeInfo anns an nì Node fiosrachadh mun inneal mas-fhìor. Mar eisimpleir, bidh sinn a’ sònrachadh seòrsa eisimpleir ann an AWS;
    • Nì sinn sgrùdadh air làthaireachd inneal brìgheil san sgòth. Mar eisimpleir, ma tha nì Node chaidh e ann an staid NotReady, faodaidh tu sgrùdadh a bheil an inneal brìgheil ann idir anns an t-solaraiche sgòthan le providerID. Mura h-eil e ann, cuir às don nì Node, a dh'fhanadh air dhòigh eile 's a' bhasgaid gu bràth ;
  2. sònaichean - a’ suidheachadh an raon teip airson an nì Node, gus an urrainn don chlàr-ama nód a thaghadh airson a’ Phod a rèir nan roinnean agus na sònaichean anns an t-solaraiche sgòthan;
  3. Loadbalancer - nuair a chruthaicheas tu nì Service le seòrsa LoadBalancer a’ cruthachadh seòrsa de chothromachadh a stiùireas trafaic bhon taobh a-muigh gu na nodan brabhsair. Mar eisimpleir, ann an Yandex.Cloud faodaidh tu a chleachdadh NetworkLoadBalancer и TargetGroup airson nan adhbharan seo;
  4. Slighe - a’ togail lìonra eadar nodan, oir A rèir riatanasan Kubernetes, feumaidh a sheòladh IP fhèin a bhith aig gach pod agus a bhith comasach air pod sam bith eile a ruighinn. Airson na h-adhbharan sin, faodaidh tu lìonra ath-chòmhdach (VXLAN, GENEVE) a chleachdadh no clàr slighe a shuidheachadh gu dìreach ann an lìonra brìgheil an t-solaraiche sgòthan:

    A’ toirt a-steach Kubernetes CCM (Manaidsear Rianadair Cloud) airson Yandex.Cloud

  5. volume - A’ ceadachadh òrdachadh fiùghantach PV a’ cleachdadh PVC agus SC. An toiseach, bha an gnìomh seo mar phàirt de CCM, ach air sgàth cho iom-fhillte ‘s a bha e chaidh a ghluasad gu pròiseact air leth, Container Storage Interface (CSI). Tha sinn air bruidhinn mu CSI barrachd air aon uair sgrìobh agus, mar a dh'ainmicheadh ​​cheana, eadhon ma sgaoil Driver airson CSI.

Roimhe sin, bha a h-uile còd a bha ag eadar-obrachadh leis an sgòth suidhichte ann am prìomh stòr Git de phròiseact Kubernetes aig k8s.io/kubernetes/pkg/cloudprovider/providers, ach chuir iad romhpa seo a thrèigsinn air sgàth mì-ghoireasachd a bhith ag obair le bunait còd mòr. Chaidh a h-uile seann bhuileachadh a ghluasad gu stòr air leth. Airson goireasachd tuilleadh taic is leasachaidh, chaidh na pàirtean cumanta uile a ghluasad gu cuideachd stòr air leth.

Coltach ri CSI, tha mòran de sholaraichean sgòthan mòra air na CCMn aca a dhealbhadh mar-thà gus sgòthan a luathachadh air Kubernetes. Mura h-eil CCM aig an t-solaraiche, ach gu bheil na gnìomhan riatanach uile rim faighinn tro API, faodaidh tu CCM a chuir an gnìomh thu fhèin.

Gus do bhuileachadh fhèin de CCM a sgrìobhadh, tha e gu leòr airson a bhuileachadh eadar-aghaidh Go riatanach.

И seo na fhuair sinn.

Реализация

Ciamar a thàinig thu gu seo

Thòisich sinn leasachadh (no an àite, eadhon cleachdadh) le deiseil(!) CCM airson Yandex.Cloud bliadhna air ais.

Ach, anns a’ bhuileachadh seo bha sinn a’ call:

  • dearbhadh tro chomharradh JWT IAM;
  • Taic rianadair seirbheis.

Ann an aonta leis an ùghdar (dlisin) ann an Telegram, chuir sinn air adhart yandex-cloud-controller-manager agus chuir sinn ris na gnìomhan a bha a dhìth.

Prìomh fheartan

An-dràsta, tha CCM a’ toirt taic don eadar-aghaidh a leanas:

  • Àrainnean;
  • sònaichean;
  • Loadbalancer.

Anns an àm ri teachd, nuair a thòisicheas Yandex.Cloud ag obair le comasan adhartach VPC, cuiridh sinn eadar-aghaidh ris Slighean.

LoadBalanacer mar phrìomh dhùbhlan

An toiseach, dh’ fheuch sinn, mar ghnìomhachadh CCM eile, ri paidhir de LoadBalancer и TargetGroup airson gach fear Service le seòrsa LoadBalancer. Ach, lorg Yandex.Cloud aon chuingealachadh inntinneach: chan urrainn dhut a chleachdadh TargetGroups le eadar-ghearradh Targets (càraid SubnetID - IpAddress).

A’ toirt a-steach Kubernetes CCM (Manaidsear Rianadair Cloud) airson Yandex.Cloud

Mar sin, taobh a-staigh an CCM a chaidh a chruthachadh, thèid rianadair a chuir air bhog, a bhios, nuair a bhios nithean ag atharrachadh Node a’ cruinneachadh fiosrachadh mu gach eadar-aghaidh air gach inneal mas-fhìor, gan cur ann am buidhnean a rèir mar a bhuineas iad do chuid NetworkID, a' cruthachadh le TargetGroup air NetworkID, agus cuideachd a 'cumail sùil air iomchaidheachd. Às deidh sin, nuair a chruthaicheas tu nì Service le seòrsa LoadBalanacer bidh sinn dìreach a’ ceangal ro-chruthaichte TargetGroup gu ùr NetworkLoadBalanacer'tha mi.

Ciamar a thòisicheas tu ga chleachdadh?

Tha CCM a’ toirt taic do dhreach Kubernetes 1.15 agus nas àirde. Ann am buidheann, airson gun obraich e, feumaidh e am bratach --cloud-provider=external chaidh a shuidheachadh gu true airson kube-apiserver, kube-controller-manaidsear, kube-scheduler agus a h-uile kubelets.

Tha a h-uile ceum riatanach airson an stàladh fhèin air a mhìneachadh ann an LEASACHADH. Tha an stàladh an urra ri cruthachadh stuthan ann an Kubernetes bho manifestos.

Gus CCM a chleachdadh feumaidh tu cuideachd:

  • comharrachadh anns an taisbeanach tha an aithnichear eòlaire (folder-id) Yandex.Cloud;
  • cunntas seirbheis airson eadar-obrachadh leis an Yandex.Cloud API. Anns a’ mhanifesto Secret riatanach gluasad iuchraichean ùghdarraichte bhon chunntas seirbheis. Anns na sgrìobhainnean air a mhìneachadh, mar a chruthaicheas tu cunntas seirbheis agus faigh iuchraichean.

Bidh sinn toilichte ur fios air ais fhaighinn agus cùisean ùrama choinnicheas tu ri duilgheadas sam bith!

Builean

Tha sinn air a bhith a’ cleachdadh an CCM a chaidh a chuir an gnìomh ann an còig cruinneachaidhean Kubernetes thairis air an dà sheachdain a chaidh seachad agus tha sinn an dùil an àireamh aca a leudachadh gu 20 anns a’ mhìos a tha romhainn. Chan eil sinn an-dràsta a’ moladh CCM a chleachdadh airson ionadan mòra agus èiginneach K8s.

Mar a tha ann an cùis CSI, bidh sinn toilichte ma tha luchd-leasachaidh Yandex a 'gabhail os làimh leasachadh agus taic a' phròiseict seo - tha sinn deiseil gus an stòras a ghluasad air an iarrtas aca gus dèiligeadh ri gnìomhan a tha nas freagarraiche dhuinn.

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann