Tutvustame Yandex.Cloudi jaoks mõeldud Kubernetes CCM-i (Cloud Controller Manager).

Tutvustame Yandex.Cloudi jaoks mõeldud Kubernetes CCM-i (Cloud Controller Manager).

Jätkuks hiljutisele CSI draiveri väljalase Yandex.Cloudi jaoks avaldame selle pilve jaoks veel ühe avatud lähtekoodiga projekti - Pilvekontrolleri haldur. CCM on vajalik mitte ainult klastri kui terviku, vaid ka CSI draiveri enda jaoks. Üksikasjad selle eesmärgi ja mõnede rakendusfunktsioonide kohta on allpool.

Sissejuhatus

Miks on see?

Motiivid, mis ajendasid meid Yandex.Cloudi jaoks CCM-i välja töötama, langevad täielikult kokku nendega, mida on juba kirjeldatud teadaanne CSI draiverid. Hooldame palju erinevate pilvepakkujate Kubernetese klastreid, mille jaoks kasutame ühte tööriista. See rakendab arvukalt mugavusi nende pakkujate hallatavatest lahendustest mööda minnes. Jah, meil on üsna spetsiifiline juhtum ja vajadused, kuid nende tõttu loodud arendused võivad olla kasulikud teistele kasutajatele.

Mis täpselt on CCM?

Tavaliselt valmistame klastri jaoks ette meid ümbritseva keskkonna väljast - näiteks kasutades Terraformi. Kuid mõnikord on vaja hallata meid ümbritsevat pilvekeskkonda klastrist. See võimalus on ette nähtud ja see on ka ellu viidud CCM.

Täpsemalt pakub Cloud Controller Manager viit peamist interaktsiooni tüüpi:

  1. Juhtumitest – rakendab Kubernetese sõlmeobjekti vahel suhte 1:1 (Node) ja pilveteenuse pakkuja virtuaalne masin. Selleks me:
    • täitke väli spec.providerID objektis Node. Näiteks OpenStack CCM-i jaoks on sellel väljal järgmine vorming: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Näete pilvepakkuja nime ja objekti serveri unikaalset UUID-d (OpenStackis virtuaalmasin);
    • täiendada nodeInfo objektis Node teave virtuaalse masina kohta. Näiteks määrame AWS-is eksemplari tüübi;
    • Kontrollime virtuaalmasina olemasolu pilves. Näiteks kui objekt Node läks olekusse NotReady, saate kontrollida, kas virtuaalne masin on pilveteenuse pakkujas üldse olemas providerID. Kui seda pole, kustutage objekt Node, mis muidu jääks kobarasse igaveseks;
  2. Tsoonid – määrab objekti tõrkedomeeni Node, et planeerija saaks valida Podi jaoks sõlme vastavalt pilveteenuse pakkuja piirkondadele ja tsoonidele;
  3. Koormuse tasakaalustaja – objekti loomisel Service tüübiga LoadBalancer loob omamoodi tasakaalustaja, mis suunab liikluse väljastpoolt klastri sõlmedesse. Näiteks Yandex.Cloudis saate kasutada NetworkLoadBalancer и TargetGroup nendel eesmärkidel;
  4. Marsruut – ehitab sõlmede vahele võrgu, sest Kubernetese nõuete kohaselt peab igal podil olema oma IP-aadress ja see peab suutma jõuda mis tahes teise podini. Nendel eesmärkidel saate kasutada ülekattevõrku (VXLAN, GENEVE) või määrata marsruutimistabeli otse pilveteenuse pakkuja virtuaalses võrgus:

    Tutvustame Yandex.Cloudi jaoks mõeldud Kubernetes CCM-i (Cloud Controller Manager).

  5. maht – Võimaldab PV dünaamilist tellimist PVC ja SC abil. Algselt oli see funktsioon osa CCM-ist, kuid selle suure keerukuse tõttu viidi see üle eraldi projekti Container Storage Interface (CSI) alla. Oleme CSI-st rääkinud rohkem kui korra писали ja nagu juba mainitud, isegi vabastati CSI draiver.

Varem asus kogu pilvega suhtlev kood Kubernetese projekti peamises Giti hoidlas aadressil k8s.io/kubernetes/pkg/cloudprovider/providers, kuid nad otsustasid sellest loobuda suure koodibaasiga töötamise ebamugavuste tõttu. Kõik vanad rakendused on teisaldatud eraldi hoidla. Edasise toe ja arenduse mugavuse huvides viidi ka kõik levinud komponendid üle eraldi hoidla.

Nagu CSI puhul, on ka paljud suured pilveteenuse pakkujad juba loonud oma CCM-id Kubernetese pilvede võimendamiseks. Kui tarnijal pole CCM-i, kuid kõik vajalikud funktsioonid on API kaudu saadaval, saate CCM-i ise juurutada.

CCM-i enda juurutamise kirjutamiseks piisab selle rakendamisest nõutavad Go liidesed.

И see on see, mida me saime.

Реализация

Kuidas sa selleni jõudsid

Alustasime arendamist (õigemini isegi kasutamist). valmis(!) CCM Yandex.Cloudi jaoks aasta tagasi.

Selles teostuses jäi meil aga puudu:

  • autentimine JWT IAM-märgi kaudu;
  • Teeninduskontrolleri tugi.

Kokkuleppel autoriga (dlisin) Telegramis ühendasime yandex-cloud-controller-manager ja lisasime puuduvad funktsioonid.

Peamised omadused

Praegu toetab CCM järgmisi liideseid:

  • Juhtumitest;
  • Tsoonid;
  • Koormuse tasakaalustaja.

Tulevikus, kui Yandex.Cloud hakkab töötama täiustatud VPC võimalustega, lisame liidese Routes.

Peamise väljakutsena LoadBalanacer

Algselt proovisime sarnaselt teiste CCM-i rakendustega luua paari LoadBalancer и TargetGroup kõigi jaoks Service tüübiga LoadBalancer. Yandex.Cloud avastas aga ühe huvitava piirangu: te ei saa kasutada TargetGroups ristuvad Targets (paar SubnetID - IpAddress).

Tutvustame Yandex.Cloudi jaoks mõeldud Kubernetes CCM-i (Cloud Controller Manager).

Seetõttu käivitatakse loodud CCM-is kontroller, mis objektide muutumisel Node kogub teavet iga virtuaalmasina kõigi liideste kohta, rühmitab need vastavalt nende kuuluvusele teatud NetworkID, loob TargetGroup edasi NetworkIDja jälgib ka asjakohasust. Seejärel objekti loomisel Service tüübiga LoadBalanacer me lihtsalt kinnitame eelnevalt loodud TargetGroup uuele NetworkLoadBalanacer'olen.

Kuidas kasutama hakata?

CCM toetab Kubernetese versiooni 1.15 ja uuemaid. Klastris on selle toimimiseks vajalik lipp --cloud-provider=external oli seatud true kube-apiserver, kube-controller-manager, kube-scheduler ja kõik kubeletid.

Kõik installimiseks vajalikud sammud on kirjeldatud artiklis README. Installimine taandub Kubernetesis objektide loomisele manifestide põhjal.

CCM-i kasutamiseks vajate ka:

  • osutama manifestis kataloogi identifikaator (folder-id) Yandex.Cloud;
  • teenusekonto Yandex.Cloud API-ga suhtlemiseks. Manifestis Secret vajalik volitatud võtmete ülekandmine teenusekontolt. Dokumentatsioonis kirjeldatud, kuidas luua teenusekontot ja hankida võtmeid.

Meil on hea meel saada teie tagasisidet ja uued küsimusedkui teil tekib probleeme!

Tulemused

Oleme viimase kahe nädala jooksul kasutanud juurutatud CCM-i viies Kubernetese klastris ja kavatseme järgmisel kuul nende arvu suurendada 20-ni. Me ei soovita praegu kasutada CCM-i suurte ja kriitiliste K8-de installide jaoks.

Nagu CSI puhul, on meil hea meel, kui Yandexi arendajad võtavad selle projekti arendamise ja toe enda kanda – oleme valmis hoidla nende nõudmisel üle andma, et tegeleda meie jaoks olulisemate ülesannetega.

PS

Loe ka meie blogist:

Allikas: www.habr.com

Lisa kommentaar