рд╣рд╛рдореАрд▓рд╛рдИ Kubernetes рдорд╛ рдорд╛рдЗрдХреНрд░реЛ рд╕рд░реНрднрд┐рд╕рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рд╕реЛрдзрд┐рдПрдХреЛ рдЫред рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░рд┐рдПрдХрд╛ рднрд╛рд╖рд╛рд╣рд░реВ, рдЖрдлреНрдиреЛ рдордирдкрд░реНрдиреЗ IDE рдорд╛ рдХреЛрдб рджреНрд░реБрдд рд░реВрдкрдорд╛ рд╕рдЪреНрдпрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫрдиреН рд░ рдирд┐рд░реНрдорд╛рдг/рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрд╛рдЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреНрдЫрдиреН - рдХреЗрд╡рд▓ F5 рдерд┐рдЪреЗрд░ред рд░ рдЬрдм рдпреЛ рдПрдХ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдЖрдпреЛ, рдпреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рд╡реЗрдм рд╕рд░реНрднрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдерд┐рдпреЛ (рдбрдХрд░, рднрд░реНрдЪреБрдЕрд▓рдмрдХреНрд╕рдорд╛ ...), рд░ рддреНрдпрд╕рдкрдЫрд┐ рддреБрд░реБрдиреНрддреИ рд╡рд┐рдХрд╛рд╕рдХреЛ рдЖрдирдиреНрдж рд▓рд┐рдиреБрд╣реЛрд╕реНред рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВрдорд╛ рдореЛрдиреЛрд▓рд┐рдерд╣рд░реВ рдХрд╛рдЯреЗрд░ рд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХреЛ рдЖрдЧрдордирд╕рдБрдЧреИ, рдПрдХрдЕрд░реНрдХрд╛рдорд╛ рдирд┐рд░реНрднрд░рддрд╛рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рд╛рде, рд╕рдмреИ рдХреБрд░рд╛
рд╡рд┐рднрд┐рдиреНрди рд╕рдордпрдорд╛ рд╣рд╛рдореАрд▓реЗ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреНрдпреМрдВред рд░ рдо рд╕рдВрдЪрд┐рдд workarounds рд╡рд╛ рдХреЗрд╡рд▓ "рдмреИрд╕рд╛рдЦреА" рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреБред
1. рдмреИрд╕рд╛рдЦреА
рдзреЗрд░реИ рдЬрд╕реЛ IDE рд╕рдБрдЧ FTP/SFTP рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд░реНрднрд░рдорд╛ рд╕рд┐рдзреИ рдХреЛрдб рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╣реБрдиреНрдЫред рдпреЛ рдорд╛рд░реНрдЧ рдзреЗрд░реИ рд╕реНрдкрд╖реНрдЯ рдЫ рд░ рд╣рд╛рдореАрд▓реЗ рддреБрд░реБрдиреНрддреИ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рдпрд╕рдХреЛ рд╕рд╛рд░ рдирд┐рдореНрдирдорд╛ рдЙрдмрд▓рд┐рдиреНрдЫ:
- рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг (рджреЗрд╡/рд╕рдореАрдХреНрд╖рд╛) рдХреЛ рдкреЛрдбрдорд╛, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдиреНрдЯреЗрдирд░ SSH рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪ рд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ SSH рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдлрд░реНрд╡рд╛рд░реНрдбрд┐рдЩрдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬрд╕рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдкреНрд░рддрд┐рдмрджреНрдз / рддреИрдирд╛рдд рдЧрд░реНрдиреЗрдЫред
- рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЪрд░рдгрдорд╛ (рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░
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"]
...
рез.рейред 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 }}
рдЕрдиреНрддрд┐рдо рд╕реНрдкрд░реНрд╢
рддреНрдпрд╕рдкрдЫрд┐ рдорд╛рддреНрд░реИ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рдмрд╛рдБрдХреА рдЫ
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: рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдЬрд╕рд▓реЗ рддреИрдирд╛рддреА рд╕реБрд░реБ рдЧрд░реНрдпреЛ рд╕реЗрд╡рд╛ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ,
рдпреЛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдорд╛рдзрд╛рди рд╣реЛ, рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдпрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╣рд╛рдирд┐рд╣рд░реВ рдЫрдиреН:
- рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрд▓рд╛рдИ рдкрд░рд┐рд╖реНрдХреГрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬрд╕рд▓реЗ рднрд╡рд┐рд╖реНрдпрдорд╛ рдкрдвреНрди рдЧрд╛рд╣реНрд░реЛ рдмрдирд╛рдЙрдБрдЫ;
- рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡реНрдпрдХреНрддрд┐рд▓реЗ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫ;
- рддрдкрд╛рдИрдВрд▓реЗ рдХреЛрдбрдХреЛ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╕рдБрдЧ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди рд░ 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 рд╕реБрдЭрд╛рд╡ рд░ рдЪрд╛рд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрд╛рдЯ рдЕрдиреНрдп:
- ┬л
Kubernetes рд╕реБрдЭрд╛рд╡ рд░ рдЪрд╛рд▓рд╣рд░реВ: NGINX рдкреНрд░рд╡реЗрд╢рдорд╛ рдЕрдиреБрдХреВрд▓рди рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрдард╣рд░реВ ┬╗; - ┬л
рд╣реЗрд▓реНрдо реи рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирдорд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕реНрд░реЛрддрд╣рд░реВ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рдЧрд░реНрджреИ ┬╗; - ┬л
рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдиреЛрдб рдЖрд╡рдВрдЯрди рд░ рд▓реЛрдбрд╣рд░реВ рдмрд╛рд░реЗ ┬╗; - ┬л
dev рд╕рд╛рдЗрдЯрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ ┬╗; - ┬л
рдареВрд▓рд╛ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдмреБрдЯрд╕реНрдЯреНрд░реНрдпрд╛рдкрдХреЛ рдЧрддрд┐ рдмрдврд╛рдЙрдБрджреИ "ред
рд╕реНрд░реЛрдд: www.habr.com