Муаррифии Kubernetes CCM (Менеҷери Абри назораткунанда) барои Yandex.Cloud

Муаррифии Kubernetes CCM (Менеҷери Абри назораткунанда) барои Yandex.Cloud

Дар идомаи охирин Варақаи ронандаи CSI барои Yandex.Cloud мо лоиҳаи дигари кушодаасосро барои ин абр нашр мекунем - Менеҷери назорати абрӣ. CCM на танҳо барои кластер дар маҷмӯъ, балки барои худи драйвери CSI низ талаб карда мешавад. Тафсилот дар бораи ҳадафи он ва баъзе хусусиятҳои татбиқ дар зер оварда шудаанд.

Муқаддима

Чаро ин аст?

Ҳадафҳое, ки моро водор карданд, ки CCM-ро барои Yandex.Cloud таҳия кунем, бо онҳое, ки дар боло тавсиф шудаанд, комилан мувофиқат мекунанд эълон Ронандагон CSI. Мо бисёр кластерҳои Kubernetes-ро аз провайдерҳои абрии гуногун нигоҳ медорем, ки барои онҳо як абзорро истифода мебарем. Он бароҳатиҳои зиёдеро амалӣ мекунад, ки аз қарорҳои идорашавандаи ин провайдерҳо "бурда" мешавад. Бале, мо як ҳолат ва ниёзҳои мушаххас дорем, аммо таҳияҳое, ки дар натиҷаи онҳо сохта шудаанд, метавонанд барои корбарони дигар муфид бошанд.

CCM маҳз чист?

Одатан, мо муҳити атрофро барои кластер омода мекунем дар берун - масалан, бо истифода аз Terraform. Аммо баъзан зарурати идора кардани муҳити абрии атрофи мо вуҷуд дорад аз кластер. Ин имконият фарохам оварда шудааст ва махз дар амал татбик карда мешавад CCM.

Махсусан, Менеҷери Cloud Controller панҷ намуди асосии мутақобиларо таъмин мекунад:

  1. Ҳолатҳое - муносибати 1:1 байни объекти гиреҳро дар Kubernetes амалӣ мекунад (Node) ва мошини виртуалӣ дар провайдери абр. Барои ин мо:
    • майдонро пур кунед spec.providerID дар объект Node. Масалан, барои OpenStack CCM ин майдон дорои формати зерин аст: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. Шумо метавонед номи провайдери абрӣ ва UUID-и беназири серверро (мошини виртуалӣ дар OpenStack) объектро бинед;
    • мукаммалкунанда nodeInfo дар объект Node маълумот дар бораи мошини виртуалӣ. Масалан, мо навъи мисолро дар AWS муайян мекунем;
    • Мо мавҷудияти мошини виртуалиро дар абр тафтиш мекунем. Масалан, агар объект Node ба давлат даромад NotReady, шумо метавонед тафтиш кунед, ки оё мошини маҷозӣ дар ҳама провайдери абр вуҷуд дорад providerID. Агар он вуҷуд надошта бошад, объектро нест кунед Node, ки дар акси ҳол то абад дар кластер боқӣ мемонад;
  2. минтақаҳои – домени нокомиро барои объект муқаррар мекунад Node, ба тавре ки банақшагир метавонад гиреҳро барои Pod мувофиқи минтақаҳо ва минтақаҳо дар провайдери абр интихоб кунад;
  3. LoadBalancer - ҳангоми сохтани объект Service бо навъи LoadBalancer як навъ мувозинат эҷод мекунад, ки трафикро аз берун ба гиреҳҳои кластер равона мекунад. Масалан, дар Yandex.Cloud шумо метавонед истифода баред NetworkLoadBalancer и TargetGroup барои ин мақсадҳо;
  4. Роуминг – байни гиреҳҳо шабака месозад, зеро Мувофиқи талаботи Kubernetes, ҳар як подк бояд суроғаи IP-и худро дошта бошад ва тавонад ба ҳама гуна подкоҳи дигар дастрас бошад. Барои ин мақсадҳо, шумо метавонед як шабакаи такрорӣ (VXLAN, GENEVE) истифода баред ё бевосита дар шабакаи виртуалии провайдери абр ҷадвали масир муқаррар кунед:

    Муаррифии Kubernetes CCM (Менеҷери Абри назораткунанда) барои Yandex.Cloud

  5. ҷилди - Имкон медиҳад фармоиши динамикии PV бо истифода аз PVC ва SC. Дар аввал, ин функсия як қисми CCM буд, аммо аз сабаби мураккабии бузург он ба лоиҳаи алоҳида, Интерфейси нигоҳдории контейнер (CSI) гузаронида шуд. Мо дар бораи CSI на як бор гап задаем навиштааст ва, чунон ки аллакай зикр гардид, ҳатто озод карда шуд Ронандаи CSI.

Пештар, ҳама кодҳое, ки бо абр кор мекунанд, дар анбори асосии Git лоиҳаи Kubernetes дар k8s.io/kubernetes/pkg/cloudprovider/providers, аммо онҳо тасмим гирифтанд, ки аз сабаби нороҳатии кор бо пойгоҳи калони кодҳо аз ин даст кашанд. Ҳамаи татбиқи кӯҳна ба кӯчонида шуданд анбори алоҳида. Барои роҳати дастгирӣ ва рушди минбаъда, ҳама ҷузъҳои умумӣ низ ба он кӯчонида шуданд анбори алоҳида.

Мисли CSI, бисёр провайдерҳои бузурги абрӣ аллакай CCM-ҳои худро тарҳрезӣ кардаанд, то абрҳоро дар Kubernetes истифода баранд. Агар таъминкунанда CCM надошта бошад, аммо тамоми функсияҳои зарурӣ тавассути API дастрас бошанд, шумо метавонед CCM-ро худатон татбиқ кунед.

Барои навиштани амалисозии CCM худ, татбиқ кардан кифоя аст интерфейсҳои Go лозим аст.

И ин аст он чизе ки мо гирифтем.

Реализация

Чӣ тавр шумо ба ин ҷо омадед

Мо рушдро оғоз кардем (ё дурусттараш, ҳатто истифода бурдан) бо тайёр(!) CCM барои Yandex.Cloud як сол пеш.

Бо вуҷуди ин, дар ин татбиқ мо аз даст додем:

  • аутентификатсия тавассути аломати JWT IAM;
  • Дастгирии хидматрасонии контроллер.

Дар мувофиқа бо муаллиф (длисин) дар Telegram, мо yandex-cloud-controller-meneger-ро ҷудо кардем ва функсияҳои гумшударо илова кардем.

Хусусиятҳои асосӣ

Дар айни замон, CCM интерфейсҳои зеринро дастгирӣ мекунад:

  • Ҳолатҳое;
  • минтақаҳои;
  • LoadBalancer.

Дар оянда, вақте ки Yandex.Cloud бо имкониятҳои пешрафтаи VPC кор мекунад, мо интерфейсро илова мекунем Роумингҳо.

LoadBalanacer ҳамчун мушкилоти асосӣ

Дар аввал, мо кӯшиш кардем, мисли дигар татбиқи CCM, як ҷуфтро эҷод кунем LoadBalancer и TargetGroup барои ҳар як Service бо навъи LoadBalancer. Аммо, Yandex.Cloud як маҳдудияти ҷолибро кашф кард: шумо наметавонед истифода баред TargetGroups бо буриши Targets (ҷуфт SubnetID - IpAddress).

Муаррифии Kubernetes CCM (Менеҷери Абри назораткунанда) барои Yandex.Cloud

Аз ин рӯ, дар дохили CCM сохташуда контроллер ба кор андохта мешавад, ки ҳангоми тағир додани объектҳо Node Маълумотро дар бораи ҳама интерфейсҳо дар ҳар як мошини виртуалӣ ҷамъоварӣ мекунад, онҳоро мувофиқи мансубияти онҳо гурӯҳбандӣ мекунад NetworkID, аз ҷониби TargetGroup ба NetworkID, инчунин мутобик будани онро назорат мекунад. Минбаъд, ҳангоми сохтани объект Service бо навъи LoadBalanacer мо танҳо як қаблан сохташударо замима мекунем TargetGroup ба нав NetworkLoadBalanacerҳастам.

Чӣ тавр истифода бурданро оғоз кардан лозим аст?

CCM версияи Kubernetes 1.15 ва навтарро дастгирӣ мекунад. Дар кластер барои кор кардан он парчамро талаб мекунад --cloud-provider=external гузошта шуда буд true барои kube-apiserver, kube-controller-менеҷер, kube-scheduler ва ҳама кубелетҳо.

Ҳамаи қадамҳои зарурӣ барои худи насб дар зер тавсиф шудаанд README. Насбкунӣ барои сохтани объектҳо дар Кубернетес аз манифестҳо анҷом меёбад.

Барои истифодаи CCM ба шумо инчунин лозим аст:

Мо аз гирифтани фикру мулоҳизаҳои шумо шод хоҳем буд ва масъалахои навагар шумо бо ягон мушкилот рӯ ба рӯ шавед!

Натиҷаҳо

Мо дар тӯли ду ҳафтаи охир CCM-и амалӣшударо дар панҷ кластери Kubernetes истифода мебарем ва нақша дорем, ки шумораи онҳоро дар моҳи оянда ба 20 афзоиш диҳем. Мо дар айни замон истифодаи CCM-ро барои насбҳои калон ва муҳими K8s тавсия намедиҳем.

Тавре ки дар мавриди CSI, мо хурсанд хоҳем шуд, агар таҳиягарони Яндекс таҳия ва дастгирии ин лоиҳаро ба ӯҳда гиранд - мо омодаем, ки бо дархости онҳо анборро интиқол диҳем, то вазифаҳоеро, ки ба мо бештар мувофиқанд, ҳал кунем.

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ