Kubernetes: ашық бастапқы және жеткізушіге тән

Сәлем, менің атым Дмитрий Краснов. Бес жылдан астам уақыт бойы мен Kubernetes кластерлерін басқарып, күрделі микросервис архитектураларын құрастырып келемін. Осы жылдың басында біз Containerum негізіндегі Kubernetes кластерлерін басқару қызметін іске қостық. Осы мүмкіндікті пайдалана отырып, мен сізге Kubernetes деген не екенін және жеткізушімен интеграцияның ашық көзден қалай ерекшеленетінін айтып беремін.

Бастау үшін, бұл не Kubernetes. Бұл көптеген хосттардағы контейнерлерді басқаруға арналған жүйе. Айтпақшы, грек тілінен ол «ұшқыш» немесе «штурман» деп аударылады. Бастапқыда Google әзірлеген, содан кейін әлемдегі жетекші әзірлеушілерді, түпкі пайдаланушыларды және контейнерлік технология жеткізушілерін біріктіретін халықаралық коммерциялық емес ұйым болып табылатын Cloud Native Computing Foundation-қа технологиялық үлес ретінде сыйға тартты.

Kubernetes: ашық бастапқы және жеткізушіге тән

Контейнерлердің көп санын басқарыңыз

Енді бұл қандай ыдыстар екенін анықтайық. Бұл бүкіл ортасы бар қолданба - негізінен бағдарлама тәуелді кітапханалар. Мұның бәрі мұрағаттарда жинақталған және операциялық жүйеге қарамастан іске қосуға болатын кескін түрінде ұсынылған, сыналған және т.б. Бірақ мәселе бар - көптеген хосттардағы контейнерлерді басқару өте қиын. Сондықтан Кубернетес құрылды.

Контейнер кескіні қолданбаны және оның тәуелділіктерін білдіреді. Қолданба, оның тәуелділіктері және ОЖ файлдық жүйесінің кескіні кескіннің қабаттар деп аталатын әртүрлі бөліктерінде орналасқан. Қабаттарды әртүрлі контейнерлер үшін қайта пайдалануға болады. Мысалы, компаниядағы барлық қолданбалар Ubuntu негізгі қабатын пайдалануы мүмкін. Контейнерлерді іске қосу кезінде хостта бір негізгі қабаттың бірнеше көшірмелерін сақтаудың қажеті жоқ. Бұл кескінді сақтауды және жеткізуді оңтайландыруға мүмкіндік береді.

Контейнерден қолданбаны іске қосқымыз келгенде, қажетті қабаттар бір-бірінің үстіне қойылады және қабаттасатын файлдық жүйе қалыптасады. Үстіне жазу қабаты қойылады, ол контейнер тоқтаған кезде жойылады. Бұл контейнер іске қосылғанда, қолданбаның әрқашан өзгертуге болмайтын бірдей ортасы болатынын қамтамасыз етеді. Бұл әртүрлі негізгі операциялық жүйелерде ортаның қайталану мүмкіндігіне кепілдік береді. Ubuntu немесе CentOS болсын, орта әрқашан бірдей болады. Сонымен қатар, контейнер Linux ядросына енгізілген механизмдер арқылы хосттан оқшауланады. Контейнердегі қолданбалар файлдарды, хост процестерін және көрші контейнерлерді көрмейді. Бағдарламаларды негізгі ОЖ-дан бұл оқшаулау қауіпсіздіктің қосымша деңгейін қамтамасыз етеді.

Хосттағы контейнерлерді басқаруға арналған көптеген құралдар бар. Олардың ең танымалы - Docker. Ол контейнерлердің толық өмірлік циклін қамтамасыз етуге мүмкіндік береді. Дегенмен, ол тек бір хостта жұмыс істейді. Бірнеше хосттар арқылы контейнерлерді басқару қажет болса, Docker инженерлердің өмірін тозаққа айналдыра алады. Сондықтан Кубернетес құрылды.

Kubernetes-ке деген сұраныс нақты бір нысан ретінде бірнеше хосттардағы контейнерлер топтарын басқару мүмкіндігіне байланысты. Жүйенің танымалдығы DevOps немесе әзірлеу операцияларын құру мүмкіндігін береді, онда Kubernetes дәл осы DevOps процестерін іске қосу үшін пайдаланылады.

Kubernetes: ашық бастапқы және жеткізушіге тән

Сурет 1. Кубернетес жұмысының схемалық көрінісі

Толық автоматтандыру

DevOps негізінен әзірлеу процесін автоматтандыру болып табылады. Бір сөзбен айтқанда, әзірлеушілер репозиторийге жүктелетін кодты жазады. Содан кейін бұл кодты автоматты түрде барлық кітапханалары бар контейнерге жинауға, сынақтан өткізуге және келесі кезеңге - Сахнаға, содан кейін бірден Өндіріске шығаруға болады.

Kubernetes-пен бірге DevOps бұл процесті автоматтандыруға мүмкіндік береді, осылайша ол әзірлеушілердің өздерінің қатысуынсыз болады. Осыған байланысты құрастыру айтарлықтай жылдамырақ, өйткені әзірлеуші ​​​​оны компьютерде жасаудың қажеті жоқ - ол жай ғана код бөлігін жазады, кодты репозиторийге итереді, содан кейін құбыр іске қосылады, ол процесті қамтуы мүмкін. құру, сынау және шығару. Және бұл әрбір міндеттемеде болады, сондықтан тестілеу үздіксіз жүреді.

Сонымен қатар, контейнерді пайдалану осы бағдарламаның бүкіл ортасы дәл сынақтан өткен пішінде өндіріске шығарылатынына сенімді болуға мүмкіндік береді. Яғни, «тестте кейбір нұсқалар болды, басқалары өндірісте болды, бірақ біз оларды орнатқан кезде бәрі құлап кетті» сияқты проблемалар болмайды. Ал бүгіннен бастап бізде микросервис архитектурасына тенденция бар, бір үлкен қосымшаның орнына жүздеген кішкентайлар болса, оларды қолмен басқару үшін қызметкерлердің үлкен штаты қажет болады. Сондықтан біз Kubernetes пайдаланамыз.

Артықшылықтар, артықшылықтар, артықшылықтар


Егер Kubernetes-тің платформа ретіндегі артықшылықтары туралы айтатын болсақ, онда оның микросервис архитектурасын басқару тұрғысынан айтарлықтай артықшылықтары бар.

  • Бірнеше көшірмелерді басқару. Ең бастысы - контейнерлерді бірнеше хосттар арқылы басқару. Ең бастысы, контейнерлердегі бірнеше қолданба көшірмелерін бір нысан ретінде басқарыңыз. Осының арқасында инженерлер әрбір жеке контейнерге алаңдамайды. Контейнерлердің бірі бұзылса, Кубернетес мұны көріп, қайта іске қосады.
  • Кластерлік желі. Kubernetes сонымен қатар өзінің мекенжай кеңістігі бар кластерлік желіге ие. Осының арқасында әрбір подводтың өз мекен-жайы бар. Субпод контейнерлер тікелей іске қосылатын кластердің минималды құрылымдық бірлігі ретінде түсініледі. Сонымен қатар, Kubernetes-те жүк теңестіруші мен Service Discovery біріктіретін функционалдылық бар. Бұл IP мекенжайын қолмен басқарудан құтылуға және бұл тапсырманы Kubernetes-ке беруге мүмкіндік береді. Автоматты денсаулық тексерулері ақаулықтарды анықтауға және трафикті жұмыс бағандарына қайта бағыттауға көмектеседі.
  • Конфигурацияны басқару. Қолданбалардың көп санын басқарған кезде қолданба конфигурациясын басқару қиынға соғады. Осы мақсатта Kubernetes-те арнайы ConfigMap ресурстары бар. Олар конфигурацияларды орталықтандырып сақтауға және қолданбаларды іске қосқан кезде оларды подкасттарға шығаруға мүмкіндік береді. Бұл механизм кем дегенде он немесе жүз қолданбалы көшірмедегі конфигурацияның сәйкестігіне кепілдік беруге мүмкіндік береді.
  • Тұрақты көлемдер. Контейнерлер табиғи түрде өзгермейді және контейнер тоқтатылған кезде файлдық жүйеге жазылған барлық деректер жойылады. Бірақ кейбір қолданбалар деректерді тікелей дискіде сақтайды. Бұл мәселені шешу үшін Kubernetes-те дискіні сақтауды басқару функциясы бар - Тұрақты томдар. Бұл механизм деректер үшін сыртқы жадты пайдаланады және тұрақты сақтауды, блокты немесе файлды контейнерлерге тасымалдай алады. Бұл шешім деректерді жұмысшылардан бөлек сақтауға мүмкіндік береді, бұл дәл сол жұмысшылар бұзылған жағдайда оларды сақтайды.
  • Жүктеме балансы. Kubernetes-те біз Deployment, StatefulSet және т. Олар мінсіз емес және кез келген уақытта құлап кетуі мүмкін. Кубернетес мұны көреді және ішкі трафикті басқа көшірмелерге қайта бағыттайды. Бірақ сырттан келетін трафикпен не істеу керек? Трафикті жұмысшылардың біріне бағыттасаңыз, ол бұзылса, қызмет қолжетімсіз болады. Бұл мәселені шешу үшін Kubernetes-те Load Balancer сияқты қызметтер бар. Олар кластердегі барлық жұмысшылар үшін сыртқы бұлтты теңдестіргішті автоматты түрде конфигурациялауға арналған. Бұл сыртқы теңгеруші сыртқы трафикті жұмысшыларға бағыттайды және олардың күйін өзі бақылайды. Бір немесе бірнеше жұмысшы қолжетімсіз болса, трафик басқаларға қайта бағытталады. Бұл Kubernetes көмегімен жоғары қолжетімді қызметтерді жасауға мүмкіндік береді.

Kubernetes микросервис архитектурасын іске қосқанда жақсы жұмыс істейді. Жүйені классикалық архитектураға енгізуге болады, бірақ бұл мағынасыз. Егер қолданба бірнеше репликада жұмыс істей алмаса, онда оның қандай айырмашылығы бар - Kubernetes-те ме, жоқ па?

Ашық бастапқы Kubernetes


Ашық бастапқы Kubernetes - бұл тамаша нәрсе: мен оны орнаттым және ол жұмыс істейді. Сіз оны өзіңіздің аппараттық серверлеріңізде, жеке инфрақұрылымыңызда орналастыра аласыз, барлық қолданбалар іске қосылатын шеберлер мен жұмысшыларды орната аласыз. Ең бастысы, мұның бәрі тегін. Дегенмен, нюанстар бар.

  • Біріншісі - осының бәрін орналастырып, қолдайтын әкімшілер мен инженерлердің білімі мен тәжірибесіне сұраныс. Клиент кластердегі әрекеттің толық еркіндігін алғандықтан, кластердің жұмысына өзі жауапты болады. Және бұл жерде бәрін бұзу өте оңай.
  • Екіншісі – интеграцияның жоқтығы. Егер сіз Kubernetes-ті танымал виртуалдандыру платформасынсыз іске қоссаңыз, бағдарламаның барлық артықшылықтарын ала алмайсыз. Тұрақты көлемдер және жүктемені теңестіру қызметтерін пайдалану сияқты.

Kubernetes: ашық бастапқы және жеткізушіге тән

Сурет 2. k8s архитектурасы

Сатушыдан Кубернетес


Бұлттық провайдермен интеграция екі опцияны ұсынады:

  • Біріншіден, адам жай ғана «кластерді жасау» түймесін басып, конфигурацияланған және пайдалануға дайын кластерді ала алады.
  • Екіншіден, жеткізушінің өзі кластерді орнатады және бұлтпен интеграцияны орнатады.

Бұл жерде қалай болады. Кластерді іске қосатын инженер оған қанша жұмысшы қажет екенін және қандай параметрлермен (мысалы, әрқайсысында 5 процессор, 10 ГБ жедел жады және айталық, 16 ГБ дискі бар 100 жұмысшы) нақтылайды. Осыдан кейін ол бұрыннан қалыптасқан кластерге қол жеткізе алады. Бұл жағдайда жүктеме іске қосылған жұмысшылар толығымен клиентке беріледі, бірақ бүкіл басқару жоспары жеткізушінің жауапкершілігінде қалады (егер қызмет басқарылатын қызмет үлгісіне сәйкес ұсынылса).

Дегенмен, бұл схеманың кемшіліктері бар. Басқару ұшағы сатушыда қалатындықтан, жеткізуші клиентке толық рұқсат бермейді және бұл Kubernetes-пен жұмыс істеу икемділігін төмендетеді. Кейде клиент Kubernetes-ке белгілі бір функционалдылықты қосқысы келетіні болады, мысалы, LDAP арқылы аутентификация, бірақ басқару жазықтығы конфигурациясы бұған мүмкіндік бермейді.

Kubernetes: ашық бастапқы және жеткізушіге тән

Сурет 3. Бұлттық провайдердегі Kubernetes кластерінің мысалы

Не таңдау керек: ашық бастапқы код немесе сатушы


Сонымен, Kubernetes ашық бастапқы көзі ме немесе сатушыға тән бе? Егер біз ашық бастапқы Kubernetes алсақ, онда пайдаланушы онымен қалағанын жасайды. Бірақ өзіңізді аяққа атып тастауға үлкен мүмкіндік бар. Сатушымен бұл қиынырақ, өйткені бәрі компания үшін ойластырылған және конфигурацияланған. Ашық бастапқы Kubernetes-тің ең үлкен кемшілігі - мамандарға қойылатын талап. Жеткізу опциясы арқылы компания бұл бас ауруынан құтылады, бірақ ол өз мамандарына немесе сатушыға төлеу туралы шешім қабылдауы керек.

Kubernetes: ашық бастапқы және жеткізушіге тән

Kubernetes: ашық бастапқы және жеткізушіге тән

Жақсы жақтары анық, кемшіліктері де белгілі. Бір нәрсе тұрақты: Kubernetes көптеген контейнерлерді басқаруды автоматтандыру арқылы көптеген мәселелерді шешеді. Қайсысын таңдау керек, ашық бастапқы код немесе сатушы - әркім өз шешімін қабылдайды.

Мақаланы дайындаған Дмитрий Краснов, #CloudMTS провайдері Containerum қызметінің жетекші сәулетшісі.

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

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