Kubernetesте иштеген тиркемелерди иштеп чыгуучулар үчүн куралдар

Kubernetesте иштеген тиркемелерди иштеп чыгуучулар үчүн куралдар

Операцияларга заманбап мамиле көптөгөн актуалдуу бизнес көйгөйлөрүн чечет. Контейнерлер жана оркестрлер ар кандай татаалдыктагы долбоорлордун масштабын жеңилдетет, жаңы версияларды чыгарууну жөнөкөйлөштүрөт, аларды ишенимдүүрөөк кылат, бирок ошол эле учурда иштеп чыгуучулар үчүн кошумча көйгөйлөрдү жаратат. Программист, биринчи кезекте, анын коду жөнүндө кам көрөт: архитектура, сапат, аткаруу, көрктүүлүк - ал Kubernetesте кантип иштей тургандыгы жана минималдуу өзгөртүүлөрдү киргизгенден кийин аны кантип сынап, оңдоого эмес. Ошондуктан, Kubernetes үчүн инструменттердин жигердүү иштелип жаткандыгы табигый нерсе, ал тургай эң "архаикалык" иштеп чыгуучулардын көйгөйлөрүн чечүүгө жардам берип, негизги нерсеге көңүл бурууга мүмкүндүк берет.

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

Жөнөкөй жардамчылар

Kubectl-дебаг

  • Жыйынтык: контейнериңизди Podго кошуп, анда эмне болуп жатканын көрүңүз.
  • GitHub.
  • Кыскача GH статистикасы: 715 жылдыз, 54 милдеттенме, 9 салым кошуучу.
  • Тил: Go.
  • Лицензия: Apache License 2.0.

kubectl үчүн бул плагин сизге процесстин аталыш мейкиндигин башка контейнерлер менен бөлүшө турган кызыккан поддондун ичинде кошумча контейнер түзүүгө мүмкүндүк берет. Анда сиз поддондун иштешин оңдой аласыз: тармакты текшериңиз, тармак трафигин угуңуз, кызыккан процессти ж.б.у.с.

Сиз ошондой эле иштетүү менен процесстик контейнерге өтсөңүз болот chroot /proc/PID/root - бул манифестте белгиленген контейнерге тамыр кабыгын алуу керек болгондо абдан ыңгайлуу болушу мүмкүн. securityContext.runAs.

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

телекөрсөтүү

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

Бул кошумчанын идеясы - жергиликтүү колдонуучунун компьютеринде тиркеме менен контейнерди ишке киргизүү жана кластерден ага жана артка бардык трафикти проксиге өткөрүү. Бул ыкма сүйүктүү IDEдеги файлдарды жөн гана түзөтүү аркылуу локалдык жактан өнүктүрүүгө мүмкүндүк берет: натыйжалар дароо жеткиликтүү болот.

Локалдуу иштетүүнүн артыкчылыктары - түзөтүүлөрдүн ыңгайлуулугу жана тез натыйжалар, тиркемени кадимки жол менен оңдоо мүмкүнчүлүгү. Кемчилиги - бул туташуу ылдамдыгын талап кылат, бул сиз RPS жана трафиктин кыйла жогору болгон тиркеме менен иштөөдө өзгөчө байкалат. Кошумчалай кетсек, Telepresenceде Windows'тун көлөмүн орнотууда көйгөйлөр бар, бул бул ОСке көнүп калган иштеп чыгуучулар үчүн чечүүчү чектөө болушу мүмкүн.

Биз буга чейин Telepresence колдонуу тажрыйбабыз менен бөлүштүк бул жерде.

Ksync

  • Жыйынтык: кластердеги контейнер менен кодду дээрлик заматта синхрондоштуруу.
  • GitHub.
  • Кыскача GH статистикасы: 555 жылдыз, 362 милдеттенме, 11 салым кошуучу.
  • Тил: Go.
  • Лицензия: Apache License 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 салым кошуучу.
  • Тил: Go.
  • Лицензия: Apache License 2.0.

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

  • delve - Go колдонмолору үчүн;
  • GDB - максаттуу алыстан + порт багыттоо аркылуу;
  • Java тиркемелерин оңдоо үчүн JDWP портун багыттоо.

IDE тарабында колдоо VScode'до гана жеткиликтүү (колдонуу кеңейүү), бирок, учурдагы (2019) жылдын пландарына Eclipse жана Intellij кирет.

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

Интегралдык чечимдер

Келгиле, оор артиллерияга өтөлү - иштеп чыгуучулардын көптөгөн муктаждыктарын дароо канааттандыруу үчүн иштелип чыккан "ири масштабдуу" долбоорлор.

NB: Бул тизмеде, албетте, биздин Open Source утилитабыз үчүн орун бар werf (мурда дап деп аталган). Бирок, биз буга чейин бир эмес, бир нече жолу жазып, сүйлөшкөнбүз, ошондуктан аны рецензияга кошпоону чечтик. Анын мүмкүнчүлүктөрү менен көбүрөөк таанышууну каалагандар үчүн биз баяндаманы окууну/угууну сунуштайбыз "werf биздин Кубернетестеги CI/CD үчүн куралыбыз«.

DevSpace

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

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

Команданы иштетип жатканда devspace init Долбоордун каталогунда сизге сунуш кылынат (интерактивдүү):

  • иштеген Kubernetes кластерин тандоо,
  • бар колдонуу Dockerfile (же жаңысын түзүү) анын негизинде контейнерди түзүү,
  • контейнер сүрөттөрүн сактоо үчүн репозиторий тандоо ж.б.

Бардык ушул даярдык кадамдарынан кийин, сиз буйрукту иштетүү менен иштеп баштасаңыз болот devspace dev. Ал контейнерди чогултуп, аны репозиторийге жүктөйт, жайгаштырууну кластерге чыгарат жана портту багыттоо жана контейнерди жергиликтүү каталог менен синхрондоштурууну баштайт.

Кошумча, сизден терминалды контейнерге жылдыруу сунушталат. Сиз баш тартууга болбойт, анткени чындыгында контейнер уйку буйругу менен башталат жана реалдуу сыноо үчүн колдонмону кол менен ишке киргизүү керек.

Акыры, команда devspace deploy тиркемени жана ага байланыштуу инфраструктураны кластерге чыгарат, андан кийин бардыгы согуштук режимде иштей баштайт.

Бардык долбоордун конфигурациялары файлда сакталат devspace.yaml. Өнүктүрүү чөйрөсүнүн жөндөөлөрүнөн тышкары, сиз андагы инфраструктуранын сыпаттамасын таба аласыз, стандарттуу Kubernetes манифесттерине окшош, абдан жөнөкөйлөштүрүлгөн.

Kubernetesте иштеген тиркемелерди иштеп чыгуучулар үчүн куралдар
Архитектура жана DevSpace менен иштөөнүн негизги этаптары

Мындан тышкары, долбоорго алдын ала аныкталган компонентти (мисалы, MySQL DBMS) же Helm диаграммасын кошуу оңой. Кененирээк бөлүмдөн окуңуз документтер - бул татаал эмес.

Skaffold

  • сайты; GitHub.
  • Кыскача GH статистикасы: 7423 жылдыз, 4173 милдеттенме, 136 салым кошуучу.
  • Тил: Go.
  • Лицензия: Apache License 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 License 2.0.

Skaffold сыяктуу, Garden K8s кластерине колдонмо кодун жеткирүү процесстерин автоматташтырууга багытталган. Бул үчүн, адегенде YAML файлында долбоордун түзүмүн сүрөттөп, андан кийин буйрукту иштетүү керек garden dev. Ал бардык сыйкырчылык кылат:

  • Долбоордун ар кандай бөлүктөрү менен контейнерлерди чогултуу.
  • Эгерде сүрөттөлгөн болсо, интеграция жана бирдик сыноолорун жүргүзөт.
  • Долбоордун бардык компоненттерин кластерге чыгарат.
  • Эгер баштапкы код өзгөрсө, ал бүт түтүктү кайра иштетет.

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

Долбоордун модулу контейнер, Maven контейнери, Helm диаграммасы, манифест болушу мүмкүн. kubectl apply же ал тургай OpenFaaS функциясы. Мындан тышкары, модулдардын каалаганын алыскы Git репозиторийинен тартып алса болот. Модуль кызматтарды, тапшырмаларды жана тесттерди аныкташы мүмкүн же аныктабашы мүмкүн. Кызматтардын жана тапшырмалардын көз карандылыгы болушу мүмкүн, анын аркасында белгилүү бир кызматтын жайылтуу ырааттуулугун аныктап, тапшырмаларды жана тесттерди ишке киргизүүнү уюштура аласыз.

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

Kubernetesте иштеген тиркемелерди иштеп чыгуучулар үчүн куралдар
Бакча үчүн панель

Бул куралда ошондой эле ысык кайра жүктөө режими бар, ал жөн гана кластердеги контейнер менен скрипт өзгөртүүлөрүн синхрондоп, колдонмонун мүчүлүштүктөрүн оңдоо процессин абдан тездетет. Бакчасы жакшы документтер жана жаман эмес мисалдардын жыйындысы, ага тез көнүп, аны колдоно баштоого мүмкүндүк берет. Баса, жакында эле жарыялаганбыз макала котормосу анын авторлорунан.

жыйынтыктоо

Албетте, бул Kubernetes тиркемелерин иштеп чыгуу жана мүчүлүштүктөрдү оңдоо үчүн куралдардын тизмеси менен эле чектелбейт. Дагы көптөгөн пайдалуу жана практикалык программалар бар, алар өзүнчө макала болбосо, анда жок дегенде сөз кылууга татыктуу. Эмнени колдонуп жатканыңызды, кандай көйгөйлөргө туш болгонуңузду жана аларды кантип чечкениңизди айтыңыз!

PS

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

Source: www.habr.com

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