Malangizo & zidule za Kubernetes: za chitukuko chakomweko ndi Telepresence

Malangizo & zidule za Kubernetes: za chitukuko chakomweko ndi Telepresence

Timafunsidwa mochulukira za kupanga ma microservices ku Kubernetes. Madivelopa, makamaka a zilankhulo zotanthauziridwa, akufuna kuwongolera mwachangu kachidindo mu IDE yomwe amawakonda ndikuwona zotsatira zake osadikirira kumanga/kutumiza - pongokanikiza F5. Ndipo zikafika pakugwiritsa ntchito monolithic, kunali kokwanira kukhazikitsa database ndi seva yapaintaneti (mu Docker, VirtualBox ...), ndiyeno nthawi yomweyo kusangalala ndi chitukuko. Ndi kudula kwa monoliths mu microservices ndi kufika kwa Kubernetes, ndi maonekedwe a kudalira wina ndi mzake, chirichonse. zinafika povuta pang'ono. Kuchuluka kwa ma microservices awa, kumabweretsa mavuto. Kuti musangalalenso ndi chitukuko, muyenera kukweza zotengera za Docker zoposa chimodzi kapena ziwiri, ndipo nthawi zina zoposa khumi ndi ziwiri ... .

PanthaΕ΅i zosiyanasiyana tinayesa njira zosiyanasiyana zothetsera vutolo. Ndipo ndikuyamba ndi njira zogwirira ntchito kapena "ndodo".

1. Ndodo

Ma IDE ambiri amatha kusintha ma code mwachindunji pa seva pogwiritsa ntchito FTP/SFTP. Njirayi ndi yodziwikiratu ndipo nthawi yomweyo tinaganiza zoigwiritsa ntchito. Chinsinsi chake chimachokera ku izi:

  1. M'malo otukuka (dev/review), chidebe chowonjezera chimakhazikitsidwa ndi mwayi wa SSH ndikutumiza kiyi ya SSH yapagulu ya wopangayo yemwe angapange / kutumiza pulogalamuyi.
  2. Pa gawo loyambira (mkati mwa chidebe prepare-app) kusamutsa kodi ku emptyDirkukhala ndi mwayi wopeza ma code kuchokera pazotengera zofunsira ndi seva ya SSH.

Malangizo & zidule za Kubernetes: za chitukuko chakomweko ndi Telepresence

Kuti mumvetse bwino za kukhazikitsidwa kwachiwembu chotere, ndipereka zigawo za kasinthidwe ka YAML ku Kubernetes.

Zosintha

1.1. values.yaml

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

ndi vasya.pupkin ndi mtengo wa variable ${GITLAB_USER_LOGIN}.

1.2. kutumiza.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. Chinsinsi.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 }}

Kukhudza komaliza

Pambuyo pake chomwe chatsala ndikusamutsa zofunikira za 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: wopanga mapulogalamu omwe adayambitsa ntchitoyo amatha kulumikizana ndi dzina lautumiki (momwe angaperekere mwayi wofikira gululo, tanena kale) kuchokera pakompyuta yanu kudzera pa SFTP ndikusintha kachidindo popanda kuyembekezera kuti iperekedwe kumagulu.

Ili ndi yankho logwira ntchito kwathunthu, koma kuchokera pakukhazikitsa ili ndi zovuta zake:

  • kufunikira kokonzanso tchati cha Helm, chomwe chimapangitsa kuti zikhale zovuta kuwerenga m'tsogolomu;
  • angagwiritsidwe ntchito ndi munthu amene anatumiza ntchito;
  • muyenera kukumbukira kuti ndikugwirizanitsa ndi chikwatu chapafupi ndi code ndikuchipereka ku Git.

2. Kupezeka patelefoni

Ntchitoyi telepresence zakhala zikudziwika kwa nthawi yayitali, koma ife, monga amanenera, "sitinayesere mozama mwakuchita." Komabe, kufunikira kwachita ntchito yake ndipo tsopano ndife okondwa kugawana zomwe takumana nazo, zomwe zingakhale zothandiza kwa owerenga mabulogu athu - makamaka popeza sipanakhalepo zida zina zokhudzana ndi Telepresence pamalopo.

Mwachidule, zonse zidakhala zosawopsa. Tidayika zochita zonse zomwe zimafunikira kuphedwa kwa wopangayo mu fayilo ya Helm chart yotchedwa NOTES.txt. Chifukwa chake, atatumiza ntchitoyi ku Kubernetes, wopanga mapulogalamuwa amawona malangizo oyambitsa malo ochezera a pagulu lantchito la 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
#########################################################################

Sitidzakhazikika mwatsatanetsatane pamasitepe omwe akufotokozedwa mu malangizowa ... kupatulapo otsiriza. Kodi chimachitika ndi chiyani pakukhazikitsa Telepresence?

Kugwira ntchito ndi Telepresence

Poyambitsa (pogwiritsa ntchito lamulo lomaliza lomwe lafotokozedwa pamwambapa), timayika:

  • namespace momwe microservice ikuyenda;
  • mayina a kutumizidwa ndi chidebe chomwe tikufuna kulowa.

Mfundo zotsalira ndizosankha. Ngati ntchito yathu ilumikizana ndi Kubernetes API ServiceAccount idapangidwa, tifunika kuyika ziphaso/zizindikiro pa kompyuta yathu. Kuti muchite izi, gwiritsani ntchito njirayo --mount=true (kapena --mount=/dst_path), yomwe ikweza muzu (/) kuchokera pachidebe cha Kubernetes kupita pakompyuta yathu. Pambuyo pake, titha (malingana ndi OS ndi momwe pulogalamuyo imayambira) kugwiritsa ntchito "makiyi" kuchokera pagulu.

Choyamba, tiyeni tiwone njira yapadziko lonse lapansi yogwiritsira ntchito - mu chidebe cha Docker. Kuti tichite izi tidzagwiritsa ntchito kiyi --docker-run ndikuyika chikwatu ndi code mu chidebe: -v `pwd`:/app

Chonde dziwani kuti izi zimachokera ku bukhu la polojekiti. Khodi yofunsira idzayikidwa mu bukhuli /app mu chidebe.

Yotsatira: -v /tmp/app/var/run/secrets:/var/run/secrets - kuyika chikwatu ndi satifiketi / chizindikiro mu chidebe.

Njirayi imatsatiridwa ndi chithunzi chomwe pulogalamuyo idzayendetse. NB: Mukamapanga chithunzi, muyenera kufotokoza CMD kapena ENTRYPOINT!

Nanga n’ciani cidzacitika pambuyo pake?

  • Ku Kubernetes, pa Kutumiza komwe kwadziwika, kuchuluka kwa zofananira kudzasinthidwa kukhala 0. M'malo mwake, Kutumiza kwatsopano kudzakhazikitsidwa - ndi chotengera cholowa m'malo. backend.
  • 2 idzakhazikitsidwa pa desktop: yoyamba ndi Telepresence (idzakhala yopempha kuchokera / kupita Kubernetes), yachiwiri ndi ntchito ikupangidwa.
  • Ngati titha kulowa mu chidebecho ndi pulogalamuyo, ndiye kuti zosintha zonse za ENV zomwe zimasamutsidwa ndi Helm panthawi yotumiza zitha kupezeka kwa ife, ndipo ntchito zonse zizipezekanso. Chotsalira ndikungosintha khodi mu IDE yomwe mumakonda ndikusangalala ndi zotsatira zake.
  • Kumapeto kwa ntchitoyo, muyenera kungotseka malo omwe Telepresence ikugwira ntchito (kuthetsa gawolo ndi Ctrl + C) - Zotengera za Docker zidzayima pa desktop, ndipo ku Kubernetes chirichonse chidzabwerera ku chikhalidwe chake choyambirira. Zomwe zatsala ndikudzipereka, kutulutsa MR ndikusintha kuti iwunikenso / kuphatikiza /… (malingana ndi mayendedwe anu).

Ngati sitikufuna kuyendetsa pulogalamuyi mumtsuko wa Docker - mwachitsanzo, sitipanga PHP, koma mu Go, ndikumangabe kwanuko - kuyambitsa Telepresence kudzakhala kosavuta:

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

Ngati pulogalamuyo ipeza Kubernetes API, muyenera kuyika chikwatu cha makiyi (https://www.telepresence.io/howto/volumes). Pali zothandiza kwa Linux muzu:

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

Pambuyo poyambitsa Telepresence popanda mwayi --docker-run zosintha zonse zachilengedwe zizipezeka mu terminal yomwe ilipo, chifukwa chake ntchitoyo iyenera kukhazikitsidwa mmenemo.

NB: Mukamagwiritsa ntchito, mwachitsanzo, PHP, muyenera kukumbukira kuletsa op_cache, apc ndi ma accelerators ena kuti apange chitukuko - apo ayi kusintha kachidindo sikungabweretse zotsatira zomwe mukufuna.

Zotsatira

Chitukuko cham'deralo ndi Kubernetes ndi vuto lomwe yankho lake likukula molingana ndi kufalikira kwa nsanja iyi. Kulandira zopempha zoyenera kuchokera kwa opanga (kuchokera kwa makasitomala athu), tinayamba kuwathetsa ndi njira zoyamba zomwe zilipo, zomwe, komabe, sizinadziwonetsere kwa nthawi yayitali. Mwamwayi, izi zakhala zoonekeratu, osati tsopano, osati kwa ife okha, kotero njira zoyenera zawonekera kale padziko lapansi, ndipo Telepresence ndi yotchuka kwambiri mwa iwo (mwa njira, pali chikopa kuchokera ku Google). Zomwe takumana nazo pakuzigwiritsa ntchito sizinali zazikulu kwambiri, koma zimatipatsa kale chifukwa choyipangira "anzathu mu shopu" - yesani!

PS

Zina kuchokera pamndandanda waupangiri wa K8s:

Source: www.habr.com

Kuwonjezera ndemanga