Yandex.Cloud-erako Kubernetes CCM (Cloud Controller Manager) aurkezten

Yandex.Cloud-erako Kubernetes CCM (Cloud Controller Manager) aurkezten

Duela gutxikoaren jarraipena CSI gidariaren oharra Yandex.Cloud-erako beste kode irekiko proiektu bat argitaratzen ari gara hodei honetarako - Hodeiko kontroladoreen kudeatzailea. CCM beharrezkoa da kluster osoa ez ezik, CSI kontrolatzailea bera ere. Bere helburuari eta ezarpen-ezaugarri batzuei buruzko xehetasunak moztuta daude.

Sarrera

Zergatik da hau?

Yandex.Cloud-erako CCM garatzera bultzatu gintuzten motiboak guztiz bat datoz dagoeneko deskribatutakoekin iragarkia CSI gidariak. Hodei-hornitzaile ezberdinetako Kubernetes kluster asko mantentzen ditugu, eta horretarako tresna bakarra erabiltzen dugu. Erosotasun ugari ezartzen ditu hornitzaile horien kudeatutako soluzioak "saihestuz". Bai, kasu eta behar zehatz samarrak ditugu, baina horiengatik sortutako garapenak beste erabiltzaileentzat baliagarriak izan daitezke.

Zer da zehazki CCM?

Normalean, gure inguruko ingurunea klusterrako prestatzen dugu kanpotik - adibidez, Terraform erabiliz. Baina batzuetan gure inguruko hodei ingurunea kudeatu beharra dago klusterretik. Aukera hori ematen da, eta gauzatzen dena da CCM.

Zehazki, Cloud Controller Manager-ek bost interakzio mota nagusi eskaintzen ditu:

  1. instantzia – Kubernetes-en nodo objektu baten arteko 1:1 erlazioa ezartzen du (Node) eta makina birtual bat hodeiko hornitzailean. Horretarako guk:
    • bete eremua spec.providerID objektuan Node. Adibidez, OpenStack CCM-rako eremu honek formatu hau du: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Hodeiko hornitzailearen izena eta objektuaren zerbitzariaren (OpenStack-en makina birtuala) UUID bakarra ikus ditzakezu;
    • osagarri nodeInfo objektuan Node makina birtualari buruzko informazioa. Adibidez, instantzia mota AWSn zehazten dugu;
    • Hodeian makina birtual baten presentzia egiaztatzen dugu. Adibidez, objektu bat bada Node egoera batean sartu zen NotReady, hodeiko hornitzailean makina birtuala existitzen den egiaztatu dezakezu providerID. Ez badago, ezabatu objektua Node, bestela betiko multzoan geratuko litzatekeena;
  2. Zones – objektuaren hutsegite-domeinua ezartzen du Node, programatzaileak Pod-erako nodo bat hauta dezan hodeiko hornitzaileko eskualdeen eta zonen arabera;
  3. LoadBalancer – objektu bat sortzean Service motarekin LoadBalancer trafikoa kanpotik cluster nodoetara bideratuko duen orekatzaile moduko bat sortzen du. Adibidez, Yandex.Cloud-en erabil dezakezu NetworkLoadBalancer ΠΈ TargetGroup helburu horietarako;
  4. Ibilbidea – nodoen arteko sare bat eraikitzen du, zeren Kubernetes-en eskakizunen arabera, pod bakoitzak bere IP helbidea izan behar du eta beste edozein podetara iristeko gai izan. Helburu horietarako, gainjarritako sare bat erabil dezakezu (VXLAN, GENEVE) edo bideratze-taula bat ezar dezakezu zuzenean hodeiko hornitzailearen sare birtualean:

    Yandex.Cloud-erako Kubernetes CCM (Cloud Controller Manager) aurkezten

  5. Bolumen – PVren ordena dinamikoa ahalbidetzen du PVC eta SC erabiliz. Hasieran, funtzionalitate hau CCMren parte zen, baina bere konplexutasun handia zela eta proiektu berezi batera eraman zen, Container Storage Interface (CSI). Behin baino gehiagotan hitz egin dugu CSIri buruz писали eta, esan bezala, are askatu CSI gidaria.

Aurretik, hodeiarekin elkarreragiten zuen kode guztia Kubernetes proiektuko Git biltegi nagusian zegoen. k8s.io/kubernetes/pkg/cloudprovider/providers, baina hau bertan behera uztea erabaki zuten kode-oinarri handi batekin lan egiteak eragozpenengatik. Inplementazio zahar guztiak tokira eraman dira biltegi bereizia. Laguntza eta garapen gehiagorako erosotasunerako, osagai komun guztiak ere mugitu ziren biltegi bereizia.

CSIrekin gertatzen den bezala, hodei hornitzaile handi askok dagoeneko diseinatu dituzte beren CCMak Kubernetes-en hodeiak aprobetxatzeko. Hornitzaileak ez badu CCMrik, baina beharrezkoak diren funtzio guztiak API bidez eskuragarri badaude, orduan zeuk ezar dezakezu CCM.

CCMren inplementazioa idazteko, nahikoa da inplementatzea beharrezkoak diren Go interfazeak.

И hau da lortu duguna.

Inplementazioa

Nola iritsi zara honetara

Garatzen (edo hobeto esanda, erabiltzen) hasi ginen prest(!) CCM Yandex.Cloud-erako duela urtebete.

Hala ere, inplementazio honetan falta ginen:

  • autentifikazioa JWT IAM token bidez;
  • Zerbitzu kontroladorearen laguntza.

Egilearekin adostuta (dlisin) Telegramen, yandex-cloud-controller-manager bifurkatu genuen eta falta ziren funtzioak gehitu genituen.

Funtsezko ezaugarriak

Gaur egun, CCM-k interfaze hauek onartzen ditu:

  • instantzia;
  • Zones;
  • LoadBalancer.

Etorkizunean, Yandex.Cloud VPC gaitasun aurreratuekin lanean hasten denean, interfaze bat gehituko dugu Ibilbideak.

LoadBalanacer erronka nagusi gisa

Hasieran, CCM beste inplementazio batzuk bezala, pare bat sortzen saiatu ginen LoadBalancer ΠΈ TargetGroup guztiontzat Service motarekin LoadBalancer. Hala ere, Yandex.Cloud-ek muga interesgarri bat aurkitu zuen: ezin duzu erabili TargetGroups gurutzatuz Targets (bikotea SubnetID - IpAddress).

Yandex.Cloud-erako Kubernetes CCM (Cloud Controller Manager) aurkezten

Hori dela eta, sortutako CCM barruan, kontrolagailu bat abiarazten da, zeina, objektuak aldatzen direnean Node makina birtual bakoitzeko interfaze guztiei buruzko informazioa biltzen du, zenbait kideren arabera taldekatzen ditu NetworkID, sortzen du TargetGroup on NetworkID, eta garrantzia ere kontrolatzen du. Ondoren, objektu bat sortzean Service motarekin LoadBalanacer aurrez sortutako bat erantsi besterik ez dugu TargetGroup berrira NetworkLoadBalanacer'naiz.

Nola hasi erabiltzen?

CCM-k Kubernetes 1.15 bertsioa eta berriagoa onartzen du. Kluster batean, funtziona dezan, bandera hori eskatzen du --cloud-provider=external ezarri zen true kube-apiserver, kube-controller-manager, kube-scheduler eta kubelet guztietarako.

Instalaziorako beharrezkoak diren urrats guztiak atalean azaltzen dira README. Instalazioa manifestuetatik Kubernetes-en objektuak sortzean datza.

CCM erabiltzeko ere beharko duzu:

  • adierazi manifestuan direktorioaren identifikatzailea (folder-id) Yandex.Cloud;
  • Yandex.Cloud APIarekin elkarreragiteko zerbitzu-kontua. Manifestuan Secret must transferitu baimendutako giltzak zerbitzu-kontutik. Dokumentazioan deskribatu, nola sortu zerbitzu-kontua eta giltzak nola lortu.

Pozik jasoko dugu zure iritzia eta gai berriakarazorik aurkitzen baduzu!

Emaitzak

Azken bi asteotan Kuberneteseko bost klusterretan inplementatutako CCM erabiltzen aritu gara eta datorren hilabetean 20ra zabaltzeko asmoa dugu. Une honetan ez dugu gomendatzen CCM erabiltzea K8s instalazio handi eta kritikoetarako.

CSI-ren kasuan bezala, pozik egongo gara Yandex-eko garatzaileek proiektu honen garapena eta laguntza hartzen badute - prest gaude biltegia transferitzeko haiek eskatuta, guretzat garrantzitsuago diren zereginei aurre egiteko.

PS

Irakurri ere gure blogean:

Iturria: www.habr.com

Gehitu iruzkin berria