
Kei te nui haere te patai mo te whakawhanake i nga ratonga moroiti ki Kubernetes. Ko nga kaiwhakawhanake, ina koa ko nga reo whakamaori, e hiahia ana kia tere te whakatika i te waehere i roto i o raatau IDE tino pai ka kite i te hua me te kore e tatari mo te hanga/whakamahinga - ma te pehi noa i te F5. A, no te taenga mai ki te tono monolithic, he nui ki te whakauru i tetahi papaaarangi me te tūmau tukutuku (i Docker, VirtualBox ...), katahi ka koa tonu ki te whakawhanaketanga. Na te tapahi o nga monoliths ki roto i nga ratonga miihini me te taenga mai o Kubernetes, me te ahua o te whakawhirinaki ki a raatau ano, nga mea katoa . Ko te nui ake o enei ratonga miihini, ka nui ake nga raru. Kia pai ai ki te whakawhanaketanga, me whakaara ake i te kotahi, e rua ranei nga ipu Docker, a i etahi wa neke atu i te tekau ma rua... I te nuinga o te waa, he roa te waa, na te mea me mau tonu ki te waa. .
I etahi wa rereke i whakamatauhia e matou etahi otinga rereke mo te raruraru. A ka tiimata ahau me nga mahi kua whakaemihia, he "tootoo" noa ranei.
1. Tootoo
Ko te nuinga o nga IDE he kaha ki te whakatika tika i te waehere i runga i te tūmau ma te whakamahi i te FTP/SFTP. He tino kitea tenei ara, ka whakatau tonu matou ki te whakamahi. Ko tona ahuatanga ka heke ki nga mea e whai ake nei:
- I roto i te putunga o nga taiao whanaketanga (dev/arotake), ka whakarewahia he ipu taapiri me te uru SSH me te tuku whakamua i te taviri SSH tūmatanui o te kaiwhakawhanake ka tukuna/whakamahi te tono.
- I te wa tuatahi (i roto i te ipu
prepare-app) whakawhiti te waehere kiemptyDirkia whai waahi ki te waehere mai i nga ipu tono me te tūmau SSH.

Kia pai ake ai te mohio ki te whakatinanatanga hangarau o taua kaupapa, ka hoatu e ahau etahi wahanga o nga whirihoranga YAML whai waahi ki Kubernetes.
Whirihoranga
1.1. uara.yaml
ssh_pub_key:
vasya.pupkin: <ssh public key in base64>
ko te reira vasya.pupkin ko te uara o te taurangi ${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. ngaro.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 }}
Tapa whakamutunga
I muri i tera ko te toenga ko te whakawhiti :
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: ka taea e te kaiwhakawhanake nana i whakarewa te tuku te hono ma te ingoa ratonga (me pehea te tuku uru ki te tautau, ) mai i to papamahi ma te SFTP me te whakatika i te waehere me te kore e tatari kia tukuna atu ki te kohinga.
He otinga tino mahi tenei, engari mai i te tirohanga whakatinanatanga he tino ngoikoretanga:
- te hiahia ki te whakamahine i te tūtohi Helm, he uaua ki te panui a muri ake nei;
- ka taea anake te whakamahi e te tangata nana i tuku te ratonga;
- Me mahara koe ki te tukutahi me te raarangi rohe me te waehere ka tuku ki a Git.
2. Telepresence
Ko te kaupapa kua mohiotia mo te wa roa, engari ko matou, e kii ana ratou, "kaore i kaha ki te whakamatau i te mahi." Heoi, kua oti te mahi a te tono a inaianei kei te harikoa matou ki te whakapuaki i o maatau wheako, tera pea ka whai hua ki nga kaipanui o ta maatau blog - ina koa kaore ano etahi atu korero mo Telepresence i runga i te tari.
I roto i te poto, i puta nga mea katoa kaore i tino mataku. I tukuna e matou nga mahi katoa e tika ana kia mahia e te kaiwhakawhanake ki roto i te konae kuputuhi tūtohi Helm e kiia nei NOTES.txt. Na, i muri i te tuku i te ratonga ki a Kubernetes, ka kite te kaiwhakawhanake i nga tohutohu mo te whakarewa i te taiao dev a-rohe i roto i te raarangi mahi a 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
#########################################################################E kore matou e noho taipitopito i runga i nga kaupae e whakaahuatia ana i roto i tenei tohutohu... haunga te mea whakamutunga. He aha te mea i te wa o te whakarewatanga o Telepresence?
Te mahi me te Telepresence
I te tiimatanga (ma te whakamahi i te whakahau whakamutunga kua tohua i roto i nga tohutohu i runga ake nei), ka tautuhia e matou:
- mokowā ingoa kei te whakahaeretia te microservice;
- ingoa o te horahanga me te ipu e hiahia ana matou ki te kuhu.
Ko nga toenga tohenga he mea whiriwhiri. Mēnā e pāhekoheko ana tā mātou ratonga me te API Kubernetes , me whakairihia nga tiwhikete/tohu ki runga i to maatau papamahi. Ki te mahi i tenei, whakamahia te kōwhiringa --mount=true (ranei --mount=/dst_path), ka whakairihia te pakiaka (/) mai i te ipu Kubernetes ki to maatau papamahi. I muri i tenei, ka taea e tatou (i runga i te OS me te pehea e whakarewahia ai te tono) te whakamahi i nga "ki" mai i te kohinga.
Tuatahi, me titiro tatou ki te whiringa whanui mo te whakahaere tono - kei roto i te ipu Docker. Ki te mahi i tenei ka whakamahia e matou te ki --docker-run ka whakairihia te whaiaronga me te waehere ki roto i te ipu: -v `pwd`:/app
Kia mahara kei te rere tenei mai i te raarangi kaupapa. Ka whakauruhia te waehere tono ki te raarangi /app i roto i te ipu.
Tō muri mai: -v /tmp/app/var/run/secrets:/var/run/secrets — ki te whakairi i te whaiaronga me te tiwhikete/tohu ki roto i te ipu.
Ko tenei whiringa ka whai muri i te ahua e rere ai te tono. NB: I te wa e hanga ana i tetahi ahua, me tohu koe CMD ranei ENTRYPOINT!
He aha te mea ka tupu i muri mai?
- I roto i nga Kubernetes, mo te Whakaritenga kua tohua, ka huri te maha o nga tauira ki te 0. Engari, ka whakarewahia he Tukunga hou - me te ipu whakakapi.
backend. - Ka whakarewahia nga ipu e 2 ki runga i te papamahi: ko te tuatahi me te Telepresence (ka tono takawaenga mai i/ki Kubernetes), ko te tuarua kei te whanakehia te tono.
- Mena ka uru tatou ki roto i te ipu me te tono, katahi ka watea mai ki a maatau nga taurangi ENV katoa i whakawhitia e Helm i te wa tukunga, ka watea hoki nga ratonga katoa. Ko nga mea e toe ana ko te whakatika i te waehere i roto i to IDE tino pai me te pai ki te hua.
- I te mutunga o te mahi, me kati noa koe i te tauranga kei te whakahaere a Telepresence (whakamutua te huihuinga me Ctrl+C) - Ka mutu nga ipu Docker i runga i te papamahi, a ki Kubernetes ka hoki nga mea katoa ki tona ahuatanga tuatahi. Ko nga mea e toe ana ko te tuku, te whakaputa i te MR ka whakawhiti ki te arotake/hanumi/… (i runga i o rerengamahi).
Mena kaore matou e hiahia ki te whakahaere i te tono ki roto i te ipu Docker - hei tauira, kaore matou e whakawhanake i roto i te PHP, engari i roto i te Haere, ka hanga tonu i te rohe - ka ngawari ake te whakarewatanga o Telepresence:
telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name }}:backend --mount=trueЕсли приложение обращается к Kubernetes API, потребуется смонтировать директорию с ключами (https://www.telepresence.io/howto/volumes). Для Linux есть утилита :
proot -b $TELEPRESENCE_ROOT/var/run/secrets/:/var/run/secrets bash I muri i te whakarewatanga o Telepresence kaore he whiringa --docker-run ka watea nga taurangi taiao katoa ki te tauranga o naianei, no reira me whakarewa te tono ki roto.
NB: I te wa e whakamahi ana, hei tauira, PHP, me mahara koe ki te whakakore i nga momo op_cache, apc me etahi atu whakatere mo te whakawhanaketanga - mena ko te whakarereke i te waehere kaore e puta te hua e hiahiatia ana.
Ngā putanga
Ko te whakawhanaketanga a-rohe me Kubernetes he raruraru kei te tipu haere te otinga ki te horahanga o tenei turanga. I te whiwhi i nga tono e tika ana mai i nga kaiwhakawhanake (mai i o taatau kaihoko), ka tiimata matou ki te whakaoti i a raatau me nga huarahi tuatahi e waatea ana, heoi, kaore i whakamatauhia i roto i te waa roa. Waimarie, kua kitea tenei ehara i tenei wa anake, ehara i a maatau anake, no reira kua puta kee nga tikanga pai ake i te ao, a ko Telepresence te mea tino rongonui o ratou (ma te ara, kei reira ano hoki. mai i a Google). Ko to maatau wheako ki te whakamahi kaore ano kia tino pai, engari kua homai e matou he take ki te taunaki ki o maatau "hoa mahi i te toa" - whakamatauria!
PS
Ko etahi atu mai i nga raupapa tohutohu me nga tinihanga K8s:
- «";
- «";
- «";
- «";
- «".
Source: will.com
