Kubernetes tips & tricks: dwar l-iżvilupp lokali u Telepresence
Aħna dejjem aktar mistoqsijin dwar l-iżvilupp ta’ mikroservizzi f’Kubernetes. L-iżviluppaturi, speċjalment tal-lingwi interpretati, iridu jikkoreġu malajr il-kodiċi fl-IDE favorit tagħhom u jaraw ir-riżultat mingħajr ma jistennew għall-bini/iskjerament - billi sempliċement tagħfas F5. U meta ġiet għal applikazzjoni monolitika, kien biżżejjed li tinstalla lokalment database u web server (f'Docker, VirtualBox...), u mbagħad immedjatament tgawdi l-iżvilupp. Bit-tqattigħ ta 'monoliti f'mikroservizzi u l-wasla ta' Kubernetes, bid-dehra ta 'dipendenzi fuq xulxin, kollox sar ftit aktar diffiċli. Aktar ma dawn il-mikroservizzi, aktar problemi. Biex terġa' tgawdi l-iżvilupp, trid tgħolli aktar minn kontenitur Docker wieħed jew tnejn, u xi drabi saħansitra aktar minn tużżana... B'mod ġenerali, dan kollu jista' jieħu ħafna ħin, peress li jeħtieġ ukoll li jinżamm aġġornat. .
Fi żminijiet differenti ppruvajna soluzzjonijiet differenti għall-problema. U ser nibda bil-soluzzjonijiet akkumulati jew sempliċement "krozzi".
1. Krozzi
Ħafna IDEs għandhom il-kapaċità li jeditjaw il-kodiċi direttament fuq is-server billi jużaw FTP/SFTP. Din it-triq hija ovvja ħafna u immedjatament iddeċidejna li nużawha. L-essenza tagħha tirriżulta f'dan li ġej:
Fil-pod ta 'ambjenti ta' żvilupp (dev/reviżjoni), jitnieda kontenitur addizzjonali b'aċċess SSH u jibgħat iċ-ċavetta SSH pubblika tal-iżviluppatur li se jimpenja/jiskjera l-applikazzjoni.
Fl-istadju tal-bidu (fil-kontenitur prepare-app) ittrasferixxi l-kodiċi lil emptyDirbiex ikollu aċċess għall-kodiċi mill-kontenituri tal-applikazzjoni u s-server SSH.
Biex nifhem aħjar l-implimentazzjoni teknika ta 'skema bħal din, ser nipprovdi frammenti tal-konfigurazzjonijiet YAML involuti f'Kubernetes.
Konfigurazzjonijiet
1.1. valuri.yaml
ssh_pub_key:
vasya.pupkin: <ssh public key in base64>
Hawnhekk vasya.pupkin huwa l-valur tal-varjabbli ${GITLAB_USER_LOGIN}.
Voila: l-iżviluppatur li nieda l-iskjerament jista’ jgħaqqad bl-isem tas-servizz (kif tagħti aċċess sigur għall-cluster, diġà għedna) mid-desktop tiegħek permezz ta' SFTP u editja l-kodiċi mingħajr ma tistenna li jitwassal lill-cluster.
Din hija soluzzjoni li taħdem għal kollox, iżda mil-lat ta' implimentazzjoni għandha żvantaġġi ovvji:
il-ħtieġa li tiġi rfinata t-tabella Helm, li tagħmilha diffiċli biex tinqara fil-futur;
jista' jintuża biss mill-persuna li skjerat is-servizz;
trid tiftakar biex imbagħad tissinkronizzaha mad-direttorju lokali bil-kodiċi u tikkommettiha ma' Git.
2. Telepreżenza
Proġett Telepreżenza ilu magħruf għal żmien pjuttost twil, iżda aħna, kif jgħidu, "ma dħaltx biex nippruvawha bis-serjetà fil-prattika." Madankollu, id-domanda għamlet xogħolha u issa aħna kuntenti li naqsmu l-esperjenza tagħna, li tista’ tkun utli għall-qarrejja tal-blog tagħna – speċjalment peress li s’issa ma kien hemm l-ebda materjal ieħor dwar it-Telepresence fuq il-hub.
Fil-qosor, kollox irriżulta li ma kienx daqshekk tal-biża. Poġġejna l-azzjonijiet kollha li jeħtieġu eżekuzzjoni min-naħa tal-iżviluppatur f'fajl ta 'test ta' Helm chart imsejjaħ NOTES.txt. Għalhekk, wara l-iskjerament tas-servizz lil Kubernetes, l-iżviluppatur jara struzzjonijiet għat-tnedija tal-ambjent dev lokali fir-reġistru tax-xogħol GitLab:
!!! Разработка сервиса локально, в составе Kubernetes !!!
* Настройка окружения
* * Должен быть доступ до кластера через VPN
* * На локальном ПК установлен kubectl ( https://kubernetes.io/docs/tasks/tools/install-kubectl/ )
* * Получить config-файл для kubectl (скопировать в ~/.kube/config)
* * На локальном ПК установлен telepresence ( https://www.telepresence.io/reference/install )
* * Должен быть установлен Docker
* * Необходим доступ уровня reporter или выше к репозиторию https://gitlab.site.com/group/app
* * Необходимо залогинится в registry с логином/паролем от GitLab (делается один раз):
#########################################################################
docker login registry.site.com
#########################################################################
* Запуск окружения
#########################################################################
telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name }}:backend --mount=/tmp/app --docker-run -v `pwd`:/app -v /tmp/app/var/run/secrets:/var/run/secrets -ti registry.site.com/group/app/backend:v8
#########################################################################
Aħna mhux se noqogħdu fid-dettall fuq il-passi deskritti f'din l-istruzzjoni... bl-eċċezzjoni ta 'l-aħħar wieħed. X'jiġri waqt it-tnedija tat-Telepresence?
Ħidma ma 'Telepresence
Fl-istartjar (bl-użu tal-aħħar kmand speċifikat fl-istruzzjonijiet ta 'hawn fuq), aħna waqqafna:
namespace li fih qed jaħdem il-mikroservizz;
ismijiet tal-iskjerament u l-kontenitur li rridu nippenetraw.
L-argumenti li jifdal huma fakultattivi. Jekk is-servizz tagħna jinteraġixxi ma' u għall-API Kubernetes ServiceAccount maħluq, għandna bżonn li jintramaw ċertifikati/tokens fuq id-desktop tagħna. Biex tagħmel dan, uża l-għażla --mount=true (Jew --mount=/dst_path), li se jimmonta l-għerq (/) mill-kontenitur Kubernetes mad-desktop tagħna. Wara dan, nistgħu (skont l-OS u kif titnieda l-applikazzjoni) nużaw iċ-"ċwievet" mill-cluster.
L-ewwel, ejja nħarsu lejn l-iktar għażla universali biex titħaddem applikazzjoni - f'kontenitur Docker. Biex nagħmlu dan se nużaw iċ-ċavetta --docker-run u arma d-direttorju bil-kodiċi fil-kontenitur: -v `pwd`:/app
Jekk jogħġbok innota li dan jassumi li taħdem mid-direttorju tal-proġett. Il-kodiċi tal-applikazzjoni se jiġi mmuntat fid-direttorju /app f'kontenitur.
Li jmiss: -v /tmp/app/var/run/secrets:/var/run/secrets — biex jintramaw id-direttorju biċ-ċertifikat/token f'kontenitur.
Din l-għażla finalment tiġi segwita mill-immaġni li fiha se taħdem l-applikazzjoni. NB: Meta tibni immaġini, trid tispeċifika CMD jew ENTRYPOINT!
X'se jiġri eżattament wara?
F'Kubernetes, għall-Iskjerament speċifikat, in-numru ta' repliki se jinbidel għal 0. Minflok, se jitnieda Skjerament ġdid - b'kontenitur sostitut backend.
2 kontenituri se jniedu fuq id-desktop: l-ewwel b'Telepresence (se talbiet proxy minn/li Kubernetes), it-tieni bl-applikazzjoni li qed tiġi żviluppata.
Jekk noħorġu fil-kontenitur bl-applikazzjoni, allura l-varjabbli ENV kollha trasferiti minn Helm waqt l-iskjerament se jkunu disponibbli għalina, u s-servizzi kollha jkunu wkoll disponibbli. Li jibqa 'huwa li teditja l-kodiċi fl-IDE favorit tiegħek u tgawdi r-riżultat.
Fl-aħħar tax-xogħol, għandek bżonn biss li tagħlaq it-terminal li fih qed taħdem Telepresence (temm is-sessjoni b'Ctrl + C) - Il-kontenituri Docker se jieqfu fuq id-desktop, u f'Kubernetes kollox jerġa 'lura għall-istat inizjali tiegħu. Li jibqa' biss li tikkommetti, toħroġ l-MR u tittrasferih biex tirrevedi/għaqda/... (skont il-flussi tax-xogħol tiegħek).
Jekk ma rridux inħaddmu l-applikazzjoni f'kontenitur Docker - pereżempju, aħna niżviluppaw mhux f'PHP, iżda f'Go, u xorta nibnuha lokalment - it-tnedija ta' Telepresence se tkun saħansitra aktar sempliċi:
Jekk l-applikazzjoni taċċessa l-API Kubernetes, ser ikollok bżonn timmonta d-direttorju taċ-ċwievet (https://www.telepresence.io/howto/volumes). Hemm utilità għal Linux għerq:
Wara t-tnedija tat-Telepresence mingħajr l-għażla --docker-run il-varjabbli ambjentali kollha se jkunu disponibbli fit-terminal attwali, għalhekk l-applikazzjoni għandha titnieda fiha.
NB: Meta tuża, pereżempju, PHP, trid tiftakar li tiddiżattiva diversi op_cache, apc u aċċeleraturi oħra għall-iżvilupp - inkella l-editjar tal-kodiċi ma jwassalx għar-riżultat mixtieq.
Riżultati ta '
L-iżvilupp lokali ma’ Kubernetes huwa problema li s-soluzzjoni tagħha qed tikber fi proporzjon mat-tixrid ta’ din il-pjattaforma. Meta nirċievu talbiet rilevanti mill-iżviluppaturi (mill-klijenti tagħna), bdejna nsolvuhom bl-ewwel mezzi disponibbli, li, madankollu, ma ppruvawx lilhom infushom fit-tul. Fortunatament, dan sar ovvju mhux biss issa u mhux biss għalina, għalhekk mezzi aktar adattati diġà dehru fid-dinja, u Telepresence hija l-aktar famuża minnhom (mill-mod, hemm ukoll skaffold minn Google). L-esperjenza tagħna ta 'l-użu tagħha għadha mhix daqshekk kbira, iżda diġà tagħtina raġuni biex nirrakkomandawha lill-"kollegi tagħna fil-ħanut" - ipprovaha!