ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืขืœ ืคื™ืชื•ื— ืžืงื•ืžื™ ื•ื˜ืœื ื•ื›ื—ื•ืช

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืขืœ ืคื™ืชื•ื— ืžืงื•ืžื™ ื•ื˜ืœื ื•ื›ื—ื•ืช

ืื ื—ื ื• ื ืฉืืœื™ื ื™ื•ืชืจ ื•ื™ื•ืชืจ ืœื’ื‘ื™ ืคื™ืชื•ื— ืฉื™ืจื•ืชื™ ืžื™ืงืจื• ื‘-Kubernetes. ืžืคืชื—ื™ื, ื‘ืžื™ื•ื—ื“ ืฉืœ ืฉืคื•ืช ืžืชืคืจืฉื•ืช, ืจื•ืฆื™ื ืœืชืงืŸ ื‘ืžื”ื™ืจื•ืช ืืช ื”ืงื•ื“ ื‘-IDE ื”ืžื•ืขื“ืฃ ืขืœื™ื”ื ื•ืœืจืื•ืช ืืช ื”ืชื•ืฆืื” ืžื‘ืœื™ ืœื—ื›ื•ืช ืœื‘ื ื™ื™ื”/ืคืจื™ืกื” - ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ืœื—ื™ืฆื” ืขืœ F5. ื•ื›ืฉื–ื” ื”ื’ื™ืข ืœืืคืœื™ืงืฆื™ื” ืžื•ื ื•ืœื™ื˜ื™ืช, ื–ื” ื”ื™ื” ืžืกืคื™ืง ืœื”ืชืงื™ืŸ ืžืงื•ืžื™ืช ืžืกื“ ื ืชื•ื ื™ื ื•ืฉืจืช ืื™ื ื˜ืจื ื˜ (ื‘ Docker, VirtualBox...), ื•ืื– ืžื™ื“ ืœื™ื”ื ื•ืช ืžืคื™ืชื•ื—. ืขื ื—ื™ืชื•ืš ื”ืžื•ื ื•ืœื™ื˜ื™ื ืœืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ื”ื’ืขืช Kubernetes, ืขื ื”ื•ืคืขืช ืชืœื•ืช ื–ื” ื‘ื–ื”, ื”ื›ืœ ื–ื” ื ื”ื™ื” ืงืฆืช ื™ื•ืชืจ ืงืฉื”. ื›ื›ืœ ืฉื™ื•ืชืจ ืžืฉื™ืจื•ืชื™ ื”ืžื™ืงืจื• ื”ืืœื”, ื›ืš ื™ื•ืชืจ ื‘ืขื™ื•ืช. ื›ื“ื™ ืœื™ื”ื ื•ืช ืฉื•ื‘ ืžืคื™ืชื•ื—, ืฆืจื™ืš ืœื’ื™ื™ืก ื™ื•ืชืจ ืžืžื™ื›ืœ ื“ื•ืงืจ ืื—ื“ ืื• ืฉื ื™ื™ื, ื•ืœืคืขืžื™ื ืืคื™ืœื• ื™ื•ืชืจ ืžืชืจื™ืกืจ... ื›ื›ืœืœ, ื›ืœ ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ื“ื™ ื”ืจื‘ื” ื–ืžืŸ, ืฉื›ืŸ ื’ื ื–ื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžืขื•ื“ื›ืŸ .

ื‘ื–ืžื ื™ื ืฉื•ื ื™ื ื ื™ืกื™ื ื• ืคืชืจื•ื ื•ืช ืฉื•ื ื™ื ืœื‘ืขื™ื”. ื•ืืชื—ื™ืœ ืขื ื”ื“ืจื›ื™ื ื”ืžืฆื˜ื‘ืจื•ืช ืœืขืงื™ืคืช ื”ื‘ืขื™ื” ืื• ืคืฉื•ื˜ "ืงื‘ื™ื™ื".

1. ืงื‘ื™ื™ื

ืœืจื•ื‘ ื”-IDEs ื™ืฉ ืืช ื”ื™ื›ื•ืœืช ืœืขืจื•ืš ืงื•ื“ ื™ืฉื™ืจื•ืช ื‘ืฉืจืช ื‘ืืžืฆืขื•ืช FTP/SFTP. ื”ื“ืจืš ื”ื–ื• ืžืื•ื“ ื‘ืจื•ืจื” ื•ืžื™ื“ ื”ื—ืœื˜ื ื• ืœื”ืฉืชืžืฉ ื‘ื”. ื”ืžื”ื•ืช ืฉืœื• ืžืกืชื›ืžืช ื‘ื“ื‘ืจื™ื ื”ื‘ืื™ื:

  1. ื‘ืคื•ื“ ืฉืœ ืกื‘ื™ื‘ื•ืช ื”ืคื™ืชื•ื— (dev/review), ืžื•ืฉืง ืงื•ื ื˜ื™ื™ื ืจ ื ื•ืกืฃ ืขื ื’ื™ืฉืช SSH ื•ื”ืขื‘ืจืช ืžืคืชื— ื”-SSH ื”ืฆื™ื‘ื•ืจื™ ืฉืœ ื”ืžืคืชื— ืฉื™ื‘ืฆืข/ืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื”.
  2. ื‘ืฉืœื‘ ื”ืคืชื™ื—ื” (ื‘ืชื•ืš ื”ืžื™ื›ืœ prepare-app) ืœื”ืขื‘ื™ืจ ืืช ื”ืงื•ื“ ืœ emptyDirื›ื“ื™ ืœืงื‘ืœ ื’ื™ืฉื” ืœืงื•ื“ ืžืžื›ื•ืœื•ืช ื”ืืคืœื™ืงืฆื™ื” ื•ืžืฉืจืช ื”-SSH.

ืขืฆื•ืช ื•ื˜ืจื™ืงื™ื ืฉืœ Kubernetes: ืขืœ ืคื™ืชื•ื— ืžืงื•ืžื™ ื•ื˜ืœื ื•ื›ื—ื•ืช

ื›ื“ื™ ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืืช ื”ื™ื™ืฉื•ื ื”ื˜ื›ื ื™ ืฉืœ ืชื›ื ื™ืช ื›ื–ื•, ืืกืคืง ืงื˜ืขื™ื ืฉืœ ืชืฆื•ืจื•ืช YAML ื”ืžืขื•ืจื‘ื•ืช ื‘-Kubernetes.

ืชืฆื•ืจื•ืช

1.1. values.yaml

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

ื›ืืŸ vasya.pupkin ื”ื•ื ื”ืขืจืš ืฉืœ ื”ืžืฉืชื ื” ${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 }}

ื”ืžื’ืข ื”ืกื•ืคื™

ืื—ืจื™ ื–ื” ื›ืœ ืžื” ืฉื ืฉืืจ ื–ื” ืœื”ืขื‘ื™ืจ ืžืฉืชื ื™ 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

ื•ื•ืืœื”: ื”ืžืคืชื— ืฉื”ืฉื™ืง ืืช ื”ืคืจื™ืกื” ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ืœืคื™ ืฉื ื”ืฉื™ืจื•ืช (ืื™ืš ืœื”ืขื ื™ืง ื‘ืฆื•ืจื” ืžืื•ื‘ื˜ื—ืช ื’ื™ืฉื” ืœืืฉื›ื•ืœ, ื›ื‘ืจ ืกื™ืคืจื ื•) ืžืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืฉืœืš ื“ืจืš SFTP ื•ืขืจื•ืš ืืช ื”ืงื•ื“ ืžื‘ืœื™ ืœื”ืžืชื™ืŸ ืœืžืกื™ืจืชื• ืœืืฉื›ื•ืœ.

ื–ื”ื• ืคืชืจื•ืŸ ืขื•ื‘ื“ ืœื—ืœื•ื˜ื™ืŸ, ืืš ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ ื™ื™ืฉื•ื ื™ืฉ ืœื• ื—ืกืจื•ื ื•ืช ื‘ืจื•ืจื™ื:

  • ื”ืฆื•ืจืš ืœื—ื“ื“ ืืช ืชืจืฉื™ื ื”ื”ื’ื”, ืžื” ืฉืžืงืฉื” ืขืœ ื”ืงืจื™ืื” ื‘ืขืชื™ื“;
  • ื™ื›ื•ืœ ืœืฉืžืฉ ืจืง ืืช ื”ืื“ื ืฉืคืจืก ืืช ื”ืฉื™ืจื•ืช;
  • ืืชื” ืฆืจื™ืš ืœื–ื›ื•ืจ ืœืื—ืจ ืžื›ืŸ ืœืกื ื›ืจืŸ ืื•ืชื• ืขื ื”ืกืคืจื™ื™ื” ื”ืžืงื•ืžื™ืช ืขื ื”ืงื•ื“ ื•ืœืžืกื•ืจ ืื•ืชื• ืœ-Git.

2. ื ื•ื›ื—ื•ืช ื˜ืœืคื•ื ื™ืช

ืคืจื•ื™ืงื˜ ื˜ืœืคืจื ืกื ืก ื™ื“ื•ืข ื›ื‘ืจ ื“ื™ ื”ืจื‘ื” ื–ืžืŸ, ืื‘ืœ ืื ื—ื ื•, ื›ืžื• ืฉืื•ืžืจื™ื, "ืœื ื”ืกืคืงื ื• ืœื ืกื•ืช ืืช ื–ื” ื‘ืจืฆื™ื ื•ืช ื‘ืคื•ืขืœ". ืขื ื–ืืช, ื”ื‘ื™ืงื•ืฉ ืขืฉื” ืืช ื”ืขื‘ื•ื“ื” ืฉืœื• ื•ืขื›ืฉื™ื• ืื ื—ื ื• ืฉืžื—ื™ื ืœื—ืœื•ืง ืืช ื”ื ื™ืกื™ื•ืŸ ืฉืœื ื•, ืฉืขืฉื•ื™ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ืœืงื•ืจืื™ ื”ื‘ืœื•ื’ ืฉืœื ื• - ื‘ืžื™ื•ื—ื“ ืžื›ื™ื•ื•ืŸ ืฉืขื“ื™ื™ืŸ ืœื ื”ื™ื• ื—ื•ืžืจื™ื ืื—ืจื™ื ืขืœ Telepresence ื‘ืžืจื›ื–.

ื‘ืงื™ืฆื•ืจ, ื”ืชื‘ืจืจ ืฉื”ื›ืœ ืœื ื›ืœ ื›ืš ืžืคื—ื™ื“. ืฉืžื ื• ืืช ื›ืœ ื”ืคืขื•ืœื•ืช ื”ื“ื•ืจืฉื•ืช ื‘ื™ืฆื•ืข ืžืฆื“ ื”ืžืคืชื— ื‘ืงื•ื‘ืฅ ื˜ืงืกื˜ ืฉืœ Helm chart ื‘ืฉื NOTES.txt. ืœืคื™ื›ืš, ืœืื—ืจ ืคืจื™ืกืช ื”ืฉื™ืจื•ืช ืœ-Kubernetes, ื”ืžืคืชื— ืจื•ืื” ื”ื•ืจืื•ืช ืœื”ืคืขืœืช ืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื— ื”ืžืงื•ืžื™ืช ื‘ื™ื•ืžืŸ ื”ืขื‘ื•ื“ื” ืฉืœ 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
#########################################################################

ืœื ื ืชืขื›ื‘ ื‘ืคื™ืจื•ื˜ ืขืœ ื”ืฉืœื‘ื™ื ื”ืžืชื•ืืจื™ื ื‘ื”ื•ืจืื” ื–ื•... ืœืžืขื˜ ื”ืื—ืจื•ืŸ. ืžื” ืงื•ืจื” ื‘ืžื”ืœืš ื”ืฉืงืช Telepresence?

ืขื‘ื•ื“ื” ืขื Telepresence

ื‘ืขืช ื”ืืชื—ื•ืœ (ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ืื—ืจื•ื ื” ืฉืฆื•ื™ื ื” ื‘ื”ื•ืจืื•ืช ืœืžืขืœื”), ื”ื’ื“ืจื ื•:

  • ืžืจื—ื‘ ื”ืฉืžื•ืช ืฉื‘ื• ืคื•ืขืœ ื”ืžื™ืงืจื•-ืฉื™ืจื•ืช;
  • ืฉืžื•ืช ื”ืคืจื™ืกื” ื•ื”ืžื™ื›ืœ ืฉืื ื• ืจื•ืฆื™ื ืœื—ื“ื•ืจ ืืœื™ื”ื.

ืฉืืจ ื”ื˜ื™ืขื•ื ื™ื ื”ื ืื•ืคืฆื™ื•ื ืœื™ื™ื. ืื ื”ืฉื™ืจื•ืช ืฉืœื ื• ืžืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื•ืขื‘ื•ืจ ื”-API ืฉืœ Kubernetes ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช ื ื•ืฆืจ, ืขืœื™ื ื• ืœื”ืขืœื•ืช ืื™ืฉื•ืจื™ื/ืืกื™ืžื•ื ื™ื ืขืœ ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืฉืœื ื•. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื”ืฉืชืžืฉ ื‘ืืคืฉืจื•ืช --mount=true (ืื• --mount=/dst_path), ืฉื™ืขืœื” ืืช ื”ืฉื•ืจืฉ (/) ืžืžื™ื›ืœ Kubernetes ืœืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืฉืœื ื•. ืœืื—ืจ ืžื›ืŸ, ืื ื• ื™ื›ื•ืœื™ื (ื‘ื”ืชืื ืœืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ืื™ืš ื”ืืคืœื™ืงืฆื™ื” ืžื•ืคืขืœืช) ืœื”ืฉืชืžืฉ ื‘"ืžืคืชื—ื•ืช" ืžื”ืืฉื›ื•ืœ.

ืจืืฉื™ืช, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืืคืฉืจื•ืช ื”ืื•ื ื™ื‘ืจืกืœื™ืช ื‘ื™ื•ืชืจ ืœื”ืคืขืœืช ืืคืœื™ืงืฆื™ื” - ื‘ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ Docker. ืœืฉื ื›ืš ื ืฉืชืžืฉ ื‘ืžืคืชื— --docker-run ื•ื”ืขืœื” ืืช ื”ืกืคืจื™ื™ื” ืขื ื”ืงื•ื“ ืœืชื•ืš ื”ืžื™ื›ืœ: -v `pwd`:/app

ืฉื™ื ืœื‘ ืฉื–ื” ื‘ื”ื ื—ื” ืฉื”ื•ื ืคื•ืขืœ ืžืกืคืจื™ื™ืช ื”ืคืจื•ื™ืงื˜. ืงื•ื“ ื”ื™ื™ืฉื•ื ื™ื•ืจื›ื‘ ื‘ืกืคืจื™ื™ื” /app ื‘ืžื™ื›ืœ.

ื‘ื: -v /tmp/app/var/run/secrets:/var/run/secrets - ื›ื“ื™ ืœืขืœื•ืช ืืช ื”ืกืคืจื™ื™ื” ืขื ื”ืื™ืฉื•ืจ/ืืกื™ืžื•ืŸ ืœืžื™ื›ืœ.

ืœืื—ืจ ืืคืฉืจื•ืช ื–ื• ืžื•ืคื™ืขื” ืœื‘ืกื•ืฃ ื”ืชืžื•ื ื” ืฉื‘ื” ื”ืืคืœื™ืงืฆื™ื” ืชืคืขืœ. NB: ื‘ืขืช ื‘ื ื™ื™ืช ืชืžื•ื ื”, ืขืœื™ืš ืœืฆื™ื™ืŸ CMD ืื• ENTRYPOINT!

ืžื” ื‘ื“ื™ื•ืง ื™ืงืจื” ืื—ืจ ื›ืš?

  • ื‘-Kubernetes, ืขื‘ื•ืจ ื”ืคืจื™ืกื” ืฉืฆื•ื™ื ื”, ืžืกืคืจ ื”ืขืชืงื™ื ื™ืฉืชื ื” ืœ-0. ื‘ืžืงื•ื ื–ืืช, ืชื•ืฉืง ืคืจื™ืกื” ื—ื“ืฉื” - ืขื ืžื™ื›ืœ ื—ืœื•ืคื™ backend.
  • 2 ืงื•ื ื˜ื™ื™ื ืจื™ื ื™ื•ืฉืงื• ืขืœ ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื”: ื”ืจืืฉื•ืŸ ืขื Telepresence (ื”ื•ื ื™ืฆื™ื’ ื‘ืงืฉื•ืช ืคืจื•ืงืกื™ ืž/ืืœ Kubernetes), ื”ืฉื ื™ ืขื ื”ืืคืœื™ืงืฆื™ื” ื‘ืคื™ืชื•ื—.
  • ืื ื ื‘ืฆืข ื‘ื™ืฆื•ืข ืœืชื•ืš ื”ืงื•ื ื˜ื™ื™ื ืจ ืขื ื”ืืคืœื™ืงืฆื™ื”, ืื– ื›ืœ ืžืฉืชื ื™ ื”-ENV ืฉื”ื•ืขื‘ืจื• ืขืœ ื™ื“ื™ Helm ื‘ืžื”ืœืš ื”ืคืจื™ืกื” ื™ื”ื™ื• ื–ืžื™ื ื™ื ืœื ื•, ื•ื›ืœ ื”ืฉื™ืจื•ืชื™ื ื™ื”ื™ื• ื–ืžื™ื ื™ื ื’ื ื›ืŸ. ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœืขืจื•ืš ืืช ื”ืงื•ื“ ื‘-IDE ื”ืžื•ืขื“ืฃ ืขืœื™ืš ื•ืœื™ื”ื ื•ืช ืžื”ืชื•ืฆืื”.
  • ื‘ืกื™ื•ื ื”ืขื‘ื•ื“ื”, ืจืง ืฆืจื™ืš ืœืกื’ื•ืจ ืืช ื”ื˜ืจืžื™ื ืœ ื‘ื• ืคื•ืขืœ Telepresence (ืœืกื™ื™ื ืืช ื”ืกืฉืŸ ืขื Ctrl+C) - ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉืœ Docker ื™ื™ืขืฆืจื• ืขืœ ืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื”, ื•ื‘-Kubernetes ื”ื›ืœ ื™ื—ื–ื•ืจ ืœืžืฆื‘ื• ื”ื”ืชื—ืœืชื™. ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœื”ืชื—ื™ื™ื‘, ืœื”ื ืคื™ืง ืืช ื”-MR ื•ืœื”ืขื‘ื™ืจื• ืœื‘ื“ื™ืงื”/ืžื™ื–ื•ื’/... (ื‘ื”ืชืื ืœื–ืจื™ืžื•ืช ื”ืขื‘ื•ื“ื” ืฉืœื›ื).

ืื ืื ื—ื ื• ืœื ืจื•ืฆื™ื ืœื”ืจื™ืฅ ืืช ื”ืืคืœื™ืงืฆื™ื” ื‘ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ Docker - ืœืžืฉืœ, ืื ื—ื ื• ืžืคืชื—ื™ื ืœื ื‘-PHP, ืืœื ื‘-Go, ื•ืขื“ื™ื™ืŸ ื‘ื•ื ื™ื ืื•ืชื• ื‘ืื•ืคืŸ ืžืงื•ืžื™ - ื”ืฉืงืช Telepresence ืชื”ื™ื” ืคืฉื•ื˜ื” ืืคื™ืœื• ื™ื•ืชืจ:

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

ืื ื”ืืคืœื™ืงืฆื™ื” ื ื™ื’ืฉืช ืืœ Kubernetes API, ืชืฆื˜ืจืš ืœืขืœื•ืช ืืช ืกืคืจื™ื™ืช ื”ืžืคืชื—ื•ืช (https://www.telepresence.io/howto/volumes). ื™ืฉ ื›ืœื™ ืขื–ืจ ืœืœื™ื ื•ืงืก ืฉื•ืจืฉ:

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

ืœืื—ืจ ื”ืฉืงืช Telepresence ืœืœื ืืคืฉืจื•ืช --docker-run ื›ืœ ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื™ื”ื™ื• ื–ืžื™ื ื™ื ื‘ื˜ืจืžื™ื ืœ ื”ื ื•ื›ื—ื™, ื•ืœื›ืŸ ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื” ื‘ื•.

NB: ื‘ืขืช ืฉื™ืžื•ืฉ, ืœืžืฉืœ, ื‘-PHP, ื™ืฉ ืœื–ื›ื•ืจ ืœื”ืฉื‘ื™ืช ืืช op_cache, apc ื•ืžืื™ืฆื™ื ืื—ืจื™ื ืœืคื™ืชื•ื— - ืื—ืจืช ืขืจื™ื›ืช ื”ืงื•ื“ ืœื ืชื•ื‘ื™ืœ ืœืชื•ืฆืื” ื”ืจืฆื•ื™ื”.

ืชื•ืฆืื•ืช ืฉืœ

ืคื™ืชื•ื— ืžืงื•ืžื™ ืขื Kubernetes ื”ื•ื ื‘ืขื™ื” ืฉื”ืคืชืจื•ืŸ ืฉืœื” ื”ื•ืœืš ื•ื’ื“ืœ ื‘ื™ื—ืก ืœื”ืชืคืฉื˜ื•ืช ื”ืคืœื˜ืคื•ืจืžื” ื”ื–ื•. ืœืื—ืจ ืฉืงื™ื‘ืœื ื• ื‘ืงืฉื•ืช ืจืœื•ื•ื ื˜ื™ื•ืช ืžืžืคืชื—ื™ื (ืžื”ืœืงื•ื—ื•ืช ืฉืœื ื•), ื”ืชื—ืœื ื• ืœืคืชื•ืจ ืื•ืชืŸ ื‘ืืžืฆืขื™ื ื”ื–ืžื™ื ื™ื ื”ืจืืฉื•ื ื™ื, ืืฉืจ, ืขื ื–ืืช, ืœื ื”ื•ื›ื™ื—ื• ืืช ืขืฆืžื ืœืื•ืจืš ื–ืžืŸ. ืœืžืจื‘ื” ื”ืžื–ืœ, ื–ื” ื”ืคืš ื‘ืจื•ืจ ืœื ืจืง ืขื›ืฉื™ื• ื•ืœื ืจืง ืœื ื•, ืื– ื›ื‘ืจ ื”ื•ืคื™ืขื• ื‘ืขื•ืœื ืืžืฆืขื™ื ืžืชืื™ืžื™ื ื™ื•ืชืจ, ื•-Telepresence ื”ื™ื ื”ืžืคื•ืจืกืžืช ืฉื‘ื”ื (ืื’ื‘, ื™ืฉ ื’ื skaffold ืžื’ื•ื’ืœ). ื”ื ื™ืกื™ื•ืŸ ืฉืœื ื• ื‘ืฉื™ืžื•ืฉ ื‘ื• ืขื“ื™ื™ืŸ ืœื ื›ืœ ื›ืš ื’ื“ื•ืœ, ืื‘ืœ ื–ื” ื›ื‘ืจ ื ื•ืชืŸ ืœื ื• ืกื™ื‘ื” ืœื”ืžืœื™ืฅ โ€‹โ€‹ืขืœื™ื• ืœ"ืงื•ืœื’ื•ืช ื‘ื—ื ื•ืช" ืฉืœื ื• - ื ืกื• ืื•ืชื•!

ื .ื‘.

ืื—ืจ ืžืกื“ืจืช ื”ื˜ื™ืคื™ื ื•ื”ื˜ืจื™ืงื™ื ืฉืœ K8s:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”