Iepazīstinām ar Kubernetes CCM (Cloud Controller Manager) Yandex.Cloud

Iepazīstinām ar Kubernetes CCM (Cloud Controller Manager) Yandex.Cloud

Turpinot neseno CSI draivera izlaiÅ”ana Yandex.Cloud mēs publicējam vēl vienu atvērtā pirmkoda projektu Å”im mākonim - Mākoņu kontroliera pārvaldnieks. CCM ir nepiecieÅ”ams ne tikai klasterim kopumā, bet arÄ« paÅ”am CSI draiverim. SÄ«kāka informācija par tā mērÄ·i un dažām ievieÅ”anas funkcijām ir izgriezta.

Ievads

Kāpēc ir Å”is?

MotÄ«vi, kas pamudināja mÅ«s izstrādāt CCM priekÅ” Yandex.Cloud, pilnÄ«bā sakrÄ«t ar tiem, kas jau aprakstÄ«ti paziņojums CSI draiveri. Mēs uzturam daudz Kubernetes klasteru no dažādiem mākoņpakalpojumu sniedzējiem, kuriem izmantojam vienu rÄ«ku. Tas ievieÅ” daudzas ērtÄ«bas, ā€œapejotā€ Å”o pakalpojumu sniedzēju pārvaldÄ«tos risinājumus. Jā, mums ir diezgan specifisks gadÄ«jums un vajadzÄ«bas, taču to dēļ radÄ«tās izstrādes var bÅ«t noderÄ«gas citiem lietotājiem.

Kas Ä«sti ir CCM?

Parasti mēs sagatavojam apkārtējo vidi klasterim no ārpuses - piemēram, izmantojot Terraform. Bet dažreiz ir nepiecieÅ”ams pārvaldÄ«t mākoņu vidi mums apkārt no klastera. Šāda iespēja tiek nodroÅ”ināta, un tieÅ”i tā tiek Ä«stenota CCM.

Konkrēti, Cloud Controller Manager nodroÅ”ina piecus galvenos mijiedarbÄ«bas veidus:

  1. GadÄ«jumos ā€“ ievieÅ” 1:1 attiecÄ«bas starp Kubernetes mezgla objektu (Node) un virtuālo maŔīnu mākoņpakalpojumā. Å im nolÅ«kam mēs:
    • aizpildiet lauku spec.providerID objektā Node. Piemēram, OpenStack CCM Å”im laukam ir Ŕāds formāts: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. JÅ«s varat redzēt mākoņa nodroÅ”inātāja nosaukumu un objekta unikālo servera (virtuālās maŔīnas OpenStack) UUID;
    • papildināt nodeInfo objektā Node informācija par virtuālo maŔīnu. Piemēram, mēs norādām instances veidu AWS;
    • Mēs pārbaudām virtuālās maŔīnas klātbÅ«tni mākonÄ«. Piemēram, ja objekts Node nonāca stāvoklÄ« NotReady, varat pārbaudÄ«t, vai virtuālā maŔīna mākoņpakalpojumā vispār pastāv providerID. Ja tā nav, izdzēsiet objektu Node, kas citādi paliktu klasterÄ« uz visiem laikiem;
  2. Zonas ā€“ iestata objekta kļūmes domēnu Node, lai plānotājs varētu atlasÄ«t Pod mezglu atbilstoÅ”i mākoņa nodroÅ”inātāja reÄ£ioniem un zonām;
  3. LoadBalancer ā€“ veidojot objektu Service ar tipu LoadBalancer rada sava veida balansētāju, kas novirzÄ«s trafiku no ārpuses uz klastera mezgliem. Piemēram, vietnē Yandex.Cloud varat izmantot NetworkLoadBalancer Šø TargetGroup Å”iem nolÅ«kiem;
  4. MarÅ”ruts ā€“ veido tÄ«klu starp mezgliem, jo Saskaņā ar Kubernetes prasÄ«bām katram podam ir jābÅ«t savai IP adresei un jāspēj sasniegt jebkuru citu pod. Å iem nolÅ«kiem varat izmantot pārklājuma tÄ«klu (VXLAN, GENEVE) vai iestatÄ«t marÅ”rutÄ“Å”anas tabulu tieÅ”i mākoņa pakalpojumu sniedzēja virtuālajā tÄ«klā:

    Iepazīstinām ar Kubernetes CCM (Cloud Controller Manager) Yandex.Cloud

  5. tilpums ā€“ Ä»auj dinamiski sakārtot PV, izmantojot PVC un SC. Sākotnēji Ŕī funkcionalitāte bija daļa no CCM, taču tās lielās sarežģītÄ«bas dēļ tā tika pārvietota uz atseviŔķu projektu Container Storage Interface (CSI). Mēs esam runājuÅ”i par CSI vairāk nekā vienu reizi ŠæŠøсŠ°Š»Šø un, kā jau minēts, pat izlaists CSI draiveris.

IepriekÅ” viss kods, kas mijiedarbojas ar mākoni, atradās Kubernetes projekta galvenajā Git repozitorijā plkst. k8s.io/kubernetes/pkg/cloudprovider/providers, taču viņi nolēma no tā atteikties, jo sagādāja neērtÄ«bas darbā ar lielu kodu bāzi. Visas vecās ievieÅ”anas ir pārvietotas uz atseviŔķa repozitorija. Turpmākā atbalsta un attÄ«stÄ«bas ērtÄ«bām tika pārvietotas arÄ« visas kopÄ«gās sastāvdaļas atseviŔķa repozitorija.

Tāpat kā CSI gadÄ«jumā, daudzi lieli mākoņdatoÅ”anas pakalpojumu sniedzēji jau ir izstrādājuÅ”i savus CCM, lai Kubernetes izmantotu mākoņus. Ja piegādātājam nav CCM, bet visas nepiecieÅ”amās funkcijas ir pieejamas caur API, tad CCM varat ieviest pats.

Lai uzrakstītu savu CCM ievieŔanu, pietiek ar tās ievieŔanu nepiecieŔamās Go saskarnes.

Š˜ tas ir tas, ko mēs saņēmām.

IevieŔana

Kā jūs nonācāt pie tā

Mēs sākām izstrādi (pareizāk sakot, pat lietoÅ”anu) ar gatavs(!) CCM Yandex.Cloud pirms gada.

Tomēr Å”ajā Ä«stenoÅ”anā mums trÅ«ka:

  • autentifikācija, izmantojot JWT IAM marÄ·ieri;
  • Servisa kontroliera atbalsts.

Vienojoties ar autoru (dlizÄ«ns) Programmā Telegram mēs izveidojām yandex-cloud-controller-manager un pievienojām trÅ«kstoŔās funkcijas.

Galvenās iezīmes

PaŔlaik CCM atbalsta Ŕādas saskarnes:

  • GadÄ«jumos;
  • Zonas;
  • LoadBalancer.

Nākotnē, kad Yandex.Cloud sāks strādāt ar uzlabotām VPC iespējām, mēs pievienosim saskarni marÅ”ruti.

LoadBalanacer kā galvenais izaicinājums

Sākotnēji mēs mēģinājām, tāpat kā citas CCM implementācijas, izveidot pāris LoadBalancer Šø TargetGroup visiem Service ar tipu LoadBalancer. Tomēr Yandex.Cloud atklāja vienu interesantu ierobežojumu: jÅ«s nevarat izmantot TargetGroups ar krustojas Targets (pāris SubnetID Sākot no IpAddress).

Iepazīstinām ar Kubernetes CCM (Cloud Controller Manager) Yandex.Cloud

Tāpēc izveidotajā CCM tiek palaists kontrolieris, kas, mainoties objektiem Node apkopo informāciju par visām saskarnēm katrā virtuālajā maŔīnā, grupē tās atbilstoÅ”i to piederÄ«bai noteiktai NetworkID, rada ar TargetGroup par NetworkID, kā arÄ« uzrauga atbilstÄ«bu. Pēc tam, veidojot objektu Service ar tipu LoadBalanacer mēs vienkārÅ”i pievienojam iepriekÅ” izveidotu TargetGroup uz jaunu NetworkLoadBalanaceresmu.

Kā sākt lietot?

CCM atbalsta Kubernetes versiju 1.15 un jaunāku versiju. Klasterī, lai tas darbotos, ir nepiecieŔams karogs --cloud-provider=external bija iestatīts uz true kube-apiserver, kube-controller-manager, kube-plānotājs un visi kubelets.

Visas nepiecieÅ”amās darbÄ«bas paÅ”ai instalÄ“Å”anai ir aprakstÄ«tas README. InstalÄ“Å”ana ir saistÄ«ta ar objektu izveidi Kubernetes no manifestiem.

Lai izmantotu CCM, jums būs nepiecieŔams arī:

Priecāsimies saņemt jūsu atsauksmes un jauni jautājumija rodas kādas problēmas!

Rezultāti

Mēs esam izmantojuÅ”i ieviesto CCM piecos Kubernetes klasteros pēdējo divu nedēļu laikā un plānojam nākamajā mēnesÄ« to skaitu paplaÅ”ināt lÄ«dz 20. PaÅ”laik mēs neiesakām izmantot CCM lielām un kritiskām K8 instalācijām.

Tāpat kā CSI gadÄ«jumā, mēs priecāsimies, ja Yandex izstrādātāji uzņemsies Ŕī projekta izstrādi un atbalstu - esam gatavi pēc viņu pieprasÄ«juma nodot repozitoriju, lai tiktu galā ar mums aktuālākiem uzdevumiem.

PS

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru