рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЯрд┐рдкреНрд╕ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛: рд╕реНрдерд╛рдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕рдмрджреНрджрд▓

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЯрд┐рдкреНрд╕ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛: рд╕реНрдерд╛рдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕рдмрджреНрджрд▓

Kubernetes рдордзреНрдпреЗ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░рд▓реЗ рдЬрд╛рддреЗ. рд╡рд┐рдХрд╕рдХ, рд╡рд┐рд╢реЗрд╖рдд: рдЕрд░реНрде рд▓рд╛рд╡рд▓реЗрд▓реНрдпрд╛ рднрд╛рд╖рд╛рдВрдЪреЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЖрд╡рдбрддреНрдпрд╛ IDE рдордзреАрд▓ рдХреЛрдб рджреНрд░реБрддрдкрдгреЗ рджреБрд░реБрд╕реНрдд рдХрд░реВ рдЗрдЪреНрдЫрд┐рддрд╛рдд рдЖрдгрд┐ рдмрд┐рд▓реНрдб/рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрдЪреА рд╡рд╛рдЯ рди рдкрд╛рд╣рддрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣реВ рдЗрдЪреНрдЫрд┐рддрд╛рдд - рдлрдХреНрдд F5 рджрд╛рдмреВрди. рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рддреЗ рдПрдХрд╛ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╡рд░ рдЖрд▓реЗ, рддреЗрд╡реНрд╣рд╛ рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ (рдбреЙрдХрд░, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рдмреЙрдХреНрд╕рдордзреНрдпреЗ ...) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдкреБрд░реЗрд╕реЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдирдВрддрд░ рд▓рдЧреЗрдЪ рд╡рд┐рдХрд╛рд╕рд╛рдЪрд╛ рдЖрдирдВрдж рдШреНрдпрд╛. рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рдордзреНрдпреЗ рдореЛрдиреЛрд▓рд┐рдереНрд╕рдЪреЗ рдХрдЯрд┐рдВрдЧ рдЖрдгрд┐ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреЗ рдЖрдЧрдорди, рдПрдХрдореЗрдХрд╛рдВрд╡рд░ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рджрд┐рд╕рдгреЗ, рд╕рд░реНрд╡рдХрд╛рд╣реА рддреЗ рдереЛрдбреЗ рдЕрдзрд┐рдХ рдХрдареАрдг рдЭрд╛рд▓реЗ. рдпрд╛ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЬрд┐рддрдХреНрдпрд╛ рдЬрд╛рд╕реНрдд рддрд┐рддрдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛. рд╡рд┐рдХрд╛рд╕рд╛рдЪрд╛ рдкреБрдиреНрд╣рд╛ рдЖрдирдВрдж рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реНрд╕ рдЖрдгрд┐ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдбрдЭрдирд╣реВрди рдЕрдзрд┐рдХ рдХрдВрдЯреЗрдирд░ рдЙрднреЗ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓... рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдпрд╛ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреАрдВрдирд╛ рдмрд░рд╛рдЪ рд╡реЗрд│ рд▓рд╛рдЧреВ рд╢рдХрддреЛ, рдХрд╛рд░рдг рддреЗ рдЕрджреНрдпрдпрд╛рд╡рдд рдареЗрд╡рдгреЗ рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. .

рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡реЗрд│реА рдЖрдореНрд╣реА рд╕рдорд╕реНрдпреЗрдЪреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдЙрдкрд╛рдп рдХрд░реВрди рдкрд╛рд╣рд┐рд▓реЗ. рдЖрдгрд┐ рдореА рд╕рдВрдЪрд┐рдд рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдбреНрд╕ рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд "рдХреНрд░рдЪреЗрд╕" рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрди.

1. рдХреНрд░рдЪреЗрд╕

рдмрд╣реБрддреЗрдХ IDE рдордзреНрдпреЗ FTP/SFTP рд╡рд╛рдкрд░реВрди рдереЗрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЕрд╕рддреЗ. рд╣рд╛ рдорд╛рд░реНрдЧ рдЕрдЧрджреА рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рд▓рдЧреЗрдЪрдЪ рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рддреНрдпрд╛рдЪреЗ рд╕рд╛рд░ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЙрдХрд│рддреЗ:

  1. рдкреЙрдб рдСрдл рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ (рдбреЗрд╡реНрд╣/рд░рд┐рд╡реНрд╣реНрдпреВ) рдордзреНрдпреЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрдЯреЗрдирд░ SSH рдНрдХреНрд╕реЗрд╕рд╕рд╣ рд▓реЙрдиреНрдЪ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдбреЗрд╡реНрд╣рд▓рдкрд░рдЪреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ SSH рдХреА рдлреЙрд░рд╡рд░реНрдб рдХрд░рддреЛ рдЬреЛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдорд┐рдЯ/рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрд▓.
  2. рд╕реБрд░реБрд╡рд╛рддреАрдЪреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ (рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ prepare-app) рд╡рд░ рдХреЛрдб рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рд╛ emptyDirрдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░реНрд╕ рдЖрдгрд┐ SSH рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рдХреЛрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЯрд┐рдкреНрд╕ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛: рд╕реНрдерд╛рдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕рдмрджреНрджрд▓

рдЕрд╢рд╛ рдпреЛрдЬрдиреЗрдЪреА рддрд╛рдВрддреНрд░рд┐рдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдореА Kubernetes рдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реНрдпрд╛ YAML рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреЗ рддреБрдХрдбреЗ рджреЗрдИрди.

рдХреЙрдиреНрдлрд┐рдЧреНрдпреБрд░рд╛рд╕реА

рез.рез. values.yaml

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

рддреЛ рдЖрд╣реЗ vasya.pupkin рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреЗ рдореВрд▓реНрдп рдЖрд╣реЗ ${GITLAB_USER_LOGIN}.

рез.реи. 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"]
...

рез.рей. рдЧреБрдкреНрдд.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. рдЯреЗрд▓рд┐рдкреНрд░реЗрдЭрдиреНрд╕

рдкреНрд░рдХрд▓реНрдк рджреВрд░рдзреНрд╡рдиреА рдмрд░реНтАНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдУрд│рдЦрд▓реЗ рдЬрд╛рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА, рдЬрд╕реЗ рддреЗ рдореНрд╣рдгрддрд╛рдд, "рдЕрднреНрдпрд╛рд╕рд╛рдд рддреНрдпрд╛рдЪрд╛ рдЧрдВрднреАрд░рдкрдгреЗ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрд▓реЛ рдирд╛рд╣реА." рддрдерд╛рдкрд┐, рдорд╛рдЧрдгреАрдиреЗ рддреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪрд╛ рдЕрдиреБрднрд╡ рд╢реЗрдЕрд░ рдХрд░рдгреНрдпрд╛рдд рдЖрдирдВрдж рд╣реЛрдд рдЖрд╣реЗ, рдЬреЛ рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрдЪреНрдпрд╛ рд╡рд╛рдЪрдХрд╛рдВрд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЛ - рд╡рд┐рд╢реЗрд╖рдд: рд╣рдмрд╡рд░ рдЕрджреНрдпрд╛рдк рдЯреЗрд▓реАрдкреНрд░реЗрд╕реЗрдиреНрд╕рдмрджреНрджрд▓ рдЗрддрд░ рдХреЛрдгрддреАрд╣реА рд╕рд╛рдордЧреНрд░реА рдЙрдкрд▓рдмреНрдз рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ.

рдереЛрдбрдХреНрдпрд╛рдд, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЗрддрдХреЗ рднрдпрд╛рдирдХ рдирд╛рд╣реА рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ. рдбреЗрд╡реНрд╣рд▓рдкрд░рдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдХреНрд░рд┐рдпрд╛ рдЖрдореНрд╣реА рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдордЬрдХреВрд░ рдлрд╛рдИрд▓рдордзреНрдпреЗ рдареЗрд╡рд▓реНрдпрд╛ рдЖрд╣реЗрдд. NOTES.txt. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╡рд░ рд╕реЗрд╡рд╛ рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╡рд┐рдХрд╕рдХ 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 рд╕рд╣ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЗ

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╡рд░ (рд╡рд░реАрд▓ рд╕реВрдЪрдирд╛рдВрдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реА рд╢реЗрд╡рдЯрдЪреА рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди), рдЖрдореНрд╣реА рд╕реЗрдЯ рдХрд░рддреЛ:

  • рдиреЗрдорд╕реНрдкреЗрд╕ рдЬреНрдпрд╛рдордзреНрдпреЗ рдорд╛рдпрдХреНрд░реЛ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЪрд╛рд▓реВ рдЖрд╣реЗ;
  • рдЙрдкрдпреЛрдЬрди рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░рдЪреА рдирд╛рд╡реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╡реЗрд╢ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ.

рдЙрд░реНрд╡рд░рд┐рдд рдпреБрдХреНрддрд┐рд╡рд╛рдж рдРрдЪреНрдЫрд┐рдХ рдЖрд╣реЗрдд. рдЖрдордЪреА рд╕реЗрд╡рд╛ Kubernetes API рд╕рд╣ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдд рдЕрд╕рд▓реНрдпрд╛рд╕ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдбреЗрд╕реНрдХрдЯреЙрдкрд╡рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ/рдЯреЛрдХрдиреНрд╕ рдорд╛рдЙрдВрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░рд╛ --mount=true (рдХрд┐рдВрд╡рд╛ --mount=/dst_path), рдЬреЗ рд░реВрдЯ (/) рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХрдВрдЯреЗрдирд░рдордзреВрди рдЖрдордЪреНрдпрд╛ рдбреЗрд╕реНрдХрдЯреЙрдкрд╡рд░ рдорд╛рдЙрдВрдЯ рдХрд░реЗрд▓. рдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ "рдХреА" рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ (OS рд╡рд░ рдЖрдгрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╕рд╛ рд▓реЙрдиреНрдЪ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди).

рдкреНрд░рдердо, рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рдкрд░реНрдпрд╛рдп рдкрд╛рд╣реВ - рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрдг рдХреА рд╡рд╛рдкрд░реВ --docker-run рдЖрдгрд┐ рдХреЛрдбрд╕рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдорд╛рдЙрдВрдЯ рдХрд░рд╛: -v `pwd`:/app

рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╣реЗ рдкреНрд░рдХрд▓реНрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреВрди рдЪрд╛рд▓рдд рдЖрд╣реЗ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЗ. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдорд╛рдЙрдВрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ /app рдХрдВрдЯреЗрдирд░ рдордзреНрдпреЗ.

рдкреБрдвреАрд▓: -v /tmp/app/var/run/secrets:/var/run/secrets тАФ рдкреНрд░рдорд╛рдгрдкрддреНрд░/рдЯреЛрдХрдирд╕рд╣ рдбрд┐рд░реЗрдХреНрдЯрд░реАрд▓рд╛ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдорд╛рдЙрдВрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.

рд╣рд╛ рдкрд░реНрдпрд╛рдп рд╢реЗрд╡рдЯреА рдЬреНрдпрд╛ рдЗрдореЗрдЬрдордзреНрдпреЗ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд░рди рд╣реЛрдИрд▓ рддреНрдпрд╛ рдирдВрддрд░ рдпреЗрддреЛ. NB: рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдЖрдкрдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ CMD рдХрд┐рдВрд╡рд╛ ENTRYPOINT!

рдкреБрдвреЗ рдирдХреНрдХреА рдХрд╛рдп рд╣реЛрдгрд╛рд░?

  • Kubernetes рдордзреНрдпреЗ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА, рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 0 рд╡рд░ рдмрджрд▓рд▓реА рдЬрд╛рдИрд▓. рддреНрдпрд╛рдРрд╡рдЬреА, рдПрдХ рдирд╡реАрди рдЙрдкрдпреЛрдЬрди рд╕реБрд░реВ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ - рдкрд░реНрдпрд╛рдпреА рдХрдВрдЯреЗрдирд░рд╕рд╣ backend.
  • 2 рдХрдВрдЯреЗрдирд░ рдбреЗрд╕реНрдХрдЯреЙрдкрд╡рд░ рд▓реЙрдиреНрдЪ рд╣реЛрддреАрд▓: рдкрд╣рд┐рд▓рд╛ рдЯреЗрд▓реАрдкреНрд░реЗрд╕реЗрдиреНрд╕рд╕рд╣ (рддреЗ рдХреБрдмрд░рдиреЗрдЯреЗрд╕рдХрдбреВрди/рд▓рд╛ рдкреНрд░реЙрдХреНрд╕реА рд╡рд┐рдирдВрддреНрдпрд╛ рдХрд░реЗрд▓), рджреБрд╕рд░рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓.
  • рдЖрдореНрд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕рд╣ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛рд╕, рддреИрдирд╛рддреА рджрд░рдореНрдпрд╛рди рд╣реЗрд▓реНрдорджреНрд╡рд╛рд░реЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗрд▓реЗ рд╕рд░реНрд╡ ENV рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЕрд╕рддреАрд▓ рдЖрдгрд┐ рд╕рд░реНрд╡ рд╕реЗрд╡рд╛ рджреЗрдЦреАрд▓ рдЙрдкрд▓рдмреНрдз рдЕрд╕рддреАрд▓. рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбрддреНрдпрд╛ IDE рдордзреАрд▓ рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓рд╛рдЪрд╛ рдЖрдирдВрдж рдШреЗрдгреЗ рдПрд╡рдвреЗрдЪ рдмрд╛рдХреА рдЖрд╣реЗ.
  • рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдЯрд░реНрдорд┐рдирд▓ рдмрдВрдж рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕ рдЪрд╛рд▓реВ рдЖрд╣реЗ (Ctrl+C рд╕рд╣ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдХрд░рд╛) - рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдбреЗрд╕реНрдХрдЯреЙрдкрд╡рд░ рдерд╛рдВрдмрддреАрд▓ рдЖрдгрд┐ рдХреБрдмрд░рдиреЗрдЯрдордзреНрдпреЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рддреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддреАрдд рдкрд░рдд рдпреЗрдИрд▓. рдмрд╛рдХреА рдлрдХреНрдд рдХрдорд┐рдЯ рдХрд░рдгреЗ, MR рдЬрд╛рд░реА рдХрд░рдгреЗ рдЖрдгрд┐ рддреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди/рд╡рд┐рд▓реАрдиреАрдХрд░рдг/... (рддреБрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рд╛рдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди) рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ.

рдЬрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рдирд╕реЗрд▓ - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА 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 рд╕рд╣ рд╕реНрдерд╛рдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдпрд╛ рд╡реНрдпрд╛рд╕рдкреАрдард╛рдЪреНрдпрд╛ рдкреНрд░рд╕рд╛рд░рд╛рдЪреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд╛рдврдд рдЖрд╣реЗ. рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдХрдбреВрди (рдЖрдордЪреНрдпрд╛ рдХреНрд▓рд╛рдпрдВрдЯрдХрдбреВрди) рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдирдВрддреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрди, рдЖрдореНрд╣реА рдкреНрд░рдердо рдЙрдкрд▓рдмреНрдз рд╕рд╛рдзрдирд╛рдВрд╕рд╣ рддреНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА, рдЬреЗ рддрдерд╛рдкрд┐, рджреАрд░реНрдШрдХрд╛рд│рд╛рдкрд░реНрдпрдВрдд рд╕реНрд╡рддрдГрд▓рд╛ рд╕рд┐рджреНрдз рдХрд░реВ рд╢рдХрд▓реЗ рдирд╛рд╣реА. рд╕реБрджреИрд╡рд╛рдиреЗ, рд╣реЗ рдХреЗрд╡рд│ рдЖрддрд╛рдЪ рдирд╡реНрд╣реЗ рддрд░ рдЖрдкрд▓реНрдпрд╛рд╕рд╛рдареАрдЪ рд╕реНрдкрд╖реНрдЯ рдЭрд╛рд▓реЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЬрдЧрд╛рдд рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдорд╛рдзреНрдпрдореЗ рдЖрдзреАрдЪ рджрд┐рд╕реВ рд▓рд╛рдЧрд▓реА рдЖрд╣реЗрдд рдЖрдгрд┐ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕ рддреНрдпрд╛рдкреИрдХреА рд╕рд░реНрд╡рд╛рдд рдкреНрд░рд╕рд┐рджреНрдз рдЖрд╣реЗ (рддрд╕реЗ, рддреЗрдереЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗ. рд╕реНрдХреЕрдлреЛрд▓реНрдб Google рдХрдбреВрди). рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдордЪрд╛ рдЕрдиреБрднрд╡ рдЕрджреНрдпрд╛рдк рдЗрддрдХрд╛ рдЪрд╛рдВрдЧрд▓рд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЖрдордЪреНрдпрд╛ "рджреБрдХрд╛рдирд╛рддреАрд▓ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрдирд╛" рдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рджреЗрддреЗ - рд╡рд╛рдкрд░реВрди рдкрд╣рд╛!

PS

K8s рдЯрд┐рдкрд╛ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рдЗрддрд░:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛