Molaidhean is cleasan Kubernetes: mu leasachadh ionadail agus Telepresence

Molaidhean is cleasan Kubernetes: mu leasachadh ionadail agus Telepresence

Thathas a’ faighneachd dhuinn barrachd is barrachd mu bhith a’ leasachadh meanbh-sheirbheisean ann an Kubernetes. Tha luchd-leasachaidh, gu sònraichte de chànanan eadar-mhìneachaidh, airson còd a cheartachadh gu sgiobalta anns an IDE as fheàrr leotha agus an toradh fhaicinn gun a bhith a’ feitheamh ri togail / cleachdadh - le bhith dìreach a’ putadh F5. Agus nuair a thàinig e gu tagradh monolithic, bha e gu leòr airson stòr-dàta agus frithealaiche lìn a chuir a-steach gu h-ionadail (ann an Docker, VirtualBox ...), agus an uairsin tlachd fhaighinn às an leasachadh sa bhad. Le gearradh monoliths gu meanbh-sheirbheisean agus teachd Kubernetes, le coltas eisimeileachd air a chèile, a h-uile dad dh'fhàs e beagan na bu duilghe. Mar as motha de na microservices sin, is ann as motha de dhuilgheadasan. Gus leasachadh a mhealtainn a-rithist, feumaidh tu barrachd air aon no dhà de shoithichean Docker a thogail, agus uaireannan eadhon barrachd air dusan ... San fharsaingeachd, faodaidh seo tòrr ùine a thoirt, oir feumar a chumail suas cuideachd. .

Aig diofar amannan dh’ fheuch sinn diofar fhuasglaidhean air an duilgheadas. Agus tòisichidh mi leis na h-obraichean cruinnichte no dìreach “crutches”.

1. Crutches

Tha comas aig a’ mhòr-chuid de IDEan còd a dheasachadh gu dìreach air an fhrithealaiche a’ cleachdadh FTP/SFTP. Tha an t-slighe seo gu math follaiseach agus chuir sinn romhainn sa bhad a chleachdadh. Tha a bhunait an urra ris na leanas:

  1. Ann am pod na h-àrainneachdan leasachaidh (dev/lèirmheas), thèid soitheach a bharrachd a chuir air bhog le ruigsinneachd SSH agus a’ cur air adhart iuchair SSH poblach an leasaiche a bhios a’ gealltainn / a’ cleachdadh an tagraidh.
  2. Aig an ìre tòiseachaidh (taobh a-staigh an t-soithich prepare-app) gluais an còd gu emptyDirgus faighinn chun chòd bho na soithichean tagraidh agus an t-seirbheisiche SSH.

Molaidhean is cleasan Kubernetes: mu leasachadh ionadail agus Telepresence

Gus tuigse nas fheàrr fhaighinn air buileachadh teignigeach a leithid de sgeama, bheir mi seachad pìosan de na rèiteachaidhean YAML a tha an sàs ann an Kubernetes.

Rèiteachadh

1.1. luachan.yaml

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

tha e vasya.pupkin is e luach an caochlaideach ${GITLAB_USER_LOGIN}.

1.2. cleachdadh.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. dìomhair.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 }}

Cuairt mu dheireadh

Às deidh sin chan eil air fhàgail ach gluasad caochladairean gitlab-ci.yml riatanach:

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: faodaidh an leasaiche a chuir an cleachdadh air bhog ceangal a dhèanamh le ainm seirbheis (mar a bheir e cothrom tèarainte don bhuidheann, dh'innis sinn cheana) bhon deasg agad tro SFTP agus deasaich an còd gun a bhith a’ feitheamh gus an tèid a lìbhrigeadh don bhuidheann.

Is e fuasgladh gu tur ag obair a tha seo, ach bho shealladh buileachaidh tha eas-bhuannachdan follaiseach ann:

  • an fheum air clàr Helm ùrachadh, a tha ga dhèanamh duilich a leughadh san àm ri teachd;
  • chan urrainnear a chleachdadh ach leis an neach a chuir an t-seirbheis gu feum;
  • feumaidh tu cuimhneachadh an uairsin a shioncronachadh leis an eòlaire ionadail leis a’ chòd agus a ghealltainn gu Git.

2. Tele-làthaireachd

Am pròiseact Teile-liochd air a bhith ainmeil airson ùine mhòr, ach cha d’ fhuair sinn, mar a chanas iad, “timcheall air feuchainn air ann an cleachdadh.” Ach, tha iarrtas air a h-obair a dhèanamh agus a-nis tha sinn toilichte ar n-eòlas a cho-roinn, a dh’ fhaodadh a bhith feumail do luchd-leughaidh ar blog - gu sònraichte leis nach eil stuthan sam bith eile air a bhith ann mu Telepresence air a ’mheadhan fhathast.

Ann an ùine ghoirid, cha robh a h-uile dad cho eagallach. Chuir sinn a h-uile gnìomh a dh’ fheumas a chuir gu bàs bhon leasaiche ann am faidhle teacsa cairt Helm ris an canar NOTES.txt. Mar sin, às deidh dha an t-seirbheis a chuir gu Kubernetes, chì an leasaiche stiùireadh airson an àrainneachd leasachaidh ionadail a chuir air bhog ann an log obrach 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
#########################################################################

Cha bhith sinn a’ gabhail còmhnaidh gu mionaideach air na ceumannan a tha air am mìneachadh san stiùireadh seo… ach a-mhàin an tè mu dheireadh. Dè thachras nuair a thèid Telepresence a chuir air bhog?

Ag obair le telepreence

Aig toiseach tòiseachaidh (a’ cleachdadh an àithne mu dheireadh a tha air a shònrachadh anns an stiùireadh gu h-àrd), shuidhich sinn:

  • ainm-àite anns a bheil am microservice a 'ruith;
  • ainmean an t-suidheachaidh agus an soitheach a tha sinn airson a dhol a-steach.

Tha na h-argamaidean a tha air fhàgail roghainneil. Ma tha an t-seirbheis againn ag eadar-obrachadh le agus airson an Kubernetes API ServiceAccount air a chruthachadh, feumaidh sinn teisteanasan / comharran a chuir air an deasg againn. Gus seo a dhèanamh, cleachd an roghainn --mount=true (no --mount=/dst_path), a chuireas suas am freumh (/) bhon ghobhar Kubernetes chun deasg againn. Às deidh seo, is urrainn dhuinn (a rèir an OS agus mar a thèid an tagradh a chuir air bhog) na “iuchraichean” bhon bhuidheann a chleachdadh.

An toiseach, leig dhuinn sùil a thoirt air an roghainn as uile-choitcheann airson tagradh a ruith - ann an soitheach Docker. Gus seo a dhèanamh cleachdaidh sinn an iuchair --docker-run agus cuir a-steach an eòlaire leis a’ chòd a-steach don ghobhar: -v `pwd`:/app

Thoir an aire gu bheil seo a’ gabhail ris gu bheil e a’ ruith bho eòlaire a’ phròiseict. Thèid an còd tagraidh a chuir a-steach don eòlaire /app ann an soitheach.

Air adhart: -v /tmp/app/var/run/secrets:/var/run/secrets - gus an eòlaire a chuir suas leis an teisteanas / comharra a-steach do shoitheach.

Tha an roghainn seo air a leantainn mu dheireadh leis an ìomhaigh anns am bi an tagradh a’ ruith. NB: Nuair a bhios tu a 'togail ìomhaigh, feumaidh tu sònrachadh CMD no ENTRYPOINT!

Dè dìreach a thachras an ath rud?

  • Ann an Kubernetes, airson an cleachdadh ainmichte, thèid an àireamh de mhac-samhail atharrachadh gu 0. An àite sin, thèid Cleachdadh ùr a chuir air bhog - le inneal-ionaid. backend.
  • Thèid 2 shoithichean a chuir air bhog air an deasg: a’ chiad fhear le Telepresence (bidh e ag iarraidh iarrtasan bho/gu Kubernetes), an dàrna fear leis an tagradh ga leasachadh.
  • Ma chuireas sinn an gnìomh a-steach don ghobhar leis an tagradh, bidh na caochladairean ENV uile air an gluasad le Helm aig àm cleachdadh rim faighinn dhuinn, agus bidh a h-uile seirbheis ri fhaighinn cuideachd. Chan eil air fhàgail ach an còd anns an IDE as fheàrr leat a dheasachadh agus an toradh a mhealtainn.
  • Aig deireadh na h-obrach, cha leig thu leas ach an togalach anns a bheil Telepresence a’ ruith a dhùnadh (cuir crìoch air an t-seisean le Ctrl + C) - stadaidh soithichean docker air an deasg, agus ann an Kubernetes tillidh a h-uile càil chun chiad staid aige. Chan eil air fhàgail ach gealltainn, an MR a chuir a-mach agus a ghluasad gu ath-sgrùdadh / tighinn còmhla /… (a rèir do shruth-obrach).

Mura h-eil sinn airson an tagradh a ruith ann an soitheach Docker - mar eisimpleir, bidh sinn a’ leasachadh chan ann ann am PHP, ach ann an Go, agus fhathast ga thogail gu h-ionadail - bidh cur air bhog Telepresence eadhon nas sìmplidh:

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

Ma gheibh an aplacaid cothrom air Kubernetes API, feumaidh tu an eòlaire iuchraichean a chuir suas (https://www.telepresence.io/howto/volumes). Tha goireas ann airson Linux freumh:

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

An dèidh a chur air bhog Telepresence gun an roghainn --docker-run bidh a h-uile caochladair àrainneachd ri fhaighinn anns a’ chrìoch gnàthach, agus mar sin feumar an tagradh a chuir air bhog ann.

NB: Nuair a bhios tu a’ cleachdadh, mar eisimpleir, PHP, feumaidh tu cuimhneachadh gun cuir thu à comas diofar op_cache, apc agus luathaichean eile airson leasachadh - air neo cha lean deasachadh a’ chòd ris an toradh a tha thu ag iarraidh.

Builean

Tha leasachadh ionadail le Kubernetes na dhuilgheadas aig a bheil fuasgladh a’ fàs a rèir sgaoileadh an àrd-ùrlar seo. A 'faighinn iarrtasan buntainneach bho luchd-leasachaidh (bho ar luchd-dèiligidh), thòisich sinn air am fuasgladh leis a' chiad dhòigh a bha rim faotainn, ach, ge-tà, cha do dhearbh iad iad fhèin thairis air an t-slighe fhada. Gu fortanach, tha seo air a bhith follaiseach chan ann a-mhàin a-nis agus chan ann a-mhàin dhuinne, agus mar sin tha dòighean nas freagarraiche air nochdadh san t-saoghal mar-thà, agus is e Telepresence an fheadhainn as ainmeil dhiubh (co-dhiù, tha e ann cuideachd. sgafaill bho Google). Chan eil ar n-eòlas air a bhith ga chleachdadh fhathast cho math, ach tha e mar-thà a’ toirt adhbhar dhuinn a mholadh dha ar “co-obraichean sa bhùth” - feuch e!

PS

Eile bhon t-sreath molaidhean & cleasan K8s:

Source: www.habr.com

Cuir beachd ann