Kubernetes fautuaga & togafiti: e uiga i atinaʻe faʻapitonuʻu ma Telepresence

Kubernetes fautuaga & togafiti: e uiga i atinaʻe faʻapitonuʻu ma Telepresence

Ua fa'atupula'ia i matou e uiga i le atina'eina o microservices i Kubernetes. O tagata atiaʻe, aemaise o gagana faʻamatalaina, e manaʻo e vave faʻasaʻo le code i la latou IDE e sili ona fiafia i ai ma vaʻai i le taunuuga e aunoa ma le faʻatali mo le fausiaina / faʻapipiʻiina - e ala i le na o le oomi F5. Ma ina ua oʻo mai i se talosaga monolithic, na lava e faʻapipiʻi i le lotoifale se faʻamaumauga ma se upega tafaʻilagi (i Docker, VirtualBox ...), ona vave loa lea ona fiafia i le atinaʻe. Faatasi ai ma le tipiina o monoliths i microservices ma le taunuu mai o Kubernetes, faatasi ai ma foliga vaaia o le faalagolago o le tasi i le isi, mea uma. ua fai si faigata. O le tele o nei microservices, o le tele o faʻafitauli. Ina ia toe fiafia i le atinaʻe, e tatau ona e siʻitia le sili atu ma le tasi pe lua koneteina Docker, ma o nisi taimi e sili atu ma le taseni ... I se tulaga lautele, o nei mea uma e mafai ona umi se taimi, talu ai e manaʻomia foi ona faʻafou i aso nei. .

I taimi eseese sa matou taumafai ai i fofo eseese i le faafitauli. Ma o le a ou amata i le faʻaputuina o mea faigaluega poʻo na o le "tootoo".

1. Tootoo

Ole tele ole IDE e iai le malosi e fa'asa'o sa'o ai le code ile server ile fa'aogaina ole FTP/SFTP. O lenei ala e matua manino lava ma na matou filifili loa e faʻaaoga. O lona uiga e faʻavae i lalo i mea nei:

  1. I totonu o le pusa o siosiomaga atinaʻe (dev / iloiloga), o loʻo faʻalauiloaina se atigipusa faʻaopoopo ma le SSH avanoa ma tuʻuina atu le ki SSH lautele a le tagata atiaʻe o le a tuʻuina atu / faʻaogaina le talosaga.
  2. I le tulaga amata (i totonu o le atigipusa prepare-app) fa'aliliu le code i emptyDiria maua le avanoa i le code mai pusa talosaga ma le SSH server.

Kubernetes fautuaga & togafiti: e uiga i atinaʻe faʻapitonuʻu ma Telepresence

Ina ia malamalama atili i le faʻatinoga faʻapitoa o sea polokalame, o le a ou tuʻuina atu ni vaega o faʻalapotopotoga a le YAML i Kubernetes.

Fa'atonuga

1.1. values.yaml

ssh_pub_key:
  vasya.pupkin: <ssh public key in base64> 

o vasya.pupkin o le tau o le fesuiaiga ${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. faalilolilo.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 }}

pa'i mulimuli

A maeʻa na mea uma o le faʻafeiloaʻi mana'omia gitlab-ci.yml fesuiaiga:

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: o le tagata na te faʻalauiloaina le faʻapipiʻiina e mafai ona faʻafesoʻotaʻi ile igoa ole tautua (faʻafefea ona faʻatagaina saogalemu le avanoa i le fuifui, ua uma ona matou fai atu) mai lau laulau e ala i le SFTP ma faʻasaʻo le code e aunoa ma le faʻatali mo le tuʻuina atu i le fuifui.

O se fofo galue atoatoa, ae mai le faʻatinoga o le faʻaaliga o loʻo i ai ni faʻaletonu manino:

  • le mana'oga e fa'amanino le siata o le Helm, lea e faigata ai ona faitau i le lumana'i;
  • e mafai ona fa'aaogaina e le tagata na fa'atinoina le auaunaga;
  • e tatau ona e manatua ona fa'amaopoopoina lea ma le lisi fa'apitonu'u ma le code ma tu'uina atu i Git.

2. Telepresence

Проект fa'asalalauga tele ua leva ona iloa, ae o matou, e pei ona latou fai mai ai, "e leʻi oʻo i le taumafai malosi i le faʻatinoga." Ae ui i lea, o le manaʻoga ua maeʻa lana galuega ma o lea ua matou fiafia e faʻasoa atu lo matou poto masani, atonu e aoga i le au faitau o la matou blog - aemaise lava talu ai e leʻi i ai isi mea e uiga i Telepresence i luga o le hub.

I se faapuupuuga, o mea uma na foliga mai e le o se mea taufaafefe. Na matou tuʻuina uma gaioiga e manaʻomia ai le faʻataunuʻuina i le vaega a le tagata atiaʻe i totonu o se faila faila o le siata Helm e taʻua NOTES.txt. O le mea lea, a maeʻa ona tuʻuina atu le 'auʻaunaga i Kubernetes, e vaʻaia e le tagata faʻapitoa faatonuga mo le faʻalauiloaina o le siosiomaga faʻapitonuʻu i le GitLab job log:

!!! Разработка сервиса локально, в составе 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
#########################################################################

O le a matou le faʻamatala auiliili i laasaga o loʻo faʻamatalaina i lenei faatonuga ... sei vagana ai le mea mulimuli. O le a le mea e tupu i le taimi o le faʻalauiloaina o Telepresence?

Galulue ma Telepresence

I le amataga (faʻaaogaina le poloaiga mulimuli o loʻo faʻamaonia i faatonuga o loʻo i luga), matou te setiina:

  • igoa avanoa o loʻo faʻaogaina ai le microservice;
  • igoa o le faʻapipiʻiina ma le atigipusa matou te manaʻo e ulu i ai.

O isi finauga e filifili. Afai e fegalegaleai la matou auaunaga ma mo le Kubernetes API ServiceAccount ua faia, matou te manaʻomia le faʻapipiʻiina o tusi faamaonia / faʻailoga i luga o la matou komepiuta. Ina ia faia lenei mea, faʻaaoga le filifiliga --mount=true (po o --mount=/dst_path), lea o le a faʻapipiʻi ai le aʻa (/) mai le pusa Kubernetes i luga o la matou laulau. A maeʻa lenei mea, e mafai ona matou (faʻalagolago i le OS ma le faʻaogaina o le talosaga) faʻaoga "ki" mai le fuifui.

Muamua, seʻi o tatou vaʻavaʻai i le filifiliga sili ona lautele mo le faʻaogaina o se talosaga - i totonu o se pusa Docker. Ina ia faia lenei mea o le a matou faʻaaogaina le ki --docker-run ma faʻapipiʻi le lisi ma le code i totonu o le koneteina: -v `pwd`:/app

Faamolemole ia matau o lenei mea e fa'apea o lo'o alu mai le lisi o galuega. O le numera o talosaga o le a faʻapipiʻiina i totonu o le lisi /app i totonu o se koneteina.

Lisi: -v /tmp/app/var/run/secrets:/var/run/secrets — ia fa'apipi'i le fa'atonuga ma le tusi pasi/fa'ailoga i totonu o se koneteina.

O lenei filifiliga e mulimuli ane mulimuli ane i le ata o le a faʻaogaina ai le talosaga. NB: A fauina se ata, e tatau ona e faʻamaonia CMD poʻo ENTRYPOINT!

O le a tonu le mea o le a tupu?

  • I le Kubernetes, mo le Fa'atonuga fa'apitoa, o le numera o fa'atusa o le a suia i le 0. Nai lo lena, o le a fa'alauiloa se Fa'atonuga fou - fa'atasi ai ma se koneteina sui. backend.
  • 2 koneteina o le a faʻalauiloa i luga o le komepiuta: muamua ma Telepresence (o le a sui talosaga mai / i Kubernetes), lona lua ma le talosaga o loʻo atiaʻe.
  • Afai matou te faʻatinoina i totonu o le koneteina ma le talosaga, ona avanoa uma lea o le ENV fesuiaʻiga na faʻafeiloaʻi e Helm i le taimi o le faʻapipiʻiina, ma o le a avanoa foi auaunaga uma. Pau lava le mea o loʻo totoe o le faʻasaʻo le code i lau IDE e sili ona e fiafia i ai ma fiafia i le taunuuga.
  • I le faaiuga o le galuega, e tatau lava ona e tapuni le laina lea o loʻo taʻavale ai Telepresence (faʻamutaina le sauniga ma Ctrl + C) - O pusa Docker o le a taofi i luga o le laulau, ma i Kubernetes o le a toe foʻi mea uma i lona tulaga muamua. Pau lava le mea o loʻo totoe o le tuʻuina atu, tuʻuina atu le MR ma faʻafeiloaʻi e toe iloilo / tuʻufaʻatasia / ... (faʻalagolago i au galuega).

Afai matou te le manaʻo e faʻatautaia le talosaga i totonu o se pusa Docker - mo se faʻataʻitaʻiga, matou te le atiina ae i le PHP, ae i le Go, ma faʻaauau pea ona fausia i le lotoifale - faʻalauiloa Telepresence o le a sili atu ona faigofie:

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

Afai e maua e lau talosaga le Kubernetes API, e tatau ona e fa'apipi'i le lisi o ki (https://www.telepresence.io/howto/volumes). O loʻo i ai se aoga mo Linux a'a:

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

A maeʻa ona faʻalauiloa Telepresence e aunoa ma le filifiliga --docker-run o suiga uma o le siosiomaga o le a maua i le laina o loʻo i ai nei, o lea e tatau ai ona faʻalauiloa le talosaga i totonu.

NB: A faʻaaoga, mo se faʻataʻitaʻiga, PHP, e tatau ona e manatua e faʻamalo eseʻese op_cache, apc ma isi faʻavavevave mo le atinaʻe - a le o le faʻasaʻoina o le code o le a le taʻitaʻia ai le manaʻoga.

O taunuʻuga

O le atinaʻe faʻapitonuʻu ma Kubernetes o se faʻafitauli o loʻo faʻatupulaʻia le fofo e faʻatatau i le faʻasalalauina o lenei tulaga. O le mauaina o talosaga talafeagai mai le au atinaʻe (mai a matou tagata faʻatau), na amata ona matou foia i latou i le auala muamua na maua, lea, e ui i lea, e leʻi faʻamaonia i latou lava mo se taimi umi. O le mea e lelei ai, ua faʻaalia lenei mea e le gata i le taimi nei ma e le gata ia i tatou, o lea ua sili atu ona talafeagai auala ua faʻaalia i le lalolagi, ma Telepresence o le sili ona taʻutaʻua o latou (i le ala, e iai foi fatafata mai Google). O lo matou poto masani i le faʻaaogaina e leʻo sili atu, ae ua uma ona matou maua le mafuaaga e fautuaina ai i matou "aufaigaluega i le faleoloa" - taumafai!

SALA

O isi mai le K8s tips & tricks series:

puna: www.habr.com

Faaopoopo i ai se faamatalaga