Nga tohutohu me nga tinihanga a Kubernetes: mo te whakawhanaketanga a-rohe me te Waea Telepresence

Nga tohutohu me nga tinihanga a Kubernetes: mo te whakawhanaketanga a-rohe me te Waea Telepresence

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 ka uaua ake. 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:

  1. 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.
  2. I te wa tuatahi (i roto i te ipu prepare-app) whakawhiti te waehere ki emptyDirkia whai waahi ki te waehere mai i nga ipu tono me te tūmau SSH.

Nga tohutohu me nga tinihanga a Kubernetes: mo te whakawhanaketanga a-rohe me te Waea Telepresence

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 e hiahiatia ana nga taurangi 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: ka taea e te kaiwhakawhanake nana i whakarewa te tuku te hono ma te ingoa ratonga (me pehea te tuku uru ki te tautau, kua korerotia e matou) 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 Waatea 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 I hangaia te Pūkete Ratonga, 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

Mena ka uru te tono ki te Kubernetes API, me whakauru e koe te raarangi taviri (https://www.telepresence.io/howto/volumes). He taputapu mo Linux putake:

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. tauparapara 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

Tāpiri i te kōrero