Yandex.Cloud uchun Kubernetes CCM (Cloud Controller Manager) bilan tanishtiramiz

Yandex.Cloud uchun Kubernetes CCM (Cloud Controller Manager) bilan tanishtiramiz

Yaqinda davom etgan holda CSI haydovchi versiyasi Yandex.Cloud uchun biz ushbu bulut uchun yana bir Ochiq manba loyihasini nashr etmoqdamiz - Bulut boshqaruvchisi menejeri. CCM nafaqat klaster uchun, balki CSI drayverining o'zi uchun ham talab qilinadi. Uning maqsadi va ba'zi amalga oshirish xususiyatlari haqida batafsil ma'lumotlar kesma ostida.

kirish

Nima uchun bu?

Bizni Yandex.Cloud uchun CCMni ishlab chiqishga undagan sabablar yuqorida tavsiflanganlarga to'liq mos keladi e'lon CSI haydovchilar. Biz turli xil bulut provayderlarining ko'plab Kubernetes klasterlarini saqlaymiz, ular uchun biz bitta vositadan foydalanamiz. U ushbu provayderlarning boshqariladigan yechimlarini "aylanib o'tib" ko'plab qulayliklarni amalga oshiradi. Ha, bizda juda aniq holat va ehtiyojlar bor, ammo ular tufayli yaratilgan ishlanmalar boshqa foydalanuvchilar uchun foydali bo'lishi mumkin.

CCM aniq nima?

Odatda, biz klaster uchun atrofimizdagi muhitni tayyorlaymiz tashqaridan - masalan, Terraform yordamida. Ammo ba'zida atrofimizdagi bulutli muhitni boshqarish zarurati paydo bo'ladi klasterdan. Bu imkoniyat taqdim etilgan va u amalga oshirilmoqda CCM.

Xususan, Cloud Controller Manager o'zaro ta'sirning beshta asosiy turini taqdim etadi:

  1. Voqealar - Kubernetesdagi tugun ob'ekti o'rtasida 1: 1 munosabatini amalga oshiradi (Node) va bulutli provayderda virtual mashina. Buning uchun biz:
    • maydonni to'ldiring spec.providerID ob'ektda Node. Masalan, OpenStack CCM uchun bu maydon quyidagi formatga ega: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Ob'ektning bulutli provayder nomini va serverning noyob UUID-ni (OpenStack-dagi virtual mashina) ko'rishingiz mumkin;
    • to'ldiruvchi nodeInfo ob'ektda Node virtual mashina haqida ma'lumot. Masalan, biz AWS da misol turini belgilaymiz;
    • Biz bulutda virtual mashina mavjudligini tekshiramiz. Masalan, agar ob'ekt Node holatga kirdi NotReady, virtual mashinaning bulut provayderida umuman mavjudligini tekshirishingiz mumkin providerID. Agar u mavjud bo'lmasa, ob'ektni o'chiring Node, aks holda klasterda abadiy qoladi;
  2. zonalari - ob'ekt uchun muvaffaqiyatsizlik domenini o'rnatadi Node, shunday qilib rejalashtiruvchi bulut provayderidagi hududlar va zonalarga muvofiq Pod uchun tugunni tanlashi mumkin;
  3. LoadBalancer - ob'ektni yaratishda Service turi bilan LoadBalancer trafikni tashqaridan klaster tugunlariga yo'naltiradigan o'ziga xos muvozanatlashtiruvchini yaratadi. Misol uchun, Yandex.Cloud-da siz foydalanishingiz mumkin NetworkLoadBalancer и TargetGroup ushbu maqsadlar uchun;
  4. yo'l – tugunlar orasidagi tarmoqni quradi, chunki Kubernetes talablariga ko'ra, har bir pod o'z IP-manziliga ega bo'lishi va boshqa podkastlarga kirish imkoniyatiga ega bo'lishi kerak. Ushbu maqsadlar uchun siz ustki tarmoqdan (VXLAN, GENEVE) foydalanishingiz yoki to'g'ridan-to'g'ri bulutli provayderning virtual tarmog'ida marshrutlash jadvalini o'rnatishingiz mumkin:

    Yandex.Cloud uchun Kubernetes CCM (Cloud Controller Manager) bilan tanishtiramiz

  5. ovoz – PVX va SC yordamida PVni dinamik tartibga solish imkonini beradi. Dastlab, bu funksiya CCM ning bir qismi edi, lekin uning katta murakkabligi tufayli u alohida loyihaga ko'chirildi, Konteynerlarni saqlash interfeysi (CSI). Biz CSI haqida bir necha bor gaplashdik yozgan va, allaqachon aytib o'tilganidek, hatto ozod qilindi CSI haydovchi.

Ilgari, bulut bilan o'zaro ta'sir qiluvchi barcha kodlar Kubernetes loyihasining asosiy Git omborida joylashgan edi. k8s.io/kubernetes/pkg/cloudprovider/providers, lekin ular katta kod bazasi bilan ishlashning noqulayligi tufayli bundan voz kechishga qaror qilishdi. Barcha eski ilovalar ko'chirildi alohida ombor. Keyingi qo'llab-quvvatlash va rivojlanish qulayligi uchun barcha umumiy komponentlar ham ko'chirildi alohida ombor.

CSI-da bo'lgani kabi, ko'plab yirik bulut provayderlari allaqachon Kubernetes-da bulutlardan foydalanish uchun o'zlarining CCM-larini ishlab chiqdilar. Agar etkazib beruvchida CCM bo'lmasa, lekin barcha kerakli funktsiyalar API orqali mavjud bo'lsa, siz CCMni o'zingiz amalga oshirishingiz mumkin.

O'zingizning CCM dasturini yozish uchun uni amalga oshirish kifoya zarur Go interfeyslari.

И bu biz olgan narsa.

Реализация

Qanday qilib bu erga keldingiz

Biz bilan rivojlanishni boshladik (aniqrog'i, hatto foydalanish). tayyor(!) CCM Yandex.Cloud uchun bir yil oldin.

Biroq, ushbu amaliyotda biz etishmayotgan edik:

  • JWT IAM tokeni orqali autentifikatsiya;
  • Xizmat nazoratchisini qo'llab-quvvatlash.

Muallif bilan kelishilgan holda (dlisin) Telegram-da biz yandex-bulut-nazoratchi-menejerni ajratdik va etishmayotgan funksiyalarni qo'shdik.

Asosiy xususiyatlar

Hozirgi vaqtda CCM quyidagi interfeyslarni qo'llab-quvvatlaydi:

  • Voqealar;
  • zonalari;
  • LoadBalancer.

Kelajakda, Yandex.Cloud ilg'or VPC imkoniyatlari bilan ishlay boshlaganida, biz interfeys qo'shamiz Yo'nalishlar.

LoadBalanacer asosiy muammo sifatida

Dastlab, biz boshqa CCM ilovalari singari, bir juft yaratishga harakat qildik LoadBalancer и TargetGroup har biriga Service turi bilan LoadBalancer. Biroq, Yandex.Cloud bitta qiziqarli cheklovni topdi: siz foydalana olmaysiz TargetGroups kesishgan bilan Targets (juft SubnetID - IpAddress).

Yandex.Cloud uchun Kubernetes CCM (Cloud Controller Manager) bilan tanishtiramiz

Shuning uchun yaratilgan CCM ichida ob'ektlar o'zgarganda boshqaruvchi ishga tushiriladi Node Har bir virtual mashinadagi barcha interfeyslar haqida ma'lumot to'playdi, ularni ma'lum biriga tegishliligiga qarab guruhlaydi NetworkID, tomonidan yaratadi TargetGroup haqida NetworkID, shuningdek, dolzarbligini nazorat qiladi. Keyinchalik, ob'ektni yaratishda Service turi bilan LoadBalanacer biz shunchaki oldindan yaratilganni biriktiramiz TargetGroup yangisiga NetworkLoadBalanacermen.

Uni ishlatishni qanday boshlash kerak?

CCM Kubernetes 1.15 va undan yuqori versiyalarini qo'llab-quvvatlaydi. Klasterda ishlashi uchun u bayroqni talab qiladi --cloud-provider=external belgilangan edi true kube-apiserver, kube-nazoratchi-menejer, kube-rejalashtiruvchi va barcha kubeletlar uchun.

O'rnatishning o'zi uchun barcha kerakli qadamlar tasvirlangan README. O'rnatish manifestlardan Kubernetesda ob'ektlarni yaratishga to'g'ri keladi.

CCM dan foydalanish uchun sizga ham kerak bo'ladi:

  • belgilang manifestda katalog identifikatori (folder-id) Yandex.Cloud;
  • Yandex.Cloud API bilan ishlash uchun xizmat hisobi. Manifestda Secret kerak vakolatli kalitlarni uzatish xizmat hisobidan. Hujjatlarda tasvirlangan, xizmat qaydnomasini qanday yaratish va kalitlarni olish.

Biz sizning fikr-mulohazalaringizni qabul qilishdan xursand bo'lamiz va yangi masalalarhar qanday muammoga duch kelsangiz!

natijalar

Biz so'nggi ikki hafta ichida beshta Kubernetes klasterida joriy qilingan CCM dan foydalandik va kelgusi oyda ularning sonini 20 tagacha kengaytirishni rejalashtirmoqdamiz. Hozirda biz katta va muhim K8s o'rnatish uchun CCM dan foydalanishni tavsiya etmaymiz.

CSI misolida bo'lgani kabi, agar Yandex ishlab chiquvchilari ushbu loyihani ishlab chiqish va qo'llab-quvvatlashni o'z zimmalariga olishsa, biz xursand bo'lamiz - biz uchun ko'proq mos keladigan vazifalarni hal qilish uchun ularning iltimosiga binoan omborni o'tkazishga tayyormiz.

PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish