Ndụmọdụ Kubernetes & aghụghọ: gbasara mmepe obodo na Telepresence

Ndụmọdụ Kubernetes & aghụghọ: gbasara mmepe obodo na Telepresence

A na-ajụkarị anyị gbasara ịzụlite microservices na Kubernetes. Ndị mmepe, ọkachasị nke asụsụ ndị a na-atụgharị, chọrọ imezi koodu ngwa ngwa na IDE kachasị amasị ha wee hụ nsonaazụ na-echeghị maka nrụpụta/mbunye - site na ịpị F5. Na mgbe ọ bịara na ngwa monolithic, o zuru ezu iji wụnye nchekwa data na sava weebụ (na Docker, VirtualBox ...), wee nwee mmasị na mmepe ozugbo. Site na mbelata monoliths n'ime microservices na mbata nke Kubernetes, na ọdịdị nke ịdabere na ibe ya, ihe niile. o nwetara ntakịrị ihe siri ike. Ka n'ime obere ọrụ ndị a, ka nsogbu ka ukwuu. Iji nụ ụtọ mmepe ọzọ, ịkwesịrị ịkwalite ihe karịrị otu ma ọ bụ abụọ Docker, na mgbe ụfọdụ ọbụna ihe karịrị iri na abuo ... N'ozuzu, ihe a niile nwere ike iwe ogologo oge, ebe ọ bụ na ọ dịkwa mkpa ka ọ dị ọhụrụ. .

N'oge dị iche iche anyị gbalịrị ụzọ dị iche iche maka nsogbu ahụ. M ga-amalite site na nchikota na-arụ ọrụ ma ọ bụ nanị "crutches".

1. crutches

Ọtụtụ IDE nwere ikike iji FTP/SFTP dezie koodu ozugbo na sava. Ụzọ a doro anya ma anyị kpebiri ozugbo iji ya. Isi ya gbadara na nke a:

  1. N'ime mpaghara mmepe mmepe (dev/nyocha), a na-ewepụta akpa ọzọ nwere ohere SSH ma na-ebuga igodo SSH ọha nke onye nrụpụta ga-eme/ebuga ngwa ahụ.
  2. N'oge init (n'ime akpa ahụ prepare-app) nyefee koodu na emptyDirka ịnweta koodu site na ngwa ngwa na ihe nkesa SSH.

Ndụmọdụ Kubernetes & aghụghọ: gbasara mmepe obodo na Telepresence

Iji ghọta nke ọma mmejuputa teknuzu nke atụmatụ dị otú ahụ, m ga-ewepụta iberibe nhazi YAML metụtara na Kubernetes.

Nhazi

1.1. ụkpụrụ.yaml

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

ọ bụ vasya.pupkin bụ uru nke mgbanwe ${GITLAB_USER_LOGIN}.

1.2. ntinye.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. nzuzo.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 }}

mmetụ ikpeazụ

Mgbe nke ahụ gasịrị, ihe niile fọdụrụ bụ ịnyefe achọrọ 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: onye nrụpụta malitere mbugharị ahụ nwere ike jikọọ site na aha ọrụ (otu esi enye ohere ịnweta ụyọkọ ahụ, anyị agwalarị) site na desktọpụ gị site na SFTP wee dezie koodu ahụ na-echeghị ka ebuga ya na ụyọkọ.

Nke a bụ ngwọta na-arụ ọrụ kpam kpam, mana site na echiche mmejuputa, ọ nwere ihe ọghọm doro anya:

  • mkpa iji nụchaa chaatị Helm, nke na-eme ka ọ sie ike ịgụ n'ọdịnihu;
  • enwere ike iji ya naanị onye butere ọrụ ahụ;
  • Ikwesiri icheta ka mekọrịta ya na ndekọ mpaghara na koodu ma nyefee ya na Git.

2. Ọnụnọ telefon

Ọrụ ahụ Ekwentị amatala kemgbe ogologo oge, mana anyị, dị ka ha na-ekwu, "anaghị agbalịsi ike na-anwale ya na omume." Otú ọ dị, ọchịchọ emeela ọrụ ya ma ugbu a, anyị nwere obi ụtọ ịkọrọ anyị ahụmahụ, nke nwere ike ịba uru nye ndị na-agụ blọgụ anyị - karịsịa ebe ọ bụ na enweghi ihe ndị ọzọ gbasara Telepresence na oghere ma.

Na nkenke, ihe niile tụgharịrị na-atụghị egwu. Anyị debere omume niile chọrọ ogbugbu n'akụkụ onye nrụpụta na faịlụ ederede Helm a na-akpọ NOTES.txt. Yabụ, mgbe ibuga ọrụ ahụ na Kubernetes, onye nrụpụta ahụ na-ahụ ntuziaka maka ibido mpaghara dev mpaghara na ndekọ ọrụ 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
#########################################################################

Anyị agaghị ebi n'ụzọ zuru ezu na usoro ndị a kọwara na ntụziaka a ... ma e wezụga nke ikpeazụ. Kedu ihe na-eme n'oge mmalite nke Telepresence?

Na-arụ ọrụ na Telepresence

Na mmalite (iji iwu ikpeazụ akọwapụtara na ntuziaka dị n'elu), anyị na-edozi:

  • aha oghere nke microservice na-agba ọsọ;
  • aha nke ntinye na akpa anyị chọrọ ịbanye.

Arụmụka ndị fọdụrụ bụ nhọrọ. Ọ bụrụ na ọrụ anyị na-emekọrịta ihe yana maka Kubernetes API Emepụtara akaụntụ Service, anyị kwesịrị ịkwanye asambodo/token na desktọpụ anyị. Iji mee nke a, jiri nhọrọ --mount=true (ma ọ bụ --mount=/dst_path), nke ga-ebunye mgbọrọgwụ (/) site na akpa Kubernetes na desktọpụ anyị. Mgbe nke a gasịrị, anyị nwere ike (dabere na OS na otu esi malite ngwa ahụ) jiri "igodo" site na ụyọkọ ahụ.

Nke mbụ, ka anyị leba anya na nhọrọ kachasị nke ụwa niile maka ịme ngwa - n'ime akpa Docker. Iji mee nke a, anyị ga-eji igodo --docker-run ma tinye akwụkwọ ndekọ aha na koodu n'ime akpa: -v `pwd`:/app

Biko mara na nke a na-eche na ọ na-agba ọsọ site na ndekọ ọrụ. A ga-etinye koodu ngwa ahụ na ndekọ /app n'ime akpa.

Ọzọ: -v /tmp/app/var/run/secrets:/var/run/secrets - ka ebugo ndekọ na akwụkwọ/token n'ime akpa.

Nhọrọ a na-esote foto nke ngwa ahụ ga-arụ ọrụ. NB: Mgbe ị na-ewu ihe onyonyo, ị ga-ezipụta CMD ma ọ bụ ENTRYPOINT!

Gịnị kpọmkwem ga-eme na-esote?

  • Na Kubernetes, maka ntinye a kapịrị ọnụ, a ga-agbanwe ọnụọgụ nke oyiri ka ọ bụrụ 0. Kama nke ahụ, a ga-ewepụta ntinye ọhụrụ - ya na akpa dochie anya. backend.
  • 2 akpa ga-amalite na desktọpụ: nke mbụ na Telepresence (ọ ga-abụ onye nnọchiteanya sitere na / na Kubernetes), nke abụọ na-emepụta ngwa ahụ.
  • Ọ bụrụ na anyị ejiri ngwa ahụ tinye n'ime akpa ahụ, mgbe ahụ mgbanwe niile ENV nke Helm bufere n'oge mbugharị ga-adị anyị, yana ọrụ niile ga-adịkwa. Naanị ihe fọdụrụ bụ idezi koodu na IDE ọkacha mmasị gị wee nwee ọ enjoyụ na nsonaazụ ya.
  • Na njedebe nke ọrụ ahụ, naanị ị ga-emechi ọnụ nke Telepresence na-agba ọsọ (kwụsị nnọkọ na Ctrl + C) - arịa Docker ga-akwụsị na desktọpụ, na Kubernetes, ihe niile ga-alaghachi na ọnọdụ mbụ ya. Naanị ihe fọdụrụ bụ ime, nye MR ma nyefee ya ka ọ nyochaa / jikọta /… (dabere na usoro ọrụ gị).

Ọ bụrụ na anyị achọghị ịme ngwa ahụ na akpa Docker - dịka ọmụmaatụ, anyị na-etolite ọ bụghị na PHP, kama na Go, ma ka na-ewu ya na mpaghara - ịmalite Telepresence ga-adị mfe karị:

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

Ọ bụrụ na ngwa ahụ enwetara Kubernetes API, ị ga-achọ ịkwanye ndekọ igodo (https://www.telepresence.io/howto/volumes). Enwere ngwa maka Linux kpalite:

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

Mgbe ịmalitere Telepresence na-enweghị nhọrọ --docker-run mgbanwe gburugburu ebe obibi niile ga-adị na njedebe dị ugbu a, ya mere a ghaghị ịmalite ngwa ahụ na ya.

NB: Mgbe ị na-eji, dịka ọmụmaatụ, PHP, ị ghaghị icheta iji gbanyụọ ụdị op_cache dị iche iche, apc na ngwa ngwa ndị ọzọ maka mmepe - ma ọ bụghị na-edezi koodu agaghị eduga na nsonaazụ achọrọ.

Nsonaazụ

Mmepe obodo na Kubernetes bụ nsogbu nke ngwọta ya na-eto eto na mgbasa nke ikpo okwu a. Ịnata arịrịọ ndị dị mkpa sitere n'aka ndị mmepe (site na ndị ahịa anyị), anyị malitere iji ụzọ mbụ dịnụ dozie ha, nke, Otú ọ dị, egosighị onwe ha ogologo oge. Ọ dabara nke ọma, nke a aghọwo ihe doro anya na ọ bụghị naanị ugbu a na ọ bụghị naanị anyị, otú ndị ọzọ adaba n'aka na-ama pụtara na ụwa, na Telepresence bụ ndị kasị ama n'ime ha (n'agbanyeghị, e nwekwara. skaffold sitere na Google). Ahụmahụ anyị nke iji ya adịbeghị oke, mana ọ na-enye anyị ihe mere anyị ga-eji kwado ya na "ndị ọrụ ibe anyị na ụlọ ahịa" - gbalịa ya!

PS

Ndị ọzọ sitere na usoro ndụmọdụ na usoro aghụghọ K8:

isi: www.habr.com

Tinye a comment