Kubernetes matipi & matipi: nezve budiriro yenzvimbo uye Telepresence

Kubernetes matipi & matipi: nezve budiriro yenzvimbo uye Telepresence

Isu tiri kuwedzera kubvunzwa nezve kugadzira microservices muKubernetes. Vagadziri, kunyanya yemitauro yakadudzirwa, vanoda kukurumidza kugadzirisa kodhi muIDE yavo yavanofarira uye voona mhedzisiro vasina kumirira kuvaka / kutumira - nekungodzvanya F5. Uye kana zvasvika kune monolithic application, yaive yakakwana kuisa dhatabhesi uye webhu server (muDocker, VirtualBox ...), uye wobva wanakidzwa nekukurumidza. Nekucheka kwemonoliths kuita microservices uye kusvika kwaKubernetes, nekuonekwa kwekutsamira pane mumwe nemumwe, zvese. zvakawedzera kuoma. Kuwanda kweaya mamicroservices, anowedzera matambudziko. Kuti unakirwe nebudiriro zvakare, iwe unofanirwa kusimudza zvinopfuura imwe kana maviri maDocker midziyo, uye dzimwe nguva kunyange anopfuura gumi nemaviri ... Kazhinji, izvi zvese zvinogona kutora nguva yakawanda, sezvo zvichifanirawo kuchengetwa kusvika pari zvino. .

Panguva dzakasiyana takaedza mhinduro dzakasiyana dzedambudziko. Uye ini ndichatanga neakaunganidzwa workaround kana kungoti "madondoro".

1. Madondoro

MaIDE mazhinji ane kugona kugadzirisa kodhi zvakananga pane sevha uchishandisa FTP/SFTP. Iyi nzira iri pachena uye isu takabva tangofunga kuishandisa. Hunhu hwayo hunoenderana nekutevera:

  1. Mupodhi yenzvimbo dzekusimudzira (dev/wongororo), imwe mudziyo inotangwa ine SSH yekuwana uye kutumira yeruzhinji SSH kiyi yemugadziri achaita / kuendesa application.
  2. Padanho rekutanga (mukati memudziyo prepare-app) endesa kodhi ku emptyDirkuve nekuwana kodhi kubva mumidziyo yekushandisa uye SSH server.

Kubernetes matipi & matipi: nezve budiriro yenzvimbo uye Telepresence

Kuti unzwisise zvirinani kuita kwehunyanzvi kwechirongwa chakadaro, ini ndinopa zvimedu zvezvinosanganisirwa YAML zvigadziriso muKubernetes.

Configurations

1.1. values.yaml

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

zviri vasya.pupkin ndiko kukosha kwekusiyana ${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. zvakavanzika.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 }}

kubata kwekupedzisira

Mushure maizvozvo chasara kuchinjisa zvinodiwa 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: mugadziri akatanga kutumirwa anogona kubatana nezita rebasa (nzira yekupa zvakachengeteka kupinda musumbu, takatotaura) kubva padesktop yako kuburikidza neSFTP uye gadzirisa kodhi pasina kumirira kuti iunzwe kune sumbu.

Iyi imhinduro inoshanda zvachose, asi kubva pakuona kwekuita ine zvipingamupinyi zviri pachena:

  • kudiwa kwekunatsa Helm chart, izvo zvinoita kuti zvive zvakaoma kuverenga mune ramangwana;
  • inogona kushandiswa chete nemunhu akaisa sevhisi;
  • iwe unofanirwa kuyeuka kuti wobva waiwiriranisa nedhairekitori remunharaunda nekodhi uye woiisa kuGit.

2. Telepresence

Iyo purojekiti telepresence yave ichizivikanwa kwenguva yakareba, asi isu, sezvavanotaura, "hatina kutenderera pakuiedza zvakanyanya mukuita." Nekudaro, kudiwa kwaita basa rayo uye ikozvino tinofara kugovera ruzivo rwedu, izvo zvingave zvinobatsira kune vaverengi veblog redu - kunyanya sezvo pasati pave nezvimwe zvinhu nezve Telepresence pane hub parizvino.

Muchidimbu, zvese zvakaratidza kuti hazvina kutyisa. Isu takaisa zvese zviito zvinoda kuurayiwa kune chikamu chemugadziri mune Helm chati mameseji faira inonzi NOTES.txt. Saka, mushure mekuendesa sevhisi kuKubernetes, mugadziri anoona mirairo yekutangisa nharaunda dev nharaunda muGitLab basa regi:

!!! Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСрвиса локально, Π² составС 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
#########################################################################

Hatingagari zvakadzama pamatanho anotsanangurwa mukuraira uku ... kunze kweyekupedzisira. Chii chinoitika panguva yekuvhurwa kweTelepresence?

Kushanda neTelepresence

Pakutanga (tichishandisa murairo wekupedzisira unotsanangurwa mumirairo iri pamusoro), tinoisa:

  • namespace umo iyo microservice iri kushanda;
  • mazita ekutumirwa uye mudziyo watinoda kupinda.

Nharo dzakasara ndedzokusarudza. Kana sevhisi yedu ichidyidzana neiyo Kubernetes API ServiceAccount yakagadzirwa, tinoda kukwira zvitupa/tokens padesktop yedu. Kuti uite izvi, shandisa sarudzo --mount=true (kana --mount=/dst_path), iyo ichaisa mudzi (/) kubva kuKubernetes mudziyo kune desktop yedu. Mushure meizvi, isu tinokwanisa (zvichienderana neOS uye kuti application yakatangwa) shandisa "kiyi" kubva musumbu.

Kutanga, ngatitarisei iyo yakasarudzika sarudzo yekumhanyisa application - mumudziyo weDocker. Kuti tiite izvi tichashandisa kiyi --docker-run uye isa dhairekitori nekodhi mumudziyo: -v `pwd`:/app

Ndokumbira utarise kuti izvi zvinotora kubva kudhairekitori reprojekiti. Iyo kodhi yekushandisa ichaiswa mudhairekitori /app mumudziyo.

Zvadaro: -v /tmp/app/var/run/secrets:/var/run/secrets - kukwidza dhairekitori nechitupa / chiratidzo mumudziyo.

Iyi sarudzo inozoteverwa nemufananidzo umo iyo application ichamhanya. NB: Paunenge uchigadzira chifananidzo, unofanirwa kutsanangura CMD kana ENTRYPOINT!

Chii chaizvo chichazoitika?

  • MuKubernetes, kune iyo yakatsanangurwa Deployment, nhamba ye replicas ichachinjwa kuti 0. Pane kudaro, itsva Deployment ichatangwa - ine chinotsiva mudziyo. backend.
  • 2 midziyo ichavhura padesktop: yekutanga neTelepresence (ichaita zvikumbiro zveproxy kubva/kuKubernetes), yechipiri ine application iri kuvandudzwa.
  • Kana tikapinza mugaba nechikumbiro, ipapo ese ENV akasiyana anotamiswa neHelm panguva yekuendesa anozovepo kwatiri, uye masevhisi ese achavepo zvakare. Chasara ndechekugadzirisa kodhi mune yako yaunofarira IDE uye unakirwe nemugumisiro.
  • Pakupera kwebasa, iwe unongoda kuvhara iyo terminal iyo Telepresence iri kushanda (kumisa chikamu neCtrl + C) - Docker midziyo inomira padesktop, uye muKubernetes zvese zvinodzokera kune yayo yekutanga mamiriro. Chasara kuzvipira, kuburitsa iyo MR uye kuiendesa kuti iongorore / kubatanidza /… (zvinoenderana nekufambiswa kwebasa rako).

Kana isu tisingade kumhanyisa application mumudziyo weDocker - semuenzaniso, isu tinokudziridza kwete muPHP, asi muGo, uye tichirivaka munharaunda - kutanga Telepresence kuchave nyore:

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

Kana iyo application ikawana iyo Kubernetes API, iwe unozofanirwa kukwira makiyi dhairekitori (https://www.telepresence.io/howto/volumes). Pane chishandiso cheLinux mudzi:

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

Mushure mekutangisa Telepresence pasina sarudzo --docker-run ese akasiyana nharaunda anozowanikwa mune yazvino terminal, saka application inofanirwa kutangwa mairi.

NB: Paunenge uchishandisa, semuenzaniso, PHP, unofanirwa kuyeuka kudzima akasiyana op_cache, apc uye mamwe accelerators ebudiriro - zvikasadaro kugadzirisa kodhi hakuzotungamira kune yaunoda mhedzisiro.

Migumisiro

Kuvandudza munharaunda neKubernetes idambudziko rine mhinduro iri kukura maererano nekupararira kwepuratifomu iyi. Kugamuchira zvikumbiro zvakakodzera kubva kuvagadziri (kubva kune vatengi vedu), takatanga kuzvigadzirisa nekutanga kuwanikwa nzira, izvo, zvisinei, hazvina kuzviratidza ivo pamusoro penguva refu. Neraki, izvi zvave pachena kwete ikozvino uye kwete kwatiri chete, saka nzira dzakakodzera dzakatoonekwa munyika, uye Telepresence ndiyo inonyanya kuzivikanwa kwavari (nenzira, kune zvakare. skaffold kubva kuGoogle). Chiitiko chedu chekuishandisa hachisati chanyanya kukura, asi chinototipa chikonzero chekuchikurudzira kune "vatinoshanda navo muchitoro" - edza!

PS

Zvimwe kubva kuK8s matipi & matipi akateedzana:

Source: www.habr.com

Voeg