Kubernetes жүйесінде жұмыс істейтін қолданбаларды әзірлеушілерге арналған құралдар

Kubernetes жүйесінде жұмыс істейтін қолданбаларды әзірлеушілерге арналған құралдар

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

Бұл шолуда коды Kubernetes кластерінің под'аксында жұмыс істейтін бағдарламашының өмірін жеңілдететін кейбір құралдар туралы қысқаша ақпарат берілген.

Қарапайым көмекшілер

Kubectl-дебаг

  • Төменгі жол: контейнеріңізді Pod-қа қосып, онда не болып жатқанын көріңіз.
  • GitHub.
  • GH қысқаша статистикасы: 715 жұлдыз, 54 міндеттеме, 9 салымшы.
  • Тіл: барыңыз.
  • Лицензия: Apache лицензиясы 2.0.

Бұл kubectl плагині процестің аттар кеңістігін басқа контейнерлермен бөлісетін қызықты бөлімнің ішінде қосымша контейнер жасауға мүмкіндік береді. Онда сіз подкасттың жұмысын жөндеуге болады: желіні тексеру, желілік трафикті тыңдау, қызығушылық процесінің ізін жасау және т.б.

Сондай-ақ іске қосу арқылы процесс контейнеріне ауысуға болады chroot /proc/PID/root - бұл манифестте орнатылған контейнерде түбір қабығын алу қажет болғанда өте ыңғайлы болуы мүмкін. securityContext.runAs.

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

Телепрезентация

  • Төменгі жол: қолданбаны компьютерге тасымалдаңыз. Жергілікті түрде әзірлеу және жөндеу.
  • сайтқа; GitHub.
  • GH қысқаша статистикасы: 2131 жұлдыз, 2712 міндеттеме, 33 салымшы.
  • Тіл: Python.
  • Лицензия: Apache лицензиясы 2.0.

Бұл қосымшаның идеясы - жергілікті пайдаланушы компьютеріндегі қолданбасы бар контейнерді іске қосу және кластерден оған және кері барлық трафикті прокси арқылы жіберу. Бұл тәсіл таңдаулы IDE ішіндегі файлдарды жай өңдеу арқылы жергілікті түрде дамытуға мүмкіндік береді: нәтижелер бірден қол жетімді болады.

Жергілікті жұмыс істеудің артықшылығы - өңдеулердің ыңғайлылығы және лезде нәтижелер, қосымшаны әдеттегі жолмен жөндеу мүмкіндігі. Кемшілігі - бұл қосылу жылдамдығын талап етеді, бұл әсіресе жоғары RPS және трафикпен жұмыс істеу керек болғанда байқалады. Сонымен қатар, Telepresence-те Windows жүйесінде дыбыс деңгейін орнатуға қатысты проблемалар бар, бұл осы ОЖ-ға үйренген әзірлеушілер үшін шешуші шектеу болуы мүмкін.

Біз Telepresence қолдану тәжірибемізбен бөлістік осында.

Ksync

  • Төменгі жол: кластердегі контейнермен кодты лезде дерлік синхрондау.
  • GitHub.
  • GH қысқаша статистикасы: 555 жұлдыз, 362 міндеттеме, 11 салымшы.
  • Тіл: барыңыз.
  • Лицензия: Apache лицензиясы 2.0.

Утилита жергілікті каталогтың мазмұнын кластерде жұмыс істейтін контейнер каталогымен синхрондауға мүмкіндік береді. Мұндай құрал негізгі проблемасы жұмыс істейтін контейнерге кодты жеткізу болып табылатын сценарийлік бағдарламалау тілдерін әзірлеушілер үшін өте қолайлы. Ksync бұл бас ауруын жеңілдетуге арналған.

Пәрмен арқылы бір рет инициализацияланған кезде ksync init DaemonSet кластерде жасалады, ол таңдалған контейнердің файлдық жүйесінің күйін бақылау үшін пайдаланылады. Өзінің жергілікті компьютерінде әзірлеуші ​​пәрменді іске қосады ksync watch, ол конфигурацияларды бақылайды және іске қосылады синхрондау, ол файлдарды кластермен тікелей синхрондайды.

Тек ksync-ке нені немен синхрондау керектігін нұсқау ғана қалады. Мысалы, бұл пәрмен:

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

... атты бақылаушыны жасайды myprojectол жапсырмасы бар подкастты іздейді app=backend және жергілікті каталогты синхрондауға тырысыңыз /home/user/myproject/ каталогымен /var/www/myproject/ деп аталатын контейнерде php.

Біздің тәжірибемізден ksync бойынша мәселелер мен ескертпелер:

  • Kubernetes кластер түйіндерінде қолданылуы керек overlay2 Docker үшін сақтау драйвері ретінде. Утилита басқалармен жұмыс істемейді.
  • Windows жүйесін клиенттік операциялық жүйе ретінде пайдаланған кезде файлдық жүйе бақылаушысы дұрыс жұмыс істемеуі мүмкін. Бұл қате үлкен каталогтармен жұмыс істегенде байқалды - кірістірілген файлдар мен каталогтардың үлкен санымен. Біз құрдық өзекті мәселе синхрондау жобасында, бірақ ол бойынша әлі ілгерілеу жоқ (шілденің басынан бері).
  • Файлды пайдаланыңыз .stignore синхрондауды қажет етпейтін жолдарды немесе файл үлгілерін көрсету үшін (мысалы, каталогтар app/cache и .git).
  • Әдепкі бойынша, файлдар өзгерген сайын ksync контейнерді қайта іске қосады. Node.js үшін бұл ыңғайлы, бірақ PHP үшін бұл мүлдем қажет емес. Опкэшті өшіріп, жалаушаны қолданған дұрыс --reload=false.
  • Конфигурацияны әрқашан түзетуге болады $HOME/.ksync/ksync.yaml.

Сквош

  • Төменгі жол: процестерді тікелей кластерде түзету.
  • GitHub.
  • GH қысқаша статистикасы: 1154 жұлдыз, 279 міндеттеме, 23 қатысушы.
  • Тіл: барыңыз.
  • Лицензия: Apache лицензиясы 2.0.

Бұл құрал процестерді тікелей подкасттарда жөндеуге арналған. Утилита қарапайым және интерактивті түрде қажетті отладчикті таңдауға мүмкіндік береді (төменде қараңыз) және аттар кеңістігі + pod, оның процесіне сіз араласуыңыз керек. Қазіргі уақытта қолдау көрсетіледі:

  • delve - Go қолданбалары үшін;
  • GDB - мақсатты қашықтан + портты бағыттау арқылы;
  • Java қолданбаларын жөндеу үшін JDWP портын қайта жіберу.

IDE жағында қолдау тек VScode жүйесінде қол жетімді ( кеңейту), дегенмен, ағымдағы (2019) жылға арналған жоспарларға Eclipse және Intellij кіреді.

Процестерді жөндеу үшін Squash кластер түйіндерінде артықшылықты контейнерді іске қосады, сондықтан алдымен мүмкіндіктермен танысу керек. қауіпсіз режим қауіпсіздік мәселелерін болдырмау үшін.

Толық шешімдер

Ауыр артиллерияға көшейік - әзірлеушілердің көптеген қажеттіліктерін дереу қанағаттандыруға арналған «үлкен» жобалар.

NB: Бұл тізімде, әрине, біздің Open Source утилитасы үшін орын бар верф (бұрынғы атауы дапп ретінде белгілі). Дегенмен, біз бұл туралы бірнеше рет жазып, айтқан болатынбыз, сондықтан оны шолуға қоспауды шештік. Оның мүмкіндіктерімен көбірек танысқысы келетіндерге баяндаманы оқуды/тыңдауды ұсынамыз»werf - бұл Kubernetes-тегі CI/CD құралы«.

DevSpace

  • Төменгі жол: Кубернетесте жұмыс істегісі келетін, бірақ оның джунглиіне терең бойлағысы келмейтіндер үшін.
  • GitHub.
  • GH қысқаша статистикасы: 630 жұлдыз, 1912 міндеттеме, 13 қатысушы.
  • Тіл: барыңыз.
  • Лицензия: Apache лицензиясы 2.0.

Топты дамыту үшін басқарылатын кластерлерді Kubernetes көмегімен қамтамасыз ететін аттас компанияның шешімі. Утилита коммерциялық кластерлер үшін жасалған, бірақ басқалармен тамаша жұмыс істейді.

Пәрменді орындау кезінде devspace init жоба каталогында сізге ұсынылады (интерактивті):

  • жұмыс істейтін Kubernetes кластерін таңдаңыз,
  • бар пайдаланыңыз Dockerfile (немесе жаңасын жасау) оның негізінде контейнер жасау үшін,
  • контейнер кескіндерін сақтауға арналған репозиторийді таңдау және т.б.

Барлық осы дайындық қадамдарынан кейін пәрменді іске қосу арқылы әзірлеуді бастауға болады devspace dev. Ол контейнерді құрастырады, оны репозиторийге жүктеп салады, орналастыруды кластерге шығарады және портты қайта жіберуді және контейнерді жергілікті каталогпен синхрондауды бастайды.

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

Соңында, команда devspace deploy қолданбаны және онымен байланысты инфрақұрылымды кластерге шығарады, содан кейін барлығы жауынгерлік режимде жұмыс істей бастайды.

Барлық жоба конфигурациясы файлда сақталады devspace.yaml. Әзірлеу ортасының параметрлерінен басқа, сіз ондағы стандартты Кубернетес манифесттеріне ұқсас, тек айтарлықтай жеңілдетілген инфрақұрылымның сипаттамасын таба аласыз.

Kubernetes жүйесінде жұмыс істейтін қолданбаларды әзірлеушілерге арналған құралдар
DevSpace-пен жұмыс жасаудың архитектурасы және негізгі кезеңдері

Бұған қоса, жобаға алдын ала анықталған компонентті (мысалы, MySQL ДҚБЖ) немесе Helm диаграммасын қосу оңай. Толығырақ бөлімде оқыңыз құжаттама - бұл күрделі емес.

Скаффолд

  • сайтқа; GitHub.
  • GH қысқаша статистикасы: 7423 жұлдыз, 4173 міндеттеме, 136 салымшы.
  • Тіл: барыңыз.
  • Лицензия: Apache лицензиясы 2.0.

Google ұсынған бұл утилита коды қандай да бір түрде Kubernetes кластерінде жұмыс істейтін әзірлеушінің барлық қажеттіліктерін қанағаттандырады деп мәлімдейді. Оны пайдалануды бастау devspace сияқты оңай емес: интерактивтілік жоқ, тілді анықтау және автоматты түрде жасау Dockerfile олар сізге мұнда ұсынбайды.

Дегенмен, егер бұл сізді қорқытпаса, Skaffold сізге не істеуге мүмкіндік береді:

  • Бастапқы код өзгерістерін қадағалаңыз.
  • Құрастыруды қажет етпесе, оны подвод контейнерімен синхрондаңыз.
  • Егер тіл түсіндірілсе, коды бар контейнерлерді жинаңыз немесе артефактілерді құрастырыңыз және оларды контейнерлерге салыңыз.
  • Алынған кескіндер көмегімен автоматты түрде тексеріледі контейнер-құрылым-сынау.
  • Суреттерді Docker тізіліміне белгілеу және жүктеп салу.
  • kubectl, Helm немесе kustomize арқылы қолданбаны кластерде орналастырыңыз.
  • Портты қайта жіберуді орындаңыз.
  • Java, Node.js, Python тілдерінде жазылған қолданбаларды жөндеу.

Әртүрлі нұсқалардағы жұмыс процесі файлда декларациялық түрде сипатталған skaffold.yaml. Жоба үшін құрастыру және орналастыру кезеңдерін ішінара немесе толығымен өзгертуге болатын бірнеше профильдерді де анықтауға болады. Мысалы, әзірлеу үшін әзірлеушіге ыңғайлы негізгі кескінді көрсетіңіз, ал сахналау және өндіру үшін - минималды (+ пайдалану securityContext контейнерлер немесе қолданба орналастырылатын кластерді қайта анықтаңыз).

Докер контейнерлерін жергілікті немесе қашықтан салуға болады: in Google Cloud Build немесе кластерде пайдаланады Канико. Bazel және Jib Maven/Gradle-ге де қолдау көрсетіледі. Белгілеу үшін Skaffold көптеген стратегияларды қолдайды: git commit хэш, күн/уақыт, sha256-көздердің сомасы және т.б.

Контейнерлерді сынау мүмкіндігін бөлек атап өткен жөн. Жоғарыда аталған контейнер-құрылым-сынақ құрылымы келесі тексеру әдістерін ұсынады:

  • Шығу күйлерін бақылайтын контейнер контекстіндегі пәрмендерді орындау және пәрменнің мәтіндік шығысын тексеру.
  • Контейнердегі файлдардың болуын тексеру және көрсетілген атрибуттарды сәйкестендіру.
  • Тұрақты өрнектерді пайдаланып файл мазмұнын басқару.
  • Кескіннің метадеректерін тексеру (ENV, ENTRYPOINT, VOLUMES және т.б.).
  • Лицензия үйлесімділігін тексеру.

Контейнермен файлдарды синхрондау ең оңтайлы түрде жүзеге асырылмайды: Skaffold жай ғана дереккөздермен мұрағатты жасайды, оны көшіреді және контейнерден шығарады (тар орнатылуы керек). Сондықтан, егер сіздің негізгі міндетіңіз кодты синхрондау болса, мамандандырылған шешімге (ksync) қараған дұрыс.

Kubernetes жүйесінде жұмыс істейтін қолданбаларды әзірлеушілерге арналған құралдар
Skaffold операциясының негізгі кезеңдері

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

бақ

  • сайтқа; GitHub.
  • GH қысқаша статистикасы: 1063 жұлдыз, 1927 міндеттеме, 17 қатысушы.
  • Тіл: TypeScript (жобаны бірнеше құрамдастарға бөлу жоспарлануда, олардың кейбіреулері Go-да болады, сонымен қатар TypeScript/JavaScript және Go-да қондырмаларды жасау үшін SDK жасау).
  • Лицензия: Apache лицензиясы 2.0.

Skaffold сияқты, Garden K8s кластеріне қолданба кодын жеткізу процестерін автоматтандыруға бағытталған. Ол үшін алдымен YAML файлында жоба құрылымын сипаттау керек, содан кейін пәрменді орындау керек garden dev. Ол барлық сиқырды жасайды:

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

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

Жоба модулі контейнер, Maven контейнері, Helm диаграммасы, манифест болуы мүмкін. kubectl apply немесе тіпті OpenFaaS функциясы. Сонымен қатар, модульдердің кез келгенін қашықтағы Git репозиторийінен алуға болады. Модуль қызметтерді, тапсырмаларды және сынақтарды анықтауы немесе анықтамауы мүмкін. Қызметтер мен тапсырмалардың тәуелділіктері болуы мүмкін, осылайша сіз белгілі бір қызметтің орналастыру ретін анықтай аласыз және тапсырмалар мен сынақтарды іске қосуды ұйымдастыра аласыз.

Garden пайдаланушыға әдемі бақылау тақтасын ұсынады (қазіргі уақытта эксперименттік күй), онда жоба графигі көрсетіледі: құрамдас бөліктер, құрастыру реті, тапсырмалар мен сынақтардың орындалуы, олардың байланыстары мен тәуелділіктері. Браузерде сіз барлық жоба құрамдастарының журналдарын көре аласыз және белгілі бір құрамдас HTTP арқылы не шығаратынын тексере аласыз (әрине, ол үшін кіру ресурсы жарияланған болса).

Kubernetes жүйесінде жұмыс істейтін қолданбаларды әзірлеушілерге арналған құралдар
Бақшаға арналған панель

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

қорытынды

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

PS

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

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

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