Kubernetes tips & tricks: dwar l-iżvilupp lokali u Telepresence

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:

  1. 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.
  2. 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.

Kubernetes tips & tricks: dwar l-iżvilupp lokali u Telepresence

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}.

1.2. deployment.yaml

...
{{ if eq .Values.global.debug "yes" }}
      volumes:
      - name: ssh-pub-key
        secret:
          defaultMode: 0600
          secretName: {{ .Chart.Name }}-ssh-pub-key
      - name: app-data
        emptyDir: {}
      initContainers:
      - name: prepare-app
{{ tuple "backend" . | include "werf_container_image" | indent 8 }}
        volumeMounts:
        - name: app-data
          mountPath: /app-data
        command: ["bash", "-c", "cp -ar /app/* /app-data/" ]
{{ end }}
      containers:
{{ if eq .Values.global.debug "yes" }}
      - name: ssh
        image: corbinu/ssh-server
        volumeMounts:
        - name: ssh-pub-key
          readOnly: true
          mountPath: /root/.ssh/authorized_keys
          subPath: authorized_keys
        - name: app-data
          mountPath: /app
        ports:
        - name: ssh
          containerPort: 22
          protocol: TCP
{{ end }}
      - name: backend
        volumeMounts:
{{ if eq .Values.global.debug "yes" }}
        - name: app-data
          mountPath: /app
{{ end }}
        command: ["/usr/sbin/php-fpm7.2", "--fpm-config", "/etc/php/7.2/php-fpm.conf", "-F"]
...

1.3. sigriet.yaml

{{ if eq .Values.global.debug "yes" }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Chart.Name }}-ssh-pub-key
type: Opaque
data:
  authorized_keys: "{{ first (pluck .Values.global.username .Values.ssh_pub_key) }}"
{{ end }}

Touch finali

Wara dak kollu li jibqa’ huwa li jittrasferixxi varjabbli meħtieġa gitlab-ci.yml:

dev:
  stage: deploy
  script:
   - type multiwerf && source <(multiwerf use 1.0 beta)
   - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
   - werf deploy
     --namespace ${CI_PROJECT_NAME}-stage
     --set "global.env=stage"
     --set "global.git_rev=${CI_COMMIT_SHA}"
     --set "global.debug=yes"
     --set "global.username=${GITLAB_USER_LOGIN}"
 tags:
   - build

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:

telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name  }}:backend --mount=true

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:

proot -b $TELEPRESENCE_ROOT/var/run/secrets/:/var/run/secrets bash

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!

PS

Oħrajn mis-serje ta' tips & tricks K8s:

Sors: www.habr.com

Żid kumment