Yandex.Cloud үшін Kubernetes CCM (Cloud Controller Manager) таныстыру

Yandex.Cloud үшін Kubernetes CCM (Cloud Controller Manager) таныстыру

Соңғылардың жалғасы CSI драйверінің шығарылымы Yandex.Cloud үшін біз осы бұлтқа арналған басқа ашық бастапқы жобаны жариялап жатырмыз - Бұлтты контроллер менеджері. CCM тұтас кластер үшін ғана емес, сонымен қатар CSI драйверінің өзі үшін де қажет. Оның мақсаты мен кейбір іске асыру мүмкіндіктері туралы мәліметтер қысқаша берілген.

Кіріспе

Бұл не үшін?

Бізді Yandex.Cloud үшін CCM әзірлеуге итермелеген себептер бұрын сипатталғандармен толығымен сәйкес келеді хабарландыру CSI драйверлері. Біз әртүрлі бұлт провайдерлерінен көптеген Kubernetes кластерлерін ұстаймыз, олар үшін біз бір құралды қолданамыз. Ол осы провайдерлердің басқарылатын шешімдерін «айналап» көптеген ыңғайлылықтарды жүзеге асырады. Иә, бізде нақты жағдай мен қажеттіліктер бар, бірақ олардың арқасында жасалған әзірлемелер басқа пайдаланушылар үшін пайдалы болуы мүмкін.

Нақты CCM дегеніміз не?

Әдетте, біз кластерге айналамыздағы ортаны дайындаймыз сырттан - мысалы, Terraform көмегімен. Бірақ кейде айналамыздағы бұлтты ортаны басқару қажеттілігі туындайды кластерден. Бұл мүмкіндік қарастырылған және ол жүзеге асырылуда СКК.

Атап айтқанда, 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. Zones – нысан үшін ақаулық доменін орнатады 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 бөлігі болды, бірақ оның үлкен күрделілігіне байланысты ол бөлек жобаға, Контейнерлерді сақтау интерфейсіне (CSI) ауыстырылды. Біз CSI туралы бірнеше рет айтқанбыз жазды және, бұрын айтылғандай, тіпті босатылды CSI драйвері.

Бұрын бұлтпен әрекеттесетін барлық код Kubernetes жобасының негізгі Git репозиторийінде орналасқан. k8s.io/kubernetes/pkg/cloudprovider/providers, бірақ олар үлкен кодтық базамен жұмыс істеудің қолайсыздығына байланысты бұдан бас тартуды шешті. Барлық ескі енгізулер көшірілді бөлек репозиторий. Әрі қарай қолдау мен дамудың ыңғайлылығы үшін барлық жалпы компоненттер де ауыстырылды бөлек репозиторий.

CSI сияқты, көптеген ірі бұлттық провайдерлер өздерінің CCM-лерін Kubernetes-тегі бұлттарды пайдалану үшін әзірледі. Егер жеткізушіде CCM болмаса, бірақ барлық қажетті функциялар API арқылы қолжетімді болса, онда сіз CCM-ді өзіңіз енгізе аласыз.

Өзіңіздің CCM енгізуіңізді жазу үшін оны іске асыру жеткілікті қажетті Go интерфейстері.

И алғанымыз осы.

Реализация

Бұған қалай келдіңіз

Біз әзірлеуді (дәлірек айтқанда, тіпті пайдалануды) бастадық дайын(!) CCM Yandex.Cloud үшін бір жыл бұрын.

Алайда, бұл іске асыруда бізге жетіспеді:

  • JWT IAM таңбалауышы арқылы аутентификация;
  • Қызмет контроллерін қолдау.

Автормен келісім бойынша (длисин) Telegram-да біз yandex-бұлтты-контроллер-менеджерді аштық және жетіспейтін функцияларды қостық.

Негізгі ерекшеліктері

Қазіргі уақытта CCM келесі интерфейстерді қолдайды:

  • даналары;
  • Zones;
  • 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-аписервер, kube-контроллер-менеджер, kube-жоспарлаушы және барлық kubelet үшін.

Орнатудың өзі үшін барлық қажетті қадамдар бөлімінде сипатталған README. Орнату манифесттерден Kubernetes-те нысандарды жасауға дейін созылады.

CCM пайдалану үшін сізге қажет:

Біз сіздің пікіріңізді алуға қуаныштымыз және жаңа мәселелерқандай да бір қиындықтарға тап болсаңыз!

Нәтижелері

Біз соңғы екі аптада бес Kubernetes кластерінде енгізілген CCM-ді қолдандық және алдағы айда олардың санын 20-ға дейін кеңейтуді жоспарлап отырмыз. Қазіргі уақытта біз үлкен және маңызды K8 қондырғылары үшін CCM пайдалануды ұсынбаймыз.

CSI жағдайындағыдай, Яндекс әзірлеушілері осы жобаны әзірлеуді және қолдауды өз мойнына алса, біз қуанамыз - біз үшін маңыздырақ тапсырмаларды шешу үшін олардың өтініші бойынша репозиторийді беруге дайынбыз.

PS

Біздің блогта да оқыңыз:

Ақпарат көзі: www.habr.com

пікір қалдыру