Yandex.Cloud үчүн Kubernetes CCM (Cloud Controller Manager) менен тааныштыруу

Yandex.Cloud үчүн Kubernetes CCM (Cloud Controller Manager) менен тааныштыруу

Акыркылардын уландысында CSI драйверинин чыгарылышы Yandex.Cloud үчүн биз бул булут үчүн дагы бир Open Source долбоорун жарыялап жатабыз - Cloud Controller Manager. CCM бүтүндөй кластер үчүн гана эмес, ошондой эле CSI драйверинин өзүнө да талап кылынат. Анын максаты жана кээ бир ишке ашыруу өзгөчөлүктөрү тууралуу майда-чүйдөсүнө чейин кыскартылган.

тааныштыруу

Эмнеге бул?

Яндекс.Cloud үчүн CCMди иштеп чыгууга бизди түрткөн мотивдер жогоруда айтылгандар менен толугу менен дал келет кулактандыруу CSI айдоочулары. Биз ар кандай булут провайдерлеринин көптөгөн Kubernetes кластерлерин кармайбыз, алар үчүн биз бир куралды колдонобуз. Бул провайдерлердин башкарылуучу чечимдерин "кылап өтүп" көптөгөн ыңгайлуулуктарды ишке ашырат. Ооба, бизде конкреттүү жагдай жана муктаждыктар бар, бирок алардан улам түзүлгөн иштеп чыгуулар башка колдонуучулар үчүн пайдалуу болушу мүмкүн.

так CCM деген эмне?

Адатта, биз кластер үчүн айланабыздагы чөйрөнү даярдайбыз сырттан - мисалы, Terraform колдонуу. Бирок кээде бизди курчап турган булут чөйрөсүн башкаруу зарылчылыгы бар кластерден. Бул мүмкүнчүлүк берилген жана ал ишке ашырылып жатат CCM.

Тактап айтканда, Cloud Controller Manager өз ара аракеттенүүнүн беш негизги түрүн камсыз кылат:

  1. учурлар – Kubernetesтеги түйүн объектисинин ортосундагы 1:1 мамилени ишке ашырат (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) колдоно аласыз же булут провайдеринин виртуалдык тармагына түз багыттоо таблицасын орното аласыз:

    Yandex.Cloud үчүн Kubernetes CCM (Cloud Controller Manager) менен тааныштыруу

  5. көлөм – ПВХ жана СК колдонуу менен PV динамикалык тартипке мүмкүндүк берет. Башында бул функция CCMдин бир бөлүгү болгон, бирок анын чоң татаалдыгынан улам ал өзүнчө долбоорго, Container Storage Interface (CSI) көчүрүлгөн. Биз CSI жөнүндө бир нече жолу сүйлөшкөнбүз жазган жана, мурда айтылгандай, ал тургай бошотулду CSI айдоочусу.

Мурда булут менен иштешкен бардык коддор Kubernetes долбоорунун негизги Git репозиторийинде жайгашкан. k8s.io/kubernetes/pkg/cloudprovider/providers, бирок алар чоң коддук база менен иштөө ыңгайсыздыгынан улам мындан баш тартууну чечишти. Бардык эски ишке ашыруулар көчүрүлдү өзүнчө репозиторий. Андан ары колдоо жана өнүктүрүү ыңгайлуу болушу үчүн, бардык жалпы компоненттер да көчүрүлдү өзүнчө репозиторий.

CSI сыяктуу эле, көптөгөн ири булут провайдерлери Kubernetesтеги булуттарды колдонуу үчүн CCMлерди иштеп чыгышкан. Эгерде жеткирүүчүдө CCM жок болсо, бирок бардык керектүү функциялар API аркылуу жеткиликтүү болсо, анда сиз CCMди өзүңүз ишке ашыра аласыз.

CCM өзүңүздүн ишке ашырууну жазуу үчүн, аны ишке ашыруу жетиштүү талап кылынган Go интерфейстери.

И бул биз алган нерсе.

Реализация

Кантип бул жерге келдиң

менен иштеп чыгууну (же тагыраак айтканда, колдонууну) баштадык даяр(!) CCM бир жыл мурун Yandex.Cloud үчүн.

Бирок, бул ишке ашырууда биз жетишпей калдык:

  • JWT IAM белгиси аркылуу аутентификация;
  • Кызмат контроллерин колдоо.

Автор менен макулдашып (длисин) Telegramда биз yandex-булут-контроллер-менеджерди бөлүп, жетишпеген функцияларды коштук.

Негизги өзгөчөлүктөр

Учурда, CCM төмөнкү интерфейстерди колдойт:

  • учурлар;
  • зоналар;
  • LoadBalancer.

Келечекте, Yandex.Cloud өнүккөн VPC мүмкүнчүлүктөрү менен иштей баштаганда, биз интерфейсти кошобуз жолдор.

LoadBalanacer негизги көйгөй катары

Башында, биз башка CCM ишке ашыруулар сыяктуу эле, бир жуп түзүүгө аракет кылдык LoadBalancer и TargetGroup ар бирине Service түрү менен LoadBalancer. Бирок, Yandex.Cloud бир кызыктуу чектөөнү тапты: сиз колдоно албайсыз TargetGroups кесилишкен менен Targets (жуп SubnetID - IpAddress).

Yandex.Cloud үчүн Kubernetes CCM (Cloud Controller Manager) менен тааныштыруу

Ошондуктан, түзүлгөн CCM ичинде контроллер ишке киргизилет, ал объекттер өзгөргөндө Node ар бир виртуалдык машинадагы бардык интерфейстер жөнүндө маалыматты чогултат, аларды белгилүү бир нерселерге таандыктыгына жараша топтойт NetworkID, тарабынан түзүлөт TargetGroup боюнча NetworkID, ошондой эле актуалдуулугун көзөмөлдөйт. Кийинчерээк, объект түзүп жатканда Service түрү менен LoadBalanacer биз жөн гана алдын ала түзүлгөн тиркелет TargetGroup жаңыга NetworkLoadBalanacerмен.

Кантип колдонууну баштоо керек?

CCM Kubernetes 1.15 жана андан жогорку версиясын колдойт. Кластерде, ал иштеши үчүн, ал желекти талап кылат --cloud-provider=external коюлду true kube-apiserver, kube-контроллер-менеджер, kube-график жана бардык кубелеттер үчүн.

Орнотуу үчүн бардык зарыл кадамдар сүрөттөлгөн README. Орнотуу манифесттерден Кубернетеде объекттерди түзүүгө чейин жетет.

CCM колдонуу үчүн сизге дагы керек болот:

Биз сиздин пикириңизди алууга кубанычта болобуз жаңы маселелеркандайдыр бир көйгөйгө туш болсоңуз!

натыйжалары

Биз акыркы эки жумада беш Kubernetes кластеринде ишке ашырылган CCMди колдонуп жатабыз жана келерки айда алардын санын 20га чейин кеңейтүүнү пландап жатабыз. Учурда биз CCMди чоң жана маанилүү K8s орнотуулары үчүн колдонууну сунуш кылбайбыз.

CSIдегидей эле, эгер Яндекс иштеп чыгуучулары бул долбоорду иштеп чыгууну жана колдоону колго алышса, биз кубанычта болобуз - биз үчүн актуалдуу болгон милдеттерди чечүү үчүн алардын талабы боюнча репозиторийди өткөрүп берүүгө даярбыз.

PS

Биздин блогдон дагы окуңуз:

Source: www.habr.com

Комментарий кошуу