Ngawanohkeun Kubernetes CCM (Cloud Controller Manager) pikeun Yandex.Cloud

Ngawanohkeun Kubernetes CCM (Cloud Controller Manager) pikeun Yandex.Cloud

Dina neraskeun ka panganyarna release supir CSI pikeun Yandex.Cloud kami nyebarkeun proyék Open Source anu sanés pikeun awan ieu - Awan Controller Manajer. CCM diperlukeun henteu ngan pikeun klaster sakabéhna, tapi ogé pikeun supir CSI sorangan. Rincian ngeunaan tujuanana sareng sababaraha fitur palaksanaan aya dina cut.

perkenalan

Naha ieu?

Motif anu ngajurung kami pikeun ngembangkeun CCM pikeun Yandex.Cloud lengkep saluyu sareng anu parantos dijelaskeun dina pangumuman supir CSI. Kami ngajaga seueur klaster Kubernetes ti panyadia awan anu béda, anu kami nganggo alat tunggal. Éta ngalaksanakeun seueur kemudahan "ngaliwatan" solusi anu diurus ku panyadia ieu. Leres, urang gaduh pasualan sareng kabutuhan anu khusus, tapi pamekaran anu diciptakeun kusabab éta tiasa mangpaat pikeun pangguna anu sanés.

Naon sabenerna CCM?

Ilaharna, urang nyiapkeun lingkungan sabudeureun urang pikeun klaster ti luar - contona, ngagunakeun Terraform. Tapi kadang aya kabutuhan pikeun ngatur lingkungan awan di sabudeureun urang ti klaster. Kamungkinan ieu disayogikeun, sareng éta anu dilaksanakeun TLC.

Husus, Cloud Controller Manager nyayogikeun lima jinis interaksi utama:

  1. instansi – nerapkeun hubungan 1:1 antara hiji objek titik dina Kubernetes (Node) sareng mesin virtual dina panyadia awan. Pikeun ieu kami:
    • eusian sawah spec.providerID dina objék Node. Contona, pikeun OpenStack CCM widang ieu boga format kieu: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Anjeun tiasa ningali nami panyadia awan sareng UUID unik tina server (mesin virtual di OpenStack) obyék;
    • pelengkap nodeInfo dina objék Node inpormasi ngeunaan mesin virtual. Contona, urang tangtukeun tipe conto di AWS;
    • Urang pariksa ayana mesin virtual dina awan. Contona, upami hiji obyék Node indit kana kaayaan NotReady, Anjeun tiasa pariksa naha mesin virtual aya pisan dina panyadia awan ku providerID. Lamun teu aya, pupus obyék Node, nu disebutkeun bakal tetep dina klaster salamina;
  2. Wayah – Nyetél domain gagal pikeun obyék Node, supados scheduler tiasa milih titik pikeun Pod numutkeun wilayah sareng zona dina panyadia awan;
  3. LoadBalancer – nalika nyieun hiji obyék Service kalawan tipe LoadBalancer nyiptakeun jenis balancer anu bakal ngarahkeun lalulintas ti luar ka titik klaster. Contona, dina Yandex.Cloud anjeun tiasa nganggo NetworkLoadBalancer и TargetGroup pikeun tujuan ieu;
  4. rute – ngawangun jaringan antara titik, sabab Numutkeun sarat Kubernetes, unggal pod kedah gaduh alamat IP sorangan sareng tiasa ngahontal pod anu sanés. Pikeun tujuan ieu, anjeun tiasa nganggo jaringan overlay (VXLAN, GENEVE) atanapi nyetél tabel routing langsung dina jaringan virtual panyadia awan:

    Ngawanohkeun Kubernetes CCM (Cloud Controller Manager) pikeun Yandex.Cloud

  5. jilid - Ngidinan pesenan dinamis PV nganggo PVC sareng SC. Mimitina, fungsionalitas ieu bagian tina CCM, tapi alatan pajeulitna hébat na dipindahkeun ka proyék misah, Wadahna Panyimpenan Interface (CSI). Kami parantos nyarios CSI langkung ti sakali wrote jeung, sakumaha geus disebutkeun, malah dileupaskeun supir CSI.

Sateuacanna, sadaya kode anu berinteraksi sareng awan aya dina gudang Git utama proyék Kubernetes di k8s.io/kubernetes/pkg/cloudprovider/providers, Tapi aranjeunna mutuskeun pikeun abandon ieu alatan kasulitan gawé bareng basa kode badag. Kabéh palaksanaan heubeul geus dipindahkeun ka gudang misah. Pikeun genah pangrojong sareng pamekaran salajengna, sadaya komponén umum ogé dipindahkeun ka gudang misah.

Sapertos CSI, seueur panyadia awan ageung parantos mendesain CCMna pikeun ngungkit awan dina Kubernetes. Mun supplier nu teu boga CCM, tapi sagala fungsi perlu sadia via API, teras anjeun tiasa nerapkeun CCM sorangan.

Pikeun nulis palaksanaan sorangan CCM, éta cukup pikeun nerapkeun diperlukeun interfaces Go.

И ieu naon urang meunang.

Реализация

Kumaha anjeun datang ka ieu

Urang mimitian ngembangkeun (atawa rada, malah make) kalawan siap (!) CCM pikeun Yandex.Cloud sataun katukang.

Nanging, dina palaksanaan ieu kami leungit:

  • auténtikasi via token JWT IAM;
  • Service controller rojongan.

Satuju sareng pangarang (dlisin) dina Telegram, kami forked yandex-cloud-controller-manager sarta ditambahkeun fungsi leungit.

Fitur utama

Ayeuna, CCM ngadukung antarmuka ieu:

  • instansi;
  • Wayah;
  • LoadBalancer.

Dina mangsa nu bakal datang, nalika Yandex.Cloud dimimitian gawé bareng kamampuhan VPC canggih, urang bakal nambahan hiji panganteur ruteu.

LoadBalanacer salaku tantangan utama

Mimitina, urang diusahakeun, kawas implementations CCM séjén, nyieun sapasang LoadBalancer и TargetGroup keur dulur Service kalawan tipe LoadBalancer. Nanging, Yandex.Cloud mendakan hiji watesan anu pikaresepeun: anjeun teu tiasa nganggo TargetGroups kalawan intersecting Targets (pasangan SubnetID - IpAddress).

Ngawanohkeun Kubernetes CCM (Cloud Controller Manager) pikeun Yandex.Cloud

Ku alatan éta, di jero CCM dijieun, hiji controller dibuka, nu, nalika objék robah Node ngumpulkeun informasi ngeunaan sagala interfaces on unggal mesin virtual, grup aranjeunna nurutkeun milik maranéhna pikeun tangtu NetworkID, nyiptakeun ku TargetGroup dina NetworkID, sarta ogé ngawas relevansi. Salajengna, nalika nyieun hiji obyék Service kalawan tipe LoadBalanacer urang ngan saukur ngagantelkeun hiji tos dijieun TargetGroup ka anyar NetworkLoadBalanacer'mah.

Kumaha ngamimitian ngagunakeun?

CCM ngarojong Kubernetes versi 1.15 jeung nu leuwih luhur. Dina klaster, pikeun eta dianggo, merlukeun bandéra nu --cloud-provider=external ieu disetel ka true pikeun kube-apiserver, kube-controller-manager, kube-scheduler sareng sadaya kubelets.

Sadaya léngkah anu dipikabutuh pikeun instalasi sorangan dijelaskeun dina README. Instalasi bisul handap pikeun nyieun objék dina Kubernetes tina manifests.

Pikeun ngagunakeun CCM anjeun ogé peryogi:

  • nunjuk kaluar dina manifest identifier diréktori (folder-id) Yandex.Cloud;
  • akun jasa pikeun berinteraksi sareng API Yandex.Cloud. Dina manifesto Secret anu diperyogikeun mindahkeun konci otorisasi ti akun jasa. Dina dokuméntasi digambarkeun, kumaha carana nyieun hiji akun jasa tur meunangkeun konci.

Urang bakal bungah pikeun nampa eupan balik anjeun sarta isu anyarupami anjeun mendakan masalah!

hasil

Kami parantos ngagunakeun CCM anu dilaksanakeun dina lima klaster Kubernetes dina dua minggu katukang sareng ngarencanakeun pikeun dilegakeun jumlahna ka 20 dina bulan anu bakal datang. Urang ayeuna teu nyarankeun make CCM pikeun pamasangan K8s badag sarta kritis.

Sapertos dina kasus CSI, urang bakal bungah upami pamekar Yandex nyandak pamekaran sareng dukungan proyék ieu - kami siap nransferkeun gudang dina pamundutna pikeun nganyahokeun tugas anu langkung relevan pikeun kami.

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar