Дар идомаи охирин
Муқаддима
Чаро ин аст?
Ҳадафҳое, ки моро водор карданд, ки CCM-ро барои Yandex.Cloud таҳия кунем, бо онҳое, ки дар боло тавсиф шудаанд, комилан мувофиқат мекунанд
CCM маҳз чист?
Одатан, мо муҳити атрофро барои кластер омода мекунем дар берун - масалан, бо истифода аз Terraform. Аммо баъзан зарурати идора кардани муҳити абрии атрофи мо вуҷуд дорад аз кластер. Ин имконият фарохам оварда шудааст ва махз дар амал татбик карда мешавад
Махсусан, Менеҷери Cloud Controller панҷ намуди асосии мутақобиларо таъмин мекунад:
- Ҳолатҳое - муносибати 1:1 байни объекти гиреҳро дар Kubernetes амалӣ мекунад (
Node
) ва мошини виртуалӣ дар провайдери абр. Барои ин мо:- майдонро пур кунед
spec.providerID
дар объектNode
. Масалан, барои OpenStack CCM ин майдон дорои формати зерин аст:openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0
. Шумо метавонед номи провайдери абрӣ ва UUID-и беназири серверро (мошини виртуалӣ дар OpenStack) объектро бинед; - мукаммалкунанда
nodeInfo
дар объектNode
маълумот дар бораи мошини виртуалӣ. Масалан, мо навъи мисолро дар AWS муайян мекунем; - Мо мавҷудияти мошини виртуалиро дар абр тафтиш мекунем. Масалан, агар объект
Node
ба давлат даромадNotReady
, шумо метавонед тафтиш кунед, ки оё мошини маҷозӣ дар ҳама провайдери абр вуҷуд дорадproviderID
. Агар он вуҷуд надошта бошад, объектро нест кунедNode
, ки дар акси ҳол то абад дар кластер боқӣ мемонад;
- майдонро пур кунед
- минтақаҳои – домени нокомиро барои объект муқаррар мекунад
Node
, ба тавре ки банақшагир метавонад гиреҳро барои Pod мувофиқи минтақаҳо ва минтақаҳо дар провайдери абр интихоб кунад; - LoadBalancer - ҳангоми сохтани объект
Service
бо навъиLoadBalancer
як навъ мувозинат эҷод мекунад, ки трафикро аз берун ба гиреҳҳои кластер равона мекунад. Масалан, дар Yandex.Cloud шумо метавонед истифода баредNetworkLoadBalancer
иTargetGroup
барои ин мақсадҳо; - Роуминг – байни гиреҳҳо шабака месозад, зеро Мувофиқи талаботи Kubernetes, ҳар як подк бояд суроғаи IP-и худро дошта бошад ва тавонад ба ҳама гуна подкоҳи дигар дастрас бошад. Барои ин мақсадҳо, шумо метавонед як шабакаи такрорӣ (VXLAN, GENEVE) истифода баред ё бевосита дар шабакаи виртуалии провайдери абр ҷадвали масир муқаррар кунед:
- ҷилди - Имкон медиҳад фармоиши динамикии PV бо истифода аз PVC ва SC. Дар аввал, ин функсия як қисми CCM буд, аммо аз сабаби мураккабии бузург он ба лоиҳаи алоҳида, Интерфейси нигоҳдории контейнер (CSI) гузаронида шуд. Мо дар бораи CSI на як бор гап задаем
навиштааст ва, чунон ки аллакай зикр гардид, ҳаттоозод карда шуд Ронандаи CSI.
Пештар, ҳама кодҳое, ки бо абр кор мекунанд, дар анбори асосии Git лоиҳаи Kubernetes дар k8s.io/kubernetes/pkg/cloudprovider/providers
, аммо онҳо тасмим гирифтанд, ки аз сабаби нороҳатии кор бо пойгоҳи калони кодҳо аз ин даст кашанд. Ҳамаи татбиқи кӯҳна ба кӯчонида шуданд
Мисли CSI, бисёр провайдерҳои бузурги абрӣ аллакай CCM-ҳои худро тарҳрезӣ кардаанд, то абрҳоро дар Kubernetes истифода баранд. Агар таъминкунанда CCM надошта бошад, аммо тамоми функсияҳои зарурӣ тавассути API дастрас бошанд, шумо метавонед CCM-ро худатон татбиқ кунед.
Барои навиштани амалисозии CCM худ, татбиқ кардан кифоя аст
И
Реализация
Чӣ тавр шумо ба ин ҷо омадед
Мо рушдро оғоз кардем (ё дурусттараш, ҳатто истифода бурдан) бо
Бо вуҷуди ин, дар ин татбиқ мо аз даст додем:
- аутентификатсия тавассути аломати JWT IAM;
- Дастгирии хидматрасонии контроллер.
Дар мувофиқа бо муаллиф (длисин) дар Telegram, мо yandex-cloud-controller-meneger-ро ҷудо кардем ва функсияҳои гумшударо илова кардем.
Хусусиятҳои асосӣ
Дар айни замон, CCM интерфейсҳои зеринро дастгирӣ мекунад:
- Ҳолатҳое;
- минтақаҳои;
- LoadBalancer.
Дар оянда, вақте ки Yandex.Cloud бо имкониятҳои пешрафтаи VPC кор мекунад, мо интерфейсро илова мекунем Роумингҳо.
LoadBalanacer ҳамчун мушкилоти асосӣ
Дар аввал, мо кӯшиш кардем, мисли дигар татбиқи CCM, як ҷуфтро эҷод кунем LoadBalancer
и TargetGroup
барои ҳар як Service
бо навъи LoadBalancer
. Аммо, Yandex.Cloud як маҳдудияти ҷолибро кашф кард: шумо наметавонед истифода баред TargetGroups
бо буриши Targets
(ҷуфт SubnetID
- IpAddress
).
Аз ин рӯ, дар дохили CCM сохташуда контроллер ба кор андохта мешавад, ки ҳангоми тағир додани объектҳо Node
Маълумотро дар бораи ҳама интерфейсҳо дар ҳар як мошини виртуалӣ ҷамъоварӣ мекунад, онҳоро мувофиқи мансубияти онҳо гурӯҳбандӣ мекунад NetworkID
, аз ҷониби TargetGroup
ба NetworkID
, инчунин мутобик будани онро назорат мекунад. Минбаъд, ҳангоми сохтани объект Service
бо навъи LoadBalanacer
мо танҳо як қаблан сохташударо замима мекунем TargetGroup
ба нав NetworkLoadBalanacer
ҳастам.
Чӣ тавр истифода бурданро оғоз кардан лозим аст?
CCM версияи Kubernetes 1.15 ва навтарро дастгирӣ мекунад. Дар кластер барои кор кардан он парчамро талаб мекунад --cloud-provider=external
гузошта шуда буд true
барои kube-apiserver, kube-controller-менеҷер, kube-scheduler ва ҳама кубелетҳо.
Ҳамаи қадамҳои зарурӣ барои худи насб дар зер тавсиф шудаанд
Барои истифодаи CCM ба шумо инчунин лозим аст:
-
ишора кунед дар манифест идентификатори директория (folder-id
) Yandex.Cloud; - ҳисоби хидматрасонӣ барои ҳамкорӣ бо API Yandex.Cloud. Дар манифест
Secret
зарур астинтиқоли калидҳои ваколатдор аз ҳисоби хидмат. Дар хуччатхотавсиф карда шудааст , чӣ тавр эҷод кардани ҳисоби хидматӣ ва гирифтани калидҳо.
Мо аз гирифтани фикру мулоҳизаҳои шумо шод хоҳем буд ва
Натиҷаҳо
Мо дар тӯли ду ҳафтаи охир CCM-и амалӣшударо дар панҷ кластери Kubernetes истифода мебарем ва нақша дорем, ки шумораи онҳоро дар моҳи оянда ба 20 афзоиш диҳем. Мо дар айни замон истифодаи CCM-ро барои насбҳои калон ва муҳими K8s тавсия намедиҳем.
Тавре ки дар мавриди CSI, мо хурсанд хоҳем шуд, агар таҳиягарони Яндекс таҳия ва дастгирии ин лоиҳаро ба ӯҳда гиранд - мо омодаем, ки бо дархости онҳо анборро интиқол диҳем, то вазифаҳоеро, ки ба мо бештар мувофиқанд, ҳал кунем.
PS
Инчунин дар блоги мо хонед:
- «
Таҷрибаи мо дар таҳияи драйвери CSI дар Kubernetes барои Yandex.Cloud »; - «
Оё омода кардани кластери Kubernetes осон ва қулай аст? Эълони addon-operator »; - «
Васеъ ва пурра кардани Kubernetes (баррасӣ ва гузориши видеоӣ) ".
Манбаъ: will.com