Pagpaila sa Kubernetes CCM (Cloud Controller Manager) para sa Yandex.Cloud

Pagpaila sa Kubernetes CCM (Cloud Controller Manager) para sa Yandex.Cloud

Sa pagpadayon sa bag-o lang Pagpagawas sa drayber sa CSI para sa Yandex.Cloud nagmantala kami og laing proyekto sa Open Source alang niini nga panganod - Tagdumala sa Cloud Controller. Gikinahanglan ang CCM dili lamang alang sa cluster sa kinatibuk-an, kondili alang usab sa drayber sa CSI mismo. Ang mga detalye bahin sa katuyoan niini ug pipila nga mga bahin sa pagpatuman naa sa ilawom sa pagputol.

Pasiuna

Ngano man ni?

Ang mga motibo nga nag-aghat kanamo sa pagpalambo sa CCM alang sa Yandex.Cloud hingpit nga nahiuyon sa mga gihulagway na sa pahibalo Mga drayber sa CSI. Kami nagmintinar sa daghang Kubernetes clusters gikan sa lain-laing mga cloud providers, diin kami naggamit sa usa ka himan. Nag-implementar kini og daghang mga kasayon ​​"pag-bypass" sa gidumala nga mga solusyon niini nga mga provider. Oo, kami adunay usa ka piho nga kaso ug panginahanglan, apan ang mga pag-uswag nga gihimo tungod niini mahimo’g mapuslanon sa ubang mga tiggamit.

Unsa man gyud ang CCM?

Kasagaran, atong giandam ang palibot sa atong palibot para sa cluster gikan sa gawas - pananglitan, gamit ang Terraform. Apan usahay adunay panginahanglan sa pagdumala sa panganod nga palibot sa atong palibot gikan sa cluster. Kini nga posibilidad gihatag, ug kini mao ang gipatuman CCM.

Sa piho, ang Cloud Controller Manager naghatag og lima ka nag-unang matang sa interaksyon:

  1. Higayon - nagpatuman sa usa ka 1: 1 nga relasyon tali sa usa ka node nga butang sa Kubernetes (Node) ug usa ka virtual machine sa cloud provider. Alang niini kami:
    • pun-a ang uma spec.providerID sa butang Node. Pananglitan, alang sa OpenStack CCM kini nga field adunay mosunod nga format: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Imong makita ang ngalan sa cloud provider ug ang talagsaong UUID sa server (virtual machine sa OpenStack) sa butang;
    • komplemento nodeInfo sa butang Node impormasyon bahin sa virtual machine. Pananglitan, among gipiho ang tipo sa pananglitan sa AWS;
    • Gisusi namon ang presensya sa usa ka virtual nga makina sa panganod. Pananglitan, kon ang usa ka butang Node miadto sa usa ka estado NotReady, mahimo nimong susihon kung ang virtual machine anaa ba sa cloud provider pinaagi sa providerID. Kung wala kini, kuhaa ang butang Node, nga kon dili magpabilin sa pungpong sa kahangturan;
  2. Zone – nagtakda sa kapakyasan domain alang sa butang Node, aron ang scheduler makapili ug node para sa Pod sumala sa mga rehiyon ug mga zone sa cloud provider;
  3. LoadBalancer – sa paghimo sa usa ka butang Service uban sa tipo LoadBalancer nagmugna og usa ka matang sa balancer nga modirekta sa trapiko gikan sa gawas ngadto sa mga cluster node. Pananglitan, sa Yandex.Cloud mahimo nimong gamiton NetworkLoadBalancer и TargetGroup alang niini nga mga katuyoan;
  4. dalan - nagtukod usa ka network tali sa mga node, tungod kay Sumala sa mga kinahanglanon sa Kubernetes, ang matag pod kinahanglan adunay kaugalingon nga IP address ug makaabot sa bisan unsang lain nga pod. Alang niini nga mga katuyoan, mahimo nimong gamiton ang usa ka overlay network (VXLAN, GENEVE) o magbutang usa ka routing table direkta sa virtual network sa cloud provider:

    Pagpaila sa Kubernetes CCM (Cloud Controller Manager) para sa Yandex.Cloud

  5. gidaghanon - Gitugotan ang dinamikong pag-order sa PV gamit ang PVC ug SC. Sa sinugdan, kini nga pagpaandar kabahin sa CCM, apan tungod sa dako nga pagkakomplikado niini gibalhin kini sa usa ka bulag nga proyekto, Container Storage Interface (CSI). Naghisgot kami bahin sa CSI labaw sa usa ka beses nagsulat ug, sama sa nahisgotan na, bisan gibuhian drayber sa CSI.

Kaniadto, ang tanan nga code nga nakig-uban sa panganod nahimutang sa panguna nga Git repository sa proyekto sa Kubernetes sa k8s.io/kubernetes/pkg/cloudprovider/providers, apan nakahukom sila nga biyaan kini tungod sa kahasol sa pagtrabaho sa usa ka dako nga base sa code. Ang tanan nga daan nga pagpatuman gibalhin sa bulag nga repositoryo. Alang sa kasayon ​​​​sa dugang nga suporta ug kalamboan, ang tanan nga komon nga mga sangkap gibalhin usab sa bulag nga repositoryo.

Sama sa CSI, daghang dagkong cloud providers ang nagdesinyo na sa ilang mga CCM aron magamit ang mga panganod sa Kubernetes. Kung ang supplier walay CCM, apan ang tanan nga gikinahanglan nga mga gimbuhaton anaa pinaagi sa API, nan mahimo nimong ipatuman ang CCM sa imong kaugalingon.

Aron isulat ang imong kaugalingon nga pagpatuman sa CCM, igo na nga ipatuman gikinahanglan nga mga interface sa Go.

И mao kini ang among nakuha.

Pagpatuman

Giunsa nimo pag-abot niini

Nagsugod kami sa pagpalambo (o hinoon, bisan sa paggamit) uban sa andam(!) CCM para sa Yandex.Cloud usa ka tuig na ang milabay.

Bisan pa, sa kini nga pagpatuman kami nawala:

  • authentication pinaagi sa JWT IAM token;
  • Suporta sa tigdumala sa serbisyo.

Uyon sa tagsulat (dlisin) sa Telegram, gi-forked namo ang yandex-cloud-controller-manager ug gidugang ang nawala nga mga function.

Yawe nga mga bahin

Sa pagkakaron, gisuportahan sa CCM ang mosunod nga mga interface:

  • Higayon;
  • Zone;
  • LoadBalancer.

Sa umaabot, kung ang Yandex.Cloud magsugod sa pagtrabaho uban ang mga advanced nga kapabilidad sa VPC, magdugang kami usa ka interface Mga ruta.

Ang LoadBalanacer isip nag-unang hagit

Sa sinugdan, gisulayan namo, sama sa ubang mga pagpatuman sa CCM, sa paghimo og usa ka parisan sa LoadBalancer и TargetGroup alang sa matag usa Service uban sa tipo LoadBalancer. Bisan pa, ang Yandex.Cloud nakadiskobre sa usa ka makapaikag nga limitasyon: dili nimo magamit TargetGroups uban sa interseksyon Targets (pares SubnetID - IpAddress).

Pagpaila sa Kubernetes CCM (Cloud Controller Manager) para sa Yandex.Cloud

Busa, sa sulod sa gibuhat nga CCM, usa ka controller ang gilunsad, nga, sa diha nga ang mga butang mausab Node nagkolekta impormasyon mahitungod sa tanan nga mga interface sa matag virtual machine, mga grupo kanila sumala sa ilang mga sakop sa pipila NetworkID, gimugna ni TargetGroup sa NetworkID, ug nagmonitor usab sa kalambigitan. Pagkahuman, kung maghimo usa ka butang Service uban sa tipo LoadBalanacer gilakip lang namo ang usa ka pre-created TargetGroup sa bag-o NetworkLoadBalanacer'am.

Giunsa magsugod ang paggamit?

Gisuportahan sa CCM ang Kubernetes nga bersyon 1.15 ug mas taas pa. Sa usa ka cluster, aron kini molihok, gikinahanglan nga ang bandila --cloud-provider=external gitakda sa true para sa kube-apiserver, kube-controller-manager, kube-scheduler ug tanang kubelets.

Ang tanan nga gikinahanglan nga mga lakang alang sa pag-instalar mismo gihulagway sa README. Ang pag-instalar nagsugod sa paghimo og mga butang sa Kubernetes gikan sa mga manifest.

Aron magamit ang CCM kinahanglan nimo usab:

  • nagpaila sa manifest ang directory identifier (folder-id) Yandex.Cloud;
  • account sa serbisyo alang sa pagpakig-uban sa Yandex.Cloud API. Sa manifesto Secret kinahanglanon pagbalhin sa awtorisado nga mga yawe gikan sa account sa serbisyo. Sa dokumentasyon gihulagway, unsaon paghimo og service account ug pagkuha og mga yawe.

Malipay kami nga makadawat sa imong feedback ug bag-ong mga isyukung makasugat kag problema!

Mga resulta

Gigamit namo ang gipatuman nga CCM sa lima ka Kubernetes clusters sa miaging duha ka semana ug nagplano nga palapdan ang ilang gidaghanon ngadto sa 20 sa umaabot nga bulan. Sa pagkakaron dili namo girekomendar ang paggamit sa CCM alang sa dagko ug kritikal nga mga instalasyon sa K8.

Sama sa kaso sa CSI, malipay kami kung ang mga developer sa Yandex mohimo sa pag-uswag ug suporta niini nga proyekto - andam kami nga ibalhin ang repository sa ilang hangyo aron maatubang ang mga buluhaton nga labi ka may kalabotan kanamo.

PS

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment