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.
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:
- Mupodhi yenzvimbo dzekusimudzira (dev/wongororo), imwe mudziyo inotangwa ine SSH yekuwana uye kutumira yeruzhinji SSH kiyi yemugadziri achaita / kuendesa application.
- Padanho rekutanga (mukati memudziyo
prepare-app
) endesa kodhi kuemptyDir
kuve nekuwana kodhi kubva mumidziyo yekushandisa uye SSH server.
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
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,
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
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 --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
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.
PS
Zvimwe kubva kuK8s matipi & matipi akateedzana:
- Β«
Kubernetes matipi & matipi: tsika yekukanganisa mapeji muNGINX Ingress "; - Β«
Kuendesa zviwanikwa zvinoshanda musumbu kune Helm 2 manejimendi "; - Β«
Nezve node kugoverwa uye mitoro pawebhu application "; - Β«
Kuwana kune saiti dze dev "; - Β«
Kumhanyisa bootstrap kune yakakura dhatabhesi ".
Source: www.habr.com