Entwodwi Kubernetes CCM (Cloud Controller Manager) pou Yandex.Cloud

Entwodwi Kubernetes CCM (Cloud Controller Manager) pou Yandex.Cloud

Nan kontinyasyon ak dènye a Liberasyon chofè CSI pou Yandex.Cloud nou ap pibliye yon lòt pwojè Open Source pou nwaj sa a - Manadjè Cloud Controller. CCM obligatwa pa sèlman pou gwoup la kòm yon antye, men tou pou chofè a CSI tèt li. Detay sou objektif li yo ak kèk karakteristik aplikasyon yo anba koupe a.

Entwodiksyon

Poukisa sa a?

Motif yo ki te pouse nou devlope CCM pou Yandex.Cloud konplètman kowenside ak sa yo deja dekri nan anons CSI chofè yo. Nou kenbe anpil gwoup Kubernetes ki soti nan diferan founisè nwaj, pou ki nou itilize yon sèl zouti. Li aplike anpil konvenyans "kontourne" solisyon yo jere nan founisè sa yo. Wi, nou gen yon ka olye espesifik ak bezwen, men devlopman yo kreye akòz yo ka itil nan lòt itilizatè.

ki sa egzakteman CCM ye?

Tipikman, nou prepare anviwònman ki antoure nou pou gwoup la soti deyò - pou egzanp, lè l sèvi avèk Terraform. Men pafwa gen yon bezwen pou jere anviwònman nwaj bò kote nou soti nan grap. Yo bay posibilite sa a, epi se li ki aplike CCM.

Espesyalman, Manadjè Cloud Controller bay senk kalite prensipal entèraksyon:

  1. Kantite yo - aplike yon relasyon 1:1 ant yon objè ne nan Kubernetes (Node) ak yon machin vityèl nan founisè nwaj la. Pou sa nou:
    • ranpli jaden an spec.providerID nan objè a Node. Pou egzanp, pou OpenStack CCM jaden sa a gen fòma sa a: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Ou ka wè non founisè nwaj la ak UUID inik sèvè a (machin vityèl nan OpenStack) objè a;
    • konpleman nodeInfo nan objè a Node enfòmasyon sou machin vityèl la. Pou egzanp, nou presize kalite egzanp nan AWS;
    • Nou tcheke prezans yon machin vityèl nan nwaj la. Pou egzanp, si yon objè Node antre nan yon eta NotReady, ou ka tcheke si machin nan vityèl egziste nan tout nan founisè a nwaj pa providerID. Si li pa la, efase objè a Node, ki otreman ta rete nan gwoup la pou tout tan;
  2. zòn – mete domèn echèk pou objè a Node, pou ke pwogramè a ka chwazi yon ne pou Pod la dapre rejyon yo ak zòn nan founisè nwaj la;
  3. LoadBalancer - lè w ap kreye yon objè Service ak kalite LoadBalancer kreye yon kalite balanse ki pral dirije trafik soti deyò nan nœuds gwoup yo. Pou egzanp, nan Yandex.Cloud ou ka itilize NetworkLoadBalancer и TargetGroup pou rezon sa yo;
  4. Route – bati yon rezo ant nœuds, paske Dapre kondisyon Kubernetes, chak gous dwe gen pwòp adrès IP li epi yo dwe kapab rive nan nenpòt lòt gous. Pou rezon sa yo, ou ka itilize yon rezo kouvri (VXLAN, GENEVE) oswa mete yon tab routage dirèkteman nan rezo vityèl founisè nwaj la:

    Entwodwi Kubernetes CCM (Cloud Controller Manager) pou Yandex.Cloud

  5. volim – Pèmèt kòmande dinamik PV lè l sèvi avèk PVC ak SC. Okòmansman, fonksyonalite sa a te fè pati CCM, men akòz gwo konpleksite li yo, li te deplase nan yon pwojè separe, Container Storage Interface (CSI). Nou te pale de CSI plis pase yon fwa писали epi, kòm deja mansyone, menm lage chofè CSI.

Anvan sa, tout kòd ki kominike avèk nwaj la te lokalize nan depo prensipal Git pwojè Kubernetes nan. k8s.io/kubernetes/pkg/cloudprovider/providers, men yo deside abandone sa a akòz deranjman nan travay ak yon baz kòd gwo. Tout ansyen aplikasyon yo te deplase nan depo separe. Pou konvenyans nan plis sipò ak devlopman, tout eleman komen yo te deplase tou nan depo separe.

Menm jan ak CSI, anpil gwo founisè nwaj te deja fèt CCM yo pou ogmante nwaj yo sou Kubernetes. Si founisè a pa gen CCM, men tout fonksyon ki nesesè yo disponib atravè API, Lè sa a, ou ka aplike CCM tèt ou.

Pou ekri pwòp aplikasyon ou nan CCM, li se ase aplike obligatwa Go interfaces.

И sa a se sa nou te resevwa.

Aplikasyon

Ki jan ou te rive nan sa a

Nou te kòmanse devlopman (oswa pito, menm itilize) avèk pare(!) CCM pou Yandex.Cloud yon ane de sa.

Sepandan, nan aplikasyon sa a nou te manke:

  • otantifikasyon atravè siy JWT IAM;
  • Sipò kontwolè sèvis.

An akò ak otè a (dlisin) nan Telegram, nou fouchèt yandex-cloud-controller-manager epi ajoute fonksyon ki manke yo.

Karakteristik prensipal la

Kounye a, CCM sipòte koòdone sa yo:

  • Kantite yo;
  • zòn;
  • LoadBalancer.

Nan lavni an, lè Yandex.Cloud kòmanse travay ak kapasite avanse VPC, nou pral ajoute yon koòdone wout.

LoadBalanacer kòm defi prensipal la

Okòmansman, nou te eseye, tankou lòt aplikasyon CCM, pou kreye yon pè LoadBalancer и TargetGroup pou chak Service ak kalite LoadBalancer. Sepandan, Yandex.Cloud dekouvri yon limit enteresan: ou pa ka itilize TargetGroups ak kwaze Targets (pè SubnetID - IpAddress).

Entwodwi Kubernetes CCM (Cloud Controller Manager) pou Yandex.Cloud

Se poutèt sa, andedan CCM a kreye, se yon kontwolè te lanse, ki, lè objè chanje Node kolekte enfòmasyon sou tout koòdone sou chak machin vityèl, gwoup yo dapre sa yo fè pati nan sèten NetworkID, kreye pa TargetGroup sou NetworkID, epi tou kontwole enpòtans. Imedyatman, lè w ap kreye yon objè Service ak kalite LoadBalanacer nou tou senpleman tache yon pre-kreye TargetGroup pou nouvo NetworkLoadBalanacer'mwen.

Ki jan yo kòmanse itilize?

CCM sipòte Kubernetes vèsyon 1.15 ak pi wo. Nan yon grap, pou li travay, li mande pou drapo a --cloud-provider=external te mete nan true pou kube-apiserver, kube-controller-manager, kube-scheduler ak tout kubelets.

Tout etap ki nesesè pou enstalasyon an li menm yo dekri nan README. Enstalasyon se kreye objè nan Kubernetes soti nan manifeste.

Pou itilize CCM w ap bezwen tou:

  • endike nan manifest la idantifyan anyè a (folder-id) Yandex.Cloud;
  • kont sèvis pou kominike avèk Yandex.Cloud API la. Nan manifeste a Secret nesesè transfere kle otorize soti nan kont sèvis la. Nan dokiman an dekri, ki jan yo kreye yon kont sèvis epi jwenn kle.

Nou pral kontan resevwa fidbak ou ak nouvo pwoblèmsi ou rankontre nenpòt pwoblèm!

Rezilta

Nou te itilize CCM aplike a nan senk gwoup Kubernetes pandan de semèn ki sot pase yo epi nou planifye pou elaji nimewo yo a 20 nan mwa k ap vini an. Kounye a nou pa rekòmande itilize CCM pou enstalasyon K8s gwo ak kritik.

Kòm nan ka a nan CSI, nou pral kontan si devlopè Yandex pran sou devlopman ak sipò nan pwojè sa a - nou pare yo transfere repozitwa a sou demann yo nan lòd yo fè fas ak travay ki pi enpòtan pou nou.

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè