Nasîna Kubernetes CCM (Rêveberê Kontrolkerê Cloud) ji bo Yandex.Cloud

Nasîna Kubernetes CCM (Rêveberê Kontrolkerê Cloud) ji bo Yandex.Cloud

Di berdewamiya dawî de berdana ajokerê CSI ji bo Yandex.Cloud em ji bo vê ewr projeyek din a Çavkaniya Vekirî diweşînin - Cloud Controller Manager. CCM ne tenê ji bo komê bi tevahî, lê ji bo ajokera CSI bixwe jî hewce ye. Agahiyên li ser armanca wê û hin taybetmendiyên pêkanînê di bin qutbûnê de ne.

Pîrozbahiyê

Çima ev e?

Motîvên ku me hişt ku em CCM-ê ji bo Yandex.Cloud pêşve bibin bi tevahî bi yên ku berê di nav de hatine destnîşan kirin re hevûdu ne daxûyanî ajokarên CSI. Em gelek komên Kubernetes ji pêşkêşkerên ewr ên cihêreng diparêzin, ji bo ku em amûrek yekane bikar tînin. Ew gelek rehetiyan "dihêle" çareseriyên birêvebir ên van pêşkêşvanan bicîh tîne. Erê, doz û hewcedariyên me yên taybetî hene, lê pêşkeftinên ku ji ber wan hatine afirandin dibe ku ji bikarhênerên din re kêrhatî bin.

CCM bi rastî çi ye?

Bi gelemperî, em hawirdora xwe ji bo komê amade dikin ji derve - ji bo nimûne, bikaranîna Terraform. Lê carinan hewcedarî bi rêvebirina hawîrdora ewr a li dora me heye ji komê. Ev îmkan tê peyda kirin, û ew e ku tête bicîh kirin CCM.

Bi taybetî, Rêvebirê Kontrolkerê Cloud pênc celebên sereke yên danûstendinê peyda dike:

  1. Dersên - têkiliyek 1: 1 di navbera objeyek girêkê de li Kubernetes pêk tîne (Node) û makîneyek virtual di pêşkêşvanê ewr de. Ji bo vê em:
    • qadê dagirin spec.providerID di objeyê de Node. Mînakî, ji bo OpenStack CCM vê qadê forma jêrîn heye: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Hûn dikarin navê pêşkêşkarê ewr û UUID-ya yekta ya serverê (makîna virtual li OpenStack) ya objektê bibînin;
    • temam dikin nodeInfo di objeyê de Node agahdariya li ser makîneya virtual. Mînakî, em celeb nimûne di AWS de diyar dikin;
    • Em hebûna makîneyek virtual di ewr de kontrol dikin. Ji bo nimûne, eger tiştek Node ketine rewşekê NotReady, hûn dikarin kontrol bikin ka makîneya virtual bi tevahî di pêşkêşvanê ewr de heye an na providerID. Ger ew ne li wir be, tiştê jêbirin Node, ku wekî din dê her û her di komê de bimîne;
  2. herêmên - ji bo objeyê qada têkçûnê destnîşan dike Node, da ku plansazkar dikare ji bo Pod-ê li gorî herêm û deverên di pêşkêşkera ewr de girêkek hilbijêre;
  3. LoadBalancer - dema afirandina tiştekî Service bi tîp LoadBalancer celebek balansek diafirîne ku dê seyrûsefera ji derve ber bi girêkên komê ve bi rê ve bibe. Mînakî, di Yandex.Cloud de hûn dikarin bikar bînin NetworkLoadBalancer и TargetGroup ji bo van armancan;
  4. Rêk - torekê di navbera girêkan de çêdike, ji ber Li gorî daxwazên Kubernetes, divê her pod navnîşana IP-ya xwe hebe û bikaribe bigihîje her podek din. Ji bo van armancan, hûn dikarin torgilokek pêvekirî (VXLAN, GENEVE) bikar bînin an tabloyek rêvekirinê rasterast di tora virtual ya pêşkêşvanê ewr de saz bikin:

    Nasîna Kubernetes CCM (Rêveberê Kontrolkerê Cloud) ji bo Yandex.Cloud

  5. Bend - Destûrê dide fermankirina dînamîkî ya PV bi karanîna PVC û SC. Di destpêkê de, ev fonksiyon beşek ji CCM-ê bû, lê ji ber tevliheviya wê ya mezin ew hate veguheztin projeyek veqetandî, Navbera Depokirina Konteyner (CSI). Me ji carekê zêdetir li ser CSI axivî nivîsand û, wek ku berê jî behs kir, heta berdan ajokerê CSI.

Berê, hemî kodên ku bi ewr re têkilî danîbûn di depoya sereke ya Git ya projeya Kubernetes de bû. k8s.io/kubernetes/pkg/cloudprovider/providers, lê wan biryar da ku dev ji vê yekê berdin ji ber nerehetiya xebata bi bingehek kodek mezin. Hemî pêkanînên berê hatine veguheztin depoya veqetandî. Ji bo rehetiya piştgirî û geşepêdana zêdetir, hemû pêkhateyên hevpar jî hatin veguhestin depoya veqetandî.

Mîna CSI, gelek pêşkêşkerên ewr ên mezin berê CCM-yên xwe sêwirandine da ku ewrên li ser Kubernetes bikar bînin. Ger dabînker ne xwediyê CCM be, lê hemî fonksiyonên pêwîst bi API-ê ve têne peyda kirin, wê hingê hûn dikarin CCM-ê bi xwe bicîh bikin.

Ji bo nivîsandina pêkanîna xwe ya CCM-ê, bicîhkirina bes e pêdivî ye ku navbeynkarên Go.

И ev e ya ku me girt.

Реализация

Hûn çawa hatin vê yekê

Me dest bi pêşkeftinê kir (an bêtir, tewra bikar bîne). amade (!) CCM ji bo Yandex.Cloud salek berê.

Lêbelê, di vê pêkanînê de em winda bûn:

  • erêkirin bi navgîniya JWT IAM token;
  • Piştgiriya kontrolkerê karûbarê.

Bi peymana nivîskar (dlisin) di Telegramê de, me yandex-cloud-kontroller-rêveber çewisand û fonksiyonên winda lê zêde kirin.

Taybetmendiyên sereke

Heya nuha, CCM pêwendiyên jêrîn piştgirî dike:

  • Dersên;
  • herêmên;
  • LoadBalancer.

Di pêşerojê de, gava ku Yandex.Cloud bi kapasîteyên pêşkeftî yên VPC-ê dest bi xebatê bike, em ê navbeynkarek zêde bikin .

LoadBalanacer wekî dijwariya sereke

Di destpêkê de, me hewl da, mîna pêkanînên din ên CCM, em cotek çêbikin LoadBalancer и TargetGroup Ji bo her yekî Service bi tîp LoadBalancer. Lêbelê, Yandex.Cloud sînorek balkêş dît: hûn nikarin bikar bînin TargetGroups bi hev re Targets (cot SubnetID - IpAddress).

Nasîna Kubernetes CCM (Rêveberê Kontrolkerê Cloud) ji bo Yandex.Cloud

Ji ber vê yekê, di hundurê CCM-ya hatî afirandin de, kontrolkerek tê destpêkirin, ku gava ku tişt diguhezin Node agahdariya li ser hemî navbeynkarên li ser her makîneyek virtual berhev dike, wan li gorî aîdiyeta wan a hin kesan kom dike NetworkID, diafirîne ji aliyê TargetGroup li ser NetworkID, û di heman demê de têkildariyê jî dişopîne. Dûv re, dema ku tiştek diafirîne Service bi tîp LoadBalanacer em bi tenê pêş-afirandî girêdidin TargetGroup ji nû ve NetworkLoadBalanacer'im.

Meriv çawa dest bi kar dike?

CCM guhertoya 1.15 û bilindtir Kubernetes piştgirî dike. Di komekê de, ji bo ku ew bixebite, ew ala hewce dike --cloud-provider=external hate danîn true ji bo kube-apiserver, kube-kontroller-rêveber, kube-scheduler û hemî kubelets.

Hemî gavên pêwîst ji bo sazkirinê bixwe di nav de têne diyar kirin BIXWÎNE. Sazkirin bi afirandina tiştan li Kubernetes ji manifestan vedigere.

Ji bo ku hûn CCM bikar bînin hûn jî hewce ne:

  • amaje kirin di manîfestoyê de nasnameya pelrêça (folder-id) Yandex.Cloud;
  • hesabê karûbarê ji bo têkiliya bi Yandex.Cloud API re. Di manîfestoyê de Secret pêwîst e mifteyên destûr veguherîne ji hesabê xizmetê. Di belgeyê de şirove kirin, Meriv çawa hesabek karûbarê biafirîne û kilîtan bigire.

Em ê kêfxweş bibin ku hûn nerînên we bistînin û pirsgirêkên nûheke hûn bi ti pirsgirêkan re rû bi rû bimînin!

Encam

Me di van du hefteyên borî de CCM-ya bicîhkirî di pênc komên Kubernetes de bikar tîne û plan dikin ku di meha pêş de hejmara wan bigihîne 20-an. Em niha ji bo sazkirinên mezin û krîtîk ên K8-ê karanîna CCM-ê pêşniyar nakin.

Mîna di rewşa CSI de, em ê kêfxweş bibin ger pêşdebirên Yandex pêşkeftin û piştgirîya vê projeyê bigirin ser milê xwe - em amade ne ku li gorî daxwaza wan depoyê veguhezînin da ku bi karên ku ji me re têkildartir re mijûl bibin.

PS

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment