Leideanna & cleasanna Kubernetes: faoi fhorbairt áitiúil agus Teileláithreacht

Leideanna & cleasanna Kubernetes: faoi fhorbairt áitiúil agus Teileláithreacht

Tá níos mó ceisteanna á gcur orainn faoi mhicrisheirbhísí a fhorbairt i Kubernetes. Is mian le forbróirí, go háirithe na teangacha ateangaireachta, cód a cheartú go tapa san IDE is fearr leo agus an toradh a fheiceáil gan fanacht le tógáil/imscaradh - gan ach F5 a bhrú. Agus nuair a tháinig sé chuig feidhmchlár monolithic, bhí sé go leor chun bunachar sonraí agus freastalaí gréasáin a shuiteáil go háitiúil (i Docker, VirtualBox ...), agus ansin taitneamh a bhaint as an bhforbairt láithreach. Le gearradh monoliths isteach i microservices agus teacht Kubernetes, le cuma spleáchais ar a chéile, gach rud fuair sé beagán níos deacra. Dá mhéad na micreasheirbhísí seo, is mó fadhbanna. Chun taitneamh a bhaint as an bhforbairt arís, ní mór duit níos mó ná coimeádán Docker amháin nó dhó a ardú, agus uaireanta fiú níos mó ná dosaen... Go ginearálta, is féidir go dtógfaidh sé seo go léir go leor ama, mar ní mór é a choinneáil cothrom le dáta freisin. .

Ag amanna éagsúla rinneamar iarracht réitigh éagsúla ar an bhfadhb. Agus tosóidh mé leis na réitigh oibre carntha nó go simplí “crutches”.

1. crutches

Tá an cumas ag formhór na IDEanna cód a chur in eagar go díreach ar an bhfreastalaí ag baint úsáide as FTP/SFTP. Tá an cosán seo an-soiléir agus shocraigh muid láithreach é a úsáid. Baineann a bhunúsacht leis na nithe seo a leanas:

  1. I pod na dtimpeallachtaí forbartha (dev/athbhreithniú), seoltar coimeádán breise le rochtain SSH agus seolann sé eochair SSH poiblí an fhorbróra a dhéanfaidh an t-iarratas a ghealladh/a imscaradh.
  2. Ag an gcéim init (laistigh den choimeádán prepare-app) an cód a aistriú chuig emptyDirrochtain a bheith agat ar an gcód ó na coimeádáin feidhmchláir agus ón bhfreastalaí SSH.

Leideanna & cleasanna Kubernetes: faoi fhorbairt áitiúil agus Teileláithreacht

Chun cur i bhfeidhm teicniúil scéime den sórt sin a thuiscint níos fearr, cuirfidh mé blúirí de na cumraíochtaí YAML i Kubernetes ar fáil.

Cumraíochtaí

1.1. luachanna.yaml

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

Anseo vasya.pupkin is é luach na hathróige ${GITLAB_USER_LOGIN}.

1.2. imscaradh.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. rún.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 }}

Teagmháil dheiridh

Ina dhiaidh sin níl fágtha ach aistriú athróga riachtanacha gitlab-ci.yml:

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: is féidir leis an bhforbróir a sheol an t-imscaradh nascadh de réir ainm na seirbhíse (conas rochtain a dheonú go slán ar an mbraisle, dúradh linn cheana) ó do dheasc trí SFTP agus cuir an cód in eagar gan fanacht go seachadfar é chuig an mbraisle.

Is réiteach iomlán oibre é seo, ach ó thaobh an chur chun feidhme de tá míbhuntáistí soiléire aige:

  • an gá atá le cairt Helm a bheachtú, rud a fhágann go mbeidh sé deacair é a léamh amach anseo;
  • ní féidir é a úsáid ach amháin ag an duine a d'imlonnaigh an tseirbhís;
  • ní mór duit cuimhneamh ansin é a shioncronú leis an eolaire áitiúil leis an gcód agus é a cheangal le Git.

2. Teileláithreacht

Tionscadail Teileláithreacht Tá aithne air le fada an lá, ach ní raibh muid, mar a deir siad, “ag dul timpeall chun triail a bhaint as i ndáiríre”. Mar sin féin, tá an t-éileamh tar éis a chuid oibre a dhéanamh agus anois táimid sásta ár dtaithí a roinnt, rud a d'fhéadfadh a bheith úsáideach do léitheoirí ár mblag - go háirithe ós rud é nach bhfuil aon ábhar eile faoi Theileláithreacht ar an mol fós.

I mbeagán focal, d'éirigh le gach rud nach raibh sé chomh scanrúil. Chuireamar gach gníomh a éilíonn an forbróir a fhorghníomhú i gcomhad téacs cairt Helm ar a dtugtar NOTES.txt. Mar sin, tar éis an tseirbhís a imscaradh chuig Kubernetes, feiceann an forbróir treoracha chun an timpeallacht forbartha áitiúil a sheoladh i loga poist 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
#########################################################################

Ní bheidh muid ag dul go mion ar na céimeanna a bhfuil cur síos orthu sa treoir seo... ach amháin an ceann deireanach. Cad a tharlaíonn le linn seoladh Telepresence?

Ag obair le teilealáithreacht

Ag am tosaithe (ag baint úsáide as an ordú deireanach a shonraítear sna treoracha thuas), leagamar síos:

  • ainmspás ina bhfuil an micreasheirbhís ar siúl;
  • ainmneacha an imscartha agus an choimeádáin ar mhaith linn dul isteach iontu.

Tá na hargóintí atá fágtha roghnach. Má idirghníomhaíonn ár seirbhís le agus le haghaidh an Kubernetes API Cruthaíodh ServiceAccount, ní mór dúinn teastais / comharthaí a chur ar ár deasc. Chun seo a dhéanamh, bain úsáid as an rogha --mount=true (Nó --mount=/dst_path), a chuirfidh an fhréamh (/) ón gcoimeádán Kubernetes chuig ár deasc. Tar éis seo, is féidir linn (ag brath ar an OS agus conas a sheoltar an feidhmchlár) na “eochracha” ón mbraisle a úsáid.

Ar dtús, déanaimis féachaint ar an rogha is uilíoch chun feidhmchlár a rith - i gcoimeádán Docker. Chun seo a dhéanamh úsáidfimid an eochair --docker-run agus cuir an t-eolaire leis an gcód isteach sa choimeádán: -v `pwd`:/app

Tabhair faoi deara le do thoil go nglactar leis go ritheann sé seo ón eolaire tionscadail. Cuirfear an cód iarratais sa chomhadlann /app i gcoimeádán.

Next: -v /tmp/app/var/run/secrets:/var/run/secrets — an t-eolaire a shuiteáil leis an teastas/comhartha i gcoimeádán.

Leanann an rogha seo ar deireadh leis an íomhá ina reáchtálfar an feidhmchlár. NB: Agus íomhá á thógáil, ní mór duit a shonrú CMDENTRYPOINT!

Cad go díreach a tharlóidh ina dhiaidh sin?

  • In Kubernetes, don Imscaradh sonraithe, athrófar líon na macasamhla go 0. Ina áit sin, seolfar Imscaradh nua - le coimeádán ionaid backend.
  • Seolfar 2 choimeádán ar an deasc: an chéad cheann le Telepresence (seolfaidh sé iarratais seachfhreastalaí ó/chuig Kubernetes), an dara ceann agus an feidhmchlár á fhorbairt.
  • Má chuirimid isteach sa choimeádán leis an iarratas, ansin beidh na hathróga ENV go léir a aistríodh ag Helm le linn imscaradh ar fáil dúinn, agus beidh gach seirbhís ar fáil freisin. Níl fágtha ach an cód a chur in eagar sa IDE is fearr leat agus taitneamh a bhaint as an toradh.
  • Ag deireadh na hoibre, ní mór duit ach an teirminéal ina bhfuil Telepresence ag rith a dhúnadh (cuir deireadh leis an seisiún le Ctrl + C) - stopfaidh coimeádáin docker ar an deasc, agus i Kubernetes fillfidh gach rud ar a staid tosaigh. Níl fágtha ach gealltanas a thabhairt, an MR a eisiúint agus é a aistriú chuig athbhreithniú/cumasc/… (ag brath ar do shreafaí oibre).

Mura dteastaíonn uainn an feidhmchlár a rith i gcoimeádán Docker - mar shampla, ní dhéanaimid forbairt i PHP, ach in Go, agus fós á thógáil go háitiúil - beidh seoladh Telepresence níos simplí fós:

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

Má fhaigheann an feidhmchlár rochtain ar Kubernetes API, beidh ort an t-eolaire eochracha a shuiteáil (https://www.telepresence.io/howto/volumes). Tá fóntais ann le haghaidh Linux préimh:

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

Tar éis seoladh Telepresence gan an rogha --docker-run beidh gach athróg timpeallachta ar fáil sa teirminéal reatha, mar sin ní mór an feidhmchlár a sheoladh ann.

NB: Nuair a bheidh tú ag úsáid, mar shampla, PHP, ní mór duit cuimhneamh ar op_cache, apc agus luasairí eile a dhíchumasú le haghaidh forbartha - ar shlí eile ní bheidh an toradh inmhianaithe mar thoradh ar eagarthóireacht an chóid.

Torthaí

Is fadhb í forbairt áitiúil le Kubernetes a bhfuil a réiteach ag fás i gcomhréir le scaipeadh an ardáin seo. Ag fáil iarratais ábhartha ó fhorbróirí (ónár gcliaint), thosaigh muid chun iad a réiteach leis an gcéad mhodh a bhí ar fáil, ach ní raibh a chruthú dóibh féin thar an tarraingt fada. Go fortunately, tá sé seo tar éis éirí soiléir, ní hamháin anois agus ní hamháin dúinn, agus mar sin tá modhanna níos oiriúnaí le feiceáil cheana féin ar fud an domhain, agus is é Telepresence an ceann is cáiliúla díobh (dála an scéil, tá freisin scafall ó Google). Níl an taithí atá againn ar é a úsáid chomh iontach fós, ach tugann sé cúis dúinn cheana féin é a mholadh dár “chomhghleacaithe sa siopa” - bain triail as!

PS

Eile ón tsraith leideanna & cleasanna K8s:

Foinse: will.com

Add a comment