ProHoster > Blog > Rianachd > 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.
À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 ;
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;
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;
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:
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.
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).
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.