Kubernetes рдЯрд┐рдкреНрд╕ рд░ рдЯреНрд░рд┐рдХреНрд╕: рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рд░ Telepresence рдмрд╛рд░реЗрдорд╛

Kubernetes рдЯрд┐рдкреНрд╕ рд░ рдЯреНрд░рд┐рдХреНрд╕: рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рд░ Telepresence рдмрд╛рд░реЗрдорд╛

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

рд╡рд┐рднрд┐рдиреНрди рд╕рдордпрдорд╛ рд╣рд╛рдореАрд▓реЗ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреНрдпреМрдВред рд░ рдо рд╕рдВрдЪрд┐рдд workarounds рд╡рд╛ рдХреЗрд╡рд▓ "рдмреИрд╕рд╛рдЦреА" рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреБред

1. рдмреИрд╕рд╛рдЦреА

рдзреЗрд░реИ рдЬрд╕реЛ IDE рд╕рдБрдЧ FTP/SFTP рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд░реНрднрд░рдорд╛ рд╕рд┐рдзреИ рдХреЛрдб рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╣реБрдиреНрдЫред рдпреЛ рдорд╛рд░реНрдЧ рдзреЗрд░реИ рд╕реНрдкрд╖реНрдЯ рдЫ рд░ рд╣рд╛рдореАрд▓реЗ рддреБрд░реБрдиреНрддреИ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рдпрд╕рдХреЛ рд╕рд╛рд░ рдирд┐рдореНрдирдорд╛ рдЙрдмрд▓рд┐рдиреНрдЫ:

  1. рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг (рджреЗрд╡/рд╕рдореАрдХреНрд╖рд╛) рдХреЛ рдкреЛрдбрдорд╛, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдиреНрдЯреЗрдирд░ SSH рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪ рд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ SSH рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдлрд░реНрд╡рд╛рд░реНрдбрд┐рдЩрдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдкреНрд░рддрд┐рдмрджреНрдз / рддреИрдирд╛рдд рдЧрд░реНрдиреЗрдЫред
  2. рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЪрд░рдгрдорд╛ (рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ prepare-app) рдорд╛ рдХреЛрдб рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН emptyDirрдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдиреНрдЯреЗрдирд░ рд░ SSH рд╕рд░реНрднрд░рдмрд╛рдЯ рдХреЛрдбрдорд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиред

Kubernetes рдЯрд┐рдкреНрд╕ рд░ рдЯреНрд░рд┐рдХреНрд╕: рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рд░ Telepresence рдмрд╛рд░реЗрдорд╛

рдпрд╕реНрддреЛ рдпреЛрдЬрдирд╛рдХреЛ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдо 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"]
...

рез.рейред 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

Voila: рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдЬрд╕рд▓реЗ рддреИрдирд╛рддреА рд╕реБрд░реБ рдЧрд░реНрдпреЛ рд╕реЗрд╡рд╛ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рднрдирд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ) рддрдкрд╛рдИрдВрдХреЛ рдбреЗрд╕реНрдХрдЯрдкрдмрд╛рдЯ SFTP рдорд╛рд░реНрдлрдд рд░ рдХреЛрдбрд▓рд╛рдИ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдбреЗрд▓рд┐рднрд░ рд╣реБрдиреЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирдЧрд░реА рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдпреЛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдорд╛рдзрд╛рди рд╣реЛ, рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдпрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╣рд╛рдирд┐рд╣рд░реВ рдЫрдиреН:

  • рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрд▓рд╛рдИ рдкрд░рд┐рд╖реНрдХреГрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬрд╕рд▓реЗ рднрд╡рд┐рд╖реНрдпрдорд╛ рдкрдвреНрди рдЧрд╛рд╣реНрд░реЛ рдмрдирд╛рдЙрдБрдЫ;
  • рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡реНрдпрдХреНрддрд┐рд▓реЗ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫ;
  • рддрдкрд╛рдИрдВрд▓реЗ рдХреЛрдбрдХреЛ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╕рдБрдЧ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди рд░ Git рдорд╛ рдХрдорд┐рдЯ рдЧрд░реНрди рд╕рдореНрдЭрдиреБ рдЖрд╡рд╢реНрдпрдХ рдЫред

2. рдЯреЗрд▓рд┐рдкреНрд░реЗрдЬреЗрдиреНрд╕

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЯреЗрд▓реАрдкреНрд░рд┐рд╕реЗрдВрд╕ рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдЪрд┐рдирд┐рдиреНрдЫ, рддрд░ рд╣рд╛рдореА, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рднрдиреЗрдЭреИрдВ, "рдЕрднреНрдпрд╛рд╕рдорд╛ рдпрд╕рд▓рд╛рдИ рдЧрдореНрднреАрд░рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╡рд░рдкрд░ рдкреБрдЧреЗрдиреМрдВред" рдЬреЗ рд╣реЛрд╕реН, рдорд╛рдЧрд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдо рдЧрд░реЗрдХреЛ рдЫ рд░ рдЕрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреМрдВ, рдЬреБрди рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдХрд╛ рдкрд╛рдардХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рд╣реБрди рд╕рдХреНрдЫ - рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рд╣рдмрдорд╛ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрдиреИ рдЕрдиреНрдп рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдЫреИрдирдиреНред

рдЫреЛрдЯрдХрд░реАрдорд╛, рд╕рдмреИ рдХреБрд░рд╛ рдпрддрд┐ рдбрд░рд▓рд╛рдЧреНрджреЛ рдерд┐рдПрдиред рд╣рд╛рдореАрд▓реЗ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╛рдЗрд▓рдорд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рддрд░реНрдлрдмрд╛рдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ рд░рд╛рдЦреНрдпреМрдВред NOTES.txtред рдпрд╕реИрд▓реЗ, Kubernetes рдорд╛ рд╕реЗрд╡рд╛ рддреИрдирд╛рдд рдЧрд░реЗрдкрдЫрд┐, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ GitLab рдХрд╛рд░реНрдп рд▓рдЧрдорд╛ рд╕реНрдерд╛рдиреАрдп dev рд╡рд╛рддрд╛рд╡рд░рдг рд╕реБрд░реБ рдЧрд░реНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рджреЗрдЦреНрдЫ:

!!! ╨а╨░╨╖╤А╨░╨▒╨╛╤В╨║╨░ ╤Б╨╡╤А╨▓╨╕╤Б╨░ ╨╗╨╛╨║╨░╨╗╤М╨╜╨╛, ╨▓ ╤Б╨╛╤Б╤В╨░╨▓╨╡ 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), рдЬрд╕рд▓реЗ рд░реВрдЯ (/) рд▓рд╛рдИ Kubernetes рдХрдиреНрдЯреЗрдирд░рдмрд╛рдЯ рд╣рд╛рдореНрд░реЛ рдбреЗрд╕реНрдХрдЯрдкрдорд╛ рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрдиреЗрдЫред рдпрд╕ рдкрдЫрд┐, рд╣рд╛рдореА рдХреНрд▓рд╕реНрдЯрд░рдмрд╛рдЯ "рдХреБрдЮреНрдЬреАрд╣рд░реВ" рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ (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 рдорд╛ рдХреЛрдб рд╕рдореНрдкрд╛рджрди рдЧрд░реНрди рд░ рдирддрд┐рдЬрд╛рдХреЛ рдЖрдирдиреНрдж рд▓рд┐рдиреБ рдорд╛рддреНрд░ рдмрд╛рдБрдХреА рдЫред
  • рдХрд╛рдордХреЛ рдЕрдиреНрддреНрдпрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рднрд░реНрдЦрд░реИ рдЯрд░реНрдорд┐рдирд▓ рдмрдиреНрдж рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рдорд╛ Telepresence рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ (Ctrl+C рдХреЛ рд╕рд╛рде рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН) - рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдбреЗрд╕реНрдХрдЯрдкрдорд╛ рд░реЛрдХрд┐рдиреЗрдЫрдиреН, рд░ Kubernetes рдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рдпрд╕рдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдлрд░реНрдХрд┐рдиреЗрдЫред рдмрд╛рдБрдХреА рд░рд╣реЗрдХреЛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛, 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

рд╡рд┐рдХрд▓реНрдк рдмрд┐рдирд╛ рдЯреЗрд▓рд┐рдкреНрд░реЗрд╕реЗрдиреНрд╕ рд╕реБрд░реБ рдЧрд░реЗрдкрдЫрд┐ --docker-run рд╕рдмреИ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВ рд╣рд╛рд▓рдХреЛ рдЯрд░реНрдорд┐рдирд▓рдорд╛ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреЗрдЫрдиреН, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрд░реВ рдЧрд░реНрдиреБрдкрд░реНрдЫред

NB: рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, PHP, рддрдкрд╛рдИрдВрд▓реЗ рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рднрд┐рдиреНрди op_cache, apc рд░ рдЕрдиреНрдп рдЧрддрд┐рд╡рд░реНрдзрдХрд╣рд░реВ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдореНрдЭрдиреБ рдкрд░реНрдЫ - рдЕрдиреНрдпрдерд╛ рдХреЛрдб рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдирд╛рд▓реЗ рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рд▓реНрдпрд╛рдЙрдиреЗ рдЫреИрдиред

рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

Kubernetes рдХреЛ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рдЬрд╕рдХреЛ рд╕рдорд╛рдзрд╛рди рдпреЛ рдкреНрд▓реЗрдЯрдлрд░реНрдо рдХреЛ рдкреНрд░рд╕рд╛рд░ рдХреЛ рдЕрдиреБрдкрд╛рдд рдорд╛ рдмрдвреНрджреИ рдЫред рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ (рд╣рд╛рдореНрд░рд╛ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрдмрд╛рдЯ) рдмрд╛рдЯ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ, рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рдЙрдкрд▓рдмреНрдз рдорд╛рдзреНрдпрдорд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдерд╛рд▓реНрдпреМрдВ, рдЬреБрди, рддрдерд╛рдкрд┐, рд▓рд╛рдореЛ рджреВрд░реАрдорд╛ рдЖрдлреВрд▓рд╛рдИ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХреЗрдиред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рдпреЛ рди рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рднрдПрдХреЛ рдЫ рд░ рди рдХреЗрд╡рд▓ рд╣рд╛рдореАрд▓рд╛рдИ, рддреНрдпрд╕реИрд▓реЗ рдзреЗрд░реИ рдЙрдкрдпреБрдХреНрдд рдорд╛рдзреНрдпрдорд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рдВрд╕рд╛рд░рдорд╛ рджреЗрдЦрд╛ рдкрд░реЗрдХрд╛ рдЫрдиреН, рд░ Telepresence рддреА рдордзреНрдпреЗ рд╕рдмреИрднрдиреНрджрд╛ рдкреНрд░рд╕рд┐рджреНрдз рдЫ (рд╡реИрд╕реЗ, рддреНрдпрд╣рд╛рдБ рдкрдирд┐ рдЫред рд╕реНрдХреНрдпрд╛рдлреЛрд▓реНрдб рдЧреБрдЧрд▓рдмрд╛рдЯ)ред рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рдЕрдЭреИ рд░рд╛рдореНрд░реЛ рдЫреИрди, рддрд░ рдпрд╕рд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╣рд╛рдореАрд▓рд╛рдИ "рдкрд╕рд▓рдорд╛ рд╕рд╣рдХрд░реНрдореАрд╣рд░реВ" рд▓рд╛рдИ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдиреЗ рдХрд╛рд░рдг рджрд┐рдиреНрдЫ - рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН!

PS

K8s рд╕реБрдЭрд╛рд╡ рд░ рдЪрд╛рд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрд╛рдЯ рдЕрдиреНрдп:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди