Toro-hevitra sy fika Kubernetes: momba ny fampandrosoana eo an-toerana sy ny Telepresence

Toro-hevitra sy fika Kubernetes: momba ny fampandrosoana eo an-toerana sy ny Telepresence

Tsy mitsaha-mitombo ny anontaniana anay momba ny fampivelarana ny microservices ao amin'ny Kubernetes. Te hanitsy haingana ny kaody ao amin'ny IDE ankafiziny ny mpamorona, indrindra fa ny fiteny voadika ary hahita ny vokatra tsy miandry fananganana/fametrahana - amin'ny fanindriana fotsiny ny F5. Ary rehefa tonga amin'ny rindranasa monolithic, dia ampy ny mametraka tahiry eo an-toerana sy mpizara tranonkala (ao amin'ny Docker, VirtualBox ...), ary avy eo dia mankafy ny fampandrosoana avy hatrany. Miaraka amin'ny fanapahana ny monoliths ho microservices sy ny fahatongavan'ny Kubernetes, miaraka amin'ny fisehoan'ny fiankinan-doha amin'ny tsirairay, ny zava-drehetra lasa sarotra kokoa izany. Arakaraka ny betsaka amin'ireo microservice ireo no betsaka ny olana. Mba hankafizana indray ny fampandrosoana dia mila manangana kaontenera Docker mihoatra ny iray na roa ianao, ary indraindray mihoatra ny am-polony aza... Amin'ny ankapobeny, mety haka fotoana be izany rehetra izany, satria mila havaozina ihany koa. .

Tamin'ny fotoana samihafa dia nanandrana vahaolana samihafa ho an'ny olana izahay. Ary hanomboka amin'ny workarounds voaangona aho na "tanjona" fotsiny.

1. Tehina

Ny ankamaroan'ny IDE dia afaka manova ny kaody mivantana amin'ny mpizara mampiasa FTP/SFTP. Mazava be io lalana io ary nanapa-kevitra avy hatrany izahay fa hampiasa azy io. Ny maha-zava-dehibe azy dia mihatra amin'ireto manaraka ireto:

  1. Ao amin'ny tontolon'ny fampandrosoana (dev/review), misy kaontenera fanampiny natomboka miaraka amin'ny fidirana SSH ary mandefa ny fanalahidin'ny SSH ho an'ny daholobe an'ny mpamorona izay hanolo-tena / hametraka ny fampiharana.
  2. Ao amin'ny dingana init (ao anatin'ny container prepare-app) mamindra ny kaody mankany emptyDirmba hahazoana ny kaody avy amin'ny fitoeran'entana fampiharana sy ny mpizara SSH.

Toro-hevitra sy fika Kubernetes: momba ny fampandrosoana eo an-toerana sy ny Telepresence

Mba hahatakarana bebe kokoa ny fampiharana ara-teknika an'io tetika io, dia hanome sombiny amin'ireo fandrindrana YAML tafiditra ao amin'ny Kubernetes aho.

Configurations

1.1. values.yaml

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

izany vasya.pupkin dia ny sandan'ny variable ${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. secret.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 }}

Final touch

Aorian'izay dia ny hamindra no sisa takiana gitlab-ci.yml variables:

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: afaka mifandray amin'ny anaran'ny serivisy ny mpamorona izay nanangana ny fametrahana (ny fomba hanomezana antoka ny fidirana amin'ny cluster, efa nolazainay) avy amin'ny biraonao amin'ny alΓ lan'ny SFTP ary amboary ny kaody nefa tsy miandry ny fandefasana azy any amin'ny cluster.

Vahaolana miasa tanteraka ity, fa raha ny fomba fijery fampiharana dia misy fatiantoka miharihary:

  • ny filΓ na hanatsara ny tabilao Helm, izay manasarotra ny famakiana amin'ny ho avy;
  • ny olona nametraka ny serivisy ihany no azo ampiasaina;
  • mila tadidinao ny hampifanaraka azy amin'ny lahatahiry eo an-toerana miaraka amin'ny kaody ary apetraho amin'ny Git.

2. Telepresence

Ny tetikasa telepresence efa fantatra hatry ny ela, fa izahay, araka ny filazan'izy ireo, dia "tsy nandeha nanandrana izany tamin'ny fampiharana." Na izany aza, nahavita ny asany ny fangatahana ary faly izahay mizara ny traikefanay, izay mety hahasoa ny mpamaky ny bilaoginay - indrindra fa tsy mbola nisy fitaovana hafa momba ny Telepresence tao amin'ny hub.

Raha fintinina dia hita fa tsy mampatahotra loatra ny zava-drehetra. Napetrakay ao anaty fisie lahatsoratra amin'ny tabilao Helm antsoina ny hetsika rehetra mitaky famonoana NOTES.txt. Noho izany, aorian'ny fametrahana ny serivisy amin'ny Kubernetes, ny mpamorona dia mahita torolalana amin'ny famoahana ny tontolo devoly eo an-toerana ao amin'ny diarin'ny asa 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
#########################################################################

Tsy hiresaka amin'ny an-tsipiriany momba ireo dingana voalaza ato amin'ity torolalana ity izahay ... afa-tsy ny farany. Inona no mitranga mandritra ny fandefasana ny Telepresence?

Miasa amin'ny Telepresence

Amin'ny fanombohana (mampiasa ny baiko farany voalaza ao amin'ny torolΓ lana etsy ambony), dia mametraka:

  • namespace izay iasan'ny microservice;
  • anaran'ny fametrahana sy ny kaontenera tiantsika hidirana.

Ny hevitra sisa dia azo atao. Raha mifandray amin'ny Kubernetes API ny serivisyy ServiceAccount noforonina, mila mametraka mari-pankasitrahana/marika eo amin'ny biraontsika isika. Mba hanaovana izany, ampiasao ny safidy --mount=true (na --mount=/dst_path), izay hametraka ny fakany (/) avy amin'ny kaontenera Kubernetes mankany amin'ny biraonay. Aorian'izany dia afaka mampiasa ny "key" avy amin'ny cluster isika (miankina amin'ny OS sy ny fomba nanombohana ny fampiharana).

Voalohany, andeha hojerentsika ny safidy manerantany indrindra amin'ny fampandehanana fampiharana - ao anaty container Docker. Mba hanaovana izany dia hampiasa ny fanalahidy --docker-run ary ampidiro ao anaty container ny lahatahiry miaraka amin'ny code: -v `pwd`:/app

Mariho fa ity dia heverina fa mandeha avy amin'ny lahatahiry tetikasa. Ny kaody fampiharana dia hapetraka ao amin'ny lahatahiry /app anaty fitoeran-javatra iray.

Next: -v /tmp/app/var/run/secrets:/var/run/secrets β€” mametraka ny lahatahiry miaraka amin'ny taratasy fanamarinana/marika ao anaty fitoeran-javatra.

Ity safidy ity dia arahin'ny sary izay handehanan'ny fampiharana. NB: Rehefa manamboatra sary ianao dia tsy maintsy mamaritra CMD na ENTRYPOINT!

Inona marina no hitranga manaraka?

  • Ao amin'ny Kubernetes, ho an'ny Deployment voatondro, dia hovana ho 0 ny isan'ny dika mitovy. backend.
  • Ny kaontenera 2 dia halefa eo amin'ny desktop: ny voalohany miaraka amin'ny Telepresence (izany no fangatahana proxy avy amin'ny / mankany Kubernetes), ny faharoa miaraka amin'ny fampiharana novolavolaina.
  • Raha ampidirintsika ao amin'ny kaontenera miaraka amin'ny fampiharana, dia ho azonay daholo ny fari-pahaizan'ny ENV nafindran'ny Helm mandritra ny fametrahana azy, ary ho azo ampiasaina koa ny serivisy rehetra. Ny hany sisa tavela dia ny manova ny kaody ao amin'ny IDE tianao indrindra ary mankafy ny vokatra.
  • Amin'ny fiafaran'ny asa dia mila manidy ny terminal izay iasan'ny Telepresence ianao (farano ny fivoriana amin'ny Ctrl + C) - hijanona eo amin'ny desktop ny container Docker, ary ao amin'ny Kubernetes dia hiverina amin'ny toerany voalohany ny zava-drehetra. Ny hany sisa tavela dia ny manolo-tena, mamoaka ny MR ary mamindra izany amin'ny famerenana / hanambatra /… (miankina amin'ny workflows).

Raha tsy te hampandeha ny fampiharana ao anaty container Docker isika - ohatra, tsy mivoatra amin'ny PHP, fa ao amin'ny Go, ary mbola manangana izany eo an-toerana - ny fandefasana Telepresence dia ho mora kokoa:

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

Raha miditra amin'ny Kubernetes API ny fampiharana dia mila mametraka ny lahatahiry fanalahidy ianao (https://www.telepresence.io/howto/volumes). Misy utility ho an'ny Linux MAMAKA:

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

Taorian'ny fandefasana Telepresence tsy misy safidy --docker-run ho hita ao amin'ny terminal amin'izao fotoana izao ny fari-piainan'ny tontolo iainana rehetra, ka tsy maintsy atomboka ao ny fampiharana.

NB: Rehefa mampiasa, ohatra, ny PHP, dia tsy maintsy tsaroanao ny manafoana ny op_cache isan-karazany, ny apc ary ny accelerators hafa ho an'ny fampandrosoana - raha tsy izany dia tsy hitondra vokatra tadiavina ny fanitsiana ny code.

vokatra

Ny fampandrosoana eo an-toerana miaraka amin'i Kubernetes dia olana izay mitombo ny vahaolana mifanaraka amin'ny fiparitahan'ity sehatra ity. Nahazo fangatahana manan-danja avy amin'ny mpamorona (avy amin'ny mpanjifanay) izahay, nanomboka namaha azy ireo tamin'ny fitaovana voalohany azo ampiasaina, izay, na izany aza, dia tsy nanaporofo ny tenany nandritra ny fotoana ela. Soa ihany fa nanjary niharihary tsy amin'izao fotoana izao ihany fa tsy ho antsika ihany, noho izany dia efa nisy ny fitaovana mety kokoa eran'izao tontolo izao, ary ny Telepresence no malaza indrindra amin'izy ireo (amin'ny ankapobeny, misy koa scaffold avy amin'ny Google). Ny traikefanay amin'ny fampiasana azy dia mbola tsy dia lehibe loatra, fa efa manome antony hanoroana azy amin'ny "mpiara-miasa amin'ny fivarotana" - andramo!

Sal

Hafa avy amin'ny andiany toro-hevitra sy fika K8s:

Source: www.habr.com

Add a comment