Kubernetes apicibus & praestigiis: de progressu locali ac telepraesentia

Kubernetes apicibus & praestigiis: de progressu locali ac telepraesentia

Magis magisque quaeritur de microservices in Kubernetibus evolvendis. Tincidunt, praesertim linguarum interpretatarum, cupiunt cito corrigere codicem in eorum IDE ventus et exitum videre, non expectato aedificandi/instruere - premendo F5. Cum ad applicationem monolithicam perventum erat, satis erat ad locum institutionem datorum et servo telae (in Docker, VirtualBox...), et tunc statim progressionem frui. De monolithis in microservices et adventu Kubernetes exciso, cum specie dependentiarum inter se omnia. obtinuit paulo difficilius. Quo plura microservices, eo magis difficultates. Ad progressionem denuo frui, necesse est ut plus quam unum aut alterum Docker continentes, interdum etiam plus quam duodecim... In genere haec omnia satis multum temporis capere possunt, cum etiam ad recentem servandam. .

Diversis temporibus diversas solutiones problematis conati sumus. Et incipiam cum operariis aut simpliciter "crutharis".

1. Crutches

Plurimae IDEs facultatem habent codicem recensendi directe in calculonis servi FTP/SFTP. Haec via manifestissima est ac statim uti statuimus. Sua essentia ulcera usque ad haec;

  1. In vasculo evolutionis ambitus (dev/review) additus continens cum SSH accessu emissus est et publicus SSH clavem elit qui transmittit qui applicationem explicabit.
  2. Ad init scaena (intra continens prepare-app) in codice transferre emptyDiraditus ad codicem e vasis applicationis et servo SSH.

Kubernetes apicibus & praestigiis: de progressu locali ac telepraesentia

Ut melius technicam exsecutionem huius schematis intelligamus, fragmenta implicatorum YAML configurationum in Kubernetes praebebo.

Configurationes

1.1. values.yaml

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

est vasya.pupkin valeat variabilis ${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. secret.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 }}

ultima tactus

deinde omnia quae supersunt transferenda est requiritur 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: elit, qui instruere potest, nomine servitii coniungere (quam secure botro accessum det; ut iam dixi) e escritorio tuo per SFTP et codicem edit, non expectato botro tradendum.

Haec omnino solutio laborat, sed ex parte exsecutionis manifesta incommoda habet;

  • opus expolire Helm chart, quod difficilem in posterum legere facit;
  • nonnisi ab eo qui ministerium explicavit adhiberi potest;
  • meminisse debes tunc cum directorio loci synchrone eam cum codice et Git committe.

2. Telepraesentia

project telepresence actoribus satis diu notum est, sed nos, ut aiunt, "non in usu serio temptando pervenimus." Tamen postulatio suum officium peregit et nunc gaudemus ut experientiam nostram communicemus, quae lectoribus nostri blogi utilis sit - praesertim cum nullae aliae materiae de Telepraesentia in centrum adhuc extiterint.

Denique omnesque evertitur ne FORMIDULOSUS. Omnes actiones quae exsecutionem requirunt ex parte elit in chart helmicis in textu tabellae posuimus NOTES.txt. Sic, instructo servitio ad Kubernetes, elit videt instructiones ad deducendas ambitus loci dev in GitLab officium stipes:

!!! Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСрвиса локально, Π² составС 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
#########################################################################

Non habitabimus singillatim de gradibus in hac instructione descriptis ... excepto ultimo. Quid accidit in impulsu Telepraesentiae?

Operantes cum Telepraesentia

In startup (utendo ultimo mandato in mandatis suprascriptis), constituimus:

  • spatiorum in quo microservice currit;
  • nomina instruere et continens penetrare volumus.

Reliquae rationes ad libitum sunt. Si nostrum servitium cum et pro Kubernetibus API . correspondet ServiceAccount creavit, opus est ut testimonialia/signa in nostro escritorio conscendant. Ad hoc utere optione --mount=true (aut --mount=/dst_path) quae radicem conscendet (/) a vase Kubernetes usque ad escritorio nostro. Post hoc, "claves" ex botro uti possumus (secundum OS et quomodo applicatur) uti.

Primum inspiciamus optio maxime universalis ad applicationem currendi - in vase Docker. Ad hoc utemur clavis --docker-run et conscende directorium cum codice in continentem; -v `pwd`:/app

Lorem ipsum a lorem inceptos suscipit cursus. Applicatio signum in indicem inclusum erit /app in vase.

Next: -v /tmp/app/var/run/secrets:/var/run/secrets - indicem cum certificatorio inscendere in vas.

Haec optio tandem sequitur imaginem in qua applicatio curret. NB: Cum struis imaginem, debes denota CMD aut ENTRYPOINT!

Quidnam deinde fiet?

  • In Kubernetes, pro instruere definitis, numerus replicationum in 0. Loco mutabitur, instruere novum instruere - cum vase substituto. backend.
  • 2 continentia in escritorio immittet: primum cum Telepraesentia (procuratorium petit a/Kubernetes), alterum cum applicatione crescendo.
  • Si in vas cum applicatione fecerimus, omnes variabiles ENV ab Helm translatae in instituti nobis praesto erunt, omniaque officia etiam in promptu erunt. Reliquum est, ut codicem in IDE tui dilectionis emendes et eventu fruaris.
  • In fine operis, solum debes claudere terminum quo Telepraesentia currit (terminare sessionem cum Ctrl+C) - Docker continentia in escritorio cessabit, et in Kubernetes omnia ad statum suum initialem revertentur. Reliquum est committere, normam MR et illud ad recensendum/merge/... transferendum (prout in laboribus tuis).

Si applicationem in Docker vase currere nolumus - exempli gratia, non in PHP, sed in Go explicamus, et localiter adhuc construimus - Telepraesentia deductis simplicior erit:

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

Si applicatio accesserit Kubernetes API, necesse erit ut claves directorium conscendas (https://www.telepresent.io/howto/volumes). Est usus Linux radix:

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

Post telepraesentiarum sine optione deductis --docker-run omnes variabiles ambitus in termino currenti praesto erunt, applicatio in eo deducenda erit.

NB: Cum usus, exempli gratia, PHP, meminisse debes varias op_cache, apc et alia acceleratrices ad progressionem inactivandam - aliter codicem edendo ad optatum exitum non ducet.

results

Progressio localis apud Kubernetes quaestio est cuius solutio augetur pro dilatatione huius suggesti. Petitiones ab tincidunt (ab clientibus nostris acceptis) eas solvere coepimus cum primis instrumentis suppetentibus, quod tamen se per longum bolum non probaverunt. Fortunate hoc non modo nunc non solum nobis patuit, ita aptius iam in mundo apparuit, et Telepraesentia illorum celeberrima est (obiter etiam ibi est. skaffold ex Google). Experientia nostra nondum tanta est utendi, sed iam rationem reddit ut eam nostris "collegiis in taberna" commendemus - experiamur!

PS

Aliae ex K8s apicibus & strophis series:

Source: www.habr.com