Predstavljamo Kubernetes CCM (Cloud Controller Manager) za Yandex.Cloud

Predstavljamo Kubernetes CCM (Cloud Controller Manager) za Yandex.Cloud

V nadaljevanju nedavnega Izdaja gonilnika CSI za Yandex.Cloud objavljamo še en odprtokodni projekt za ta oblak - Upravitelj krmilnika v oblaku. CCM ni potreben le za gručo kot celoto, ampak tudi za sam gonilnik CSI. Podrobnosti o njegovem namenu in nekaterih izvedbenih značilnostih so pod rezom.

Predstavitev

Zakaj je to?

Motivi, ki so nas spodbudili k razvoju CCM za Yandex.Cloud, popolnoma sovpadajo z že opisanimi v obvestilo gonilniki CSI. Vzdržujemo številne gruče Kubernetes različnih ponudnikov oblakov, za katere uporabljamo eno samo orodje. Izvaja številne ugodnosti, ki »obidejo« upravljane rešitve teh ponudnikov. Da, imamo precej specifičen primer in potrebe, toda razvoj, ustvarjen zaradi njih, je lahko koristen za druge uporabnike.

Kaj pravzaprav je CCM?

Običajno pripravimo okolje okoli sebe za gručo od zunaj - na primer z uporabo Terraform. Toda včasih je treba upravljati okolje v oblaku okoli nas iz grozda. Ta možnost je zagotovljena in se izvaja CCM.

Natančneje, Cloud Controller Manager ponuja pet glavnih vrst interakcije:

  1. Primeri – izvaja razmerje 1:1 med objektom vozlišča v Kubernetesu (Node) in virtualni stroj v ponudniku oblaka. Za to mi:
    • izpolnite polje spec.providerID v objektu Node. Na primer, za OpenStack CCM ima to polje naslednjo obliko: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Vidite lahko ime ponudnika oblaka in edinstveni UUID strežnika (virtualni stroj v OpenStack) objekta;
    • dopolnjujejo nodeInfo v objektu Node informacije o virtualnem stroju. Na primer, določimo vrsto instance v AWS;
    • Preverimo prisotnost virtualnega stroja v oblaku. Na primer, če predmet Node šel v stanje NotReady, lahko preverite, ali virtualni stroj sploh obstaja v ponudniku oblaka tako, da providerID. Če ga ni, izbrišite predmet Node, ki bi sicer za vedno ostala v gruči;
  2. cone – nastavi domeno napake za objekt Node, tako da lahko razporejevalnik izbere vozlišče za Pod glede na regije in cone v ponudniku oblaka;
  3. LoadBalancer – pri ustvarjanju predmeta Service s tipom LoadBalancer ustvari neke vrste izravnalnik, ki bo usmerjal promet od zunaj do vozlišč gruče. Na primer, v Yandex.Cloudu lahko uporabite NetworkLoadBalancer и TargetGroup za te namene;
  4. Pot – gradi omrežje med vozlišči, ker V skladu z zahtevami Kubernetes mora vsak pod imeti svoj naslov IP in biti sposoben doseči kateri koli drug pod. Za te namene lahko uporabite prekrivno omrežje (VXLAN, GENEVE) ali nastavite usmerjevalno tabelo neposredno v virtualnem omrežju ponudnika oblaka:

    Predstavljamo Kubernetes CCM (Cloud Controller Manager) za Yandex.Cloud

  5. obseg – Omogoča dinamično naročanje PV z uporabo PVC in SC. Sprva je bila ta funkcionalnost del CCM, vendar je bila zaradi velike kompleksnosti prestavljena v ločen projekt Container Storage Interface (CSI). Več kot enkrat smo govorili o CSI писали in kot že rečeno, celo izpuščen CSI voznik.

Prej je bila vsa koda, ki je bila v interakciji z oblakom, v glavnem repozitoriju Git projekta Kubernetes na k8s.io/kubernetes/pkg/cloudprovider/providers, vendar so se odločili, da to opustijo zaradi neprijetnosti pri delu z veliko kodno bazo. Vse stare izvedbe so bile premaknjene v ločeno skladišče. Za udobje nadaljnje podpore in razvoja so bile tudi vse skupne komponente premaknjene v ločeno skladišče.

Tako kot pri CSI je veliko velikih ponudnikov oblakov že oblikovalo svoje CCM za izkoriščanje oblakov na Kubernetesu. Če dobavitelj nima CCM, vendar so vse potrebne funkcije na voljo prek API-ja, potem lahko CCM implementirate sami.

Če želite napisati lastno izvedbo CCM, je dovolj implementacija potrebni vmesniki Go.

И to smo dobili.

Реализация

Kako si prišel do tega

Razvoj (oziroma celo uporabo) smo začeli z pripravljen(!) CCM za Yandex.Cloud pred enim letom.

Vendar pa nam je pri tej izvedbi manjkalo:

  • avtentikacija prek žetona JWT IAM;
  • Podpora za krmilnik storitev.

V dogovoru z avtorjem (dlisin) v Telegramu smo razcepili yandex-cloud-controller-manager in dodali manjkajoče funkcije.

Glavne lastnosti

Trenutno CCM podpira naslednje vmesnike:

  • Primeri;
  • cone;
  • LoadBalancer.

V prihodnosti, ko bo Yandex.Cloud začel delovati z naprednimi zmogljivostmi VPC, bomo dodali vmesnik poti.

LoadBalanacer kot glavni izziv

Na začetku smo poskušali, tako kot druge izvedbe CCM, ustvariti par LoadBalancer и TargetGroup za vse Service s tipom LoadBalancer. Vendar je Yandex.Cloud odkril eno zanimivo omejitev: ne morete uporabljati TargetGroups s sekanjem Targets (par SubnetID - IpAddress).

Predstavljamo Kubernetes CCM (Cloud Controller Manager) za Yandex.Cloud

Zato se znotraj ustvarjenega CCM zažene krmilnik, ki ob spremembi predmetov Node zbira informacije o vseh vmesnikih na posameznem virtualnem stroju, jih združuje glede na pripadnost določenim NetworkID, ustvarja avtor TargetGroup o NetworkID, spremlja pa tudi ustreznost. Naknadno pri ustvarjanju predmeta Service s tipom LoadBalanacer preprosto priložimo vnaprej ustvarjeno TargetGroup na novo NetworkLoadBalanacersem.

Kako ga začeti uporabljati?

CCM podpira različico Kubernetes 1.15 in novejše. V gruči, da deluje, zahteva, da zastavica --cloud-provider=external je bilo nastavljeno na true za kube-apiserver, kube-controller-manager, kube-scheduler in vse kubelets.

Vsi potrebni koraki za samo namestitev so opisani v README. Namestitev se zmanjša na ustvarjanje predmetov v Kubernetesu iz manifestov.

Za uporabo CCM boste potrebovali tudi:

  • navesti v manifestu identifikator imenika (folder-id) Yandex.Cloud;
  • storitveni račun za interakcijo z API-jem Yandex.Cloud. V manifestu Secret morajo prenos avtoriziranih ključev iz storitvenega računa. V dokumentaciji opisano, kako ustvariti servisni račun in pridobiti ključe.

Veseli bomo vaših povratnih informacij in nove številkeče naletite na težave!

Rezultati

V zadnjih dveh tednih uporabljamo implementiran CCM v petih gručah Kubernetes in načrtujemo, da bomo njihovo število v prihodnjem mesecu razširili na 20. Trenutno ne priporočamo uporabe CCM za velike in kritične namestitve K8.

Tako kot v primeru CSI bomo veseli, če razvijalci Yandexa prevzamejo razvoj in podporo tega projekta - na njihovo zahtevo smo pripravljeni prenesti repozitorij, da bi se ukvarjali z nalogami, ki so za nas pomembnejše.

PS

Preberite tudi na našem blogu:

Vir: www.habr.com

Dodaj komentar