ΠΠ°Ρ Π²ΡΠ΅ ΡΠ°ΡΠ΅ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π² Kubernetes. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ², Ρ
ΠΎΡΡΡ Π±ΡΡΡΡΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄ Π² Π»ΡΠ±ΠΈΠΌΠΎΠΉ IDE ΠΈ Π±Π΅Π· ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ/Π΄Π΅ΠΏΠ»ΠΎΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β ΠΏΠΎ ΠΏΡΠΎΡΡΠΎΠΌΡ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° F5. Π ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΡΠ»Π° ΠΏΡΠΎ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ (Π² Docker, VirtualBoxβ¦), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ β ΡΡΠ°Π·Ρ ΠΆΠ΅ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ. Π‘ ΡΠ°ΡΠΏΠΈΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠΎΠ² Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΎΠΌ Kubernetes, Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°, Π²ΡΡ
Π ΡΠ°Π·Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π Π½Π°ΡΠ½Ρ Ρ Ρ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΡ workarounds ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΠΎΡΡΡ Β«ΠΊΠΎΡΡΡΠ»Π΅ΠΉΒ».
1. ΠΠΎΡΡΡΠ»ΠΈ
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ IDE ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄ ΠΏΡΡΠΌΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ FTP/SFTP. Π’Π°ΠΊΠΎΠΉ ΠΏΡΡΡ Π²Π΅ΡΡΠΌΠ° ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½ ΠΈ ΠΌΡ ΡΡΠ°Π·Ρ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. Π‘ΡΡΡ Π΅Π³ΠΎ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ:
- Π podβΠ΅ Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (dev/review) Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΏΠΎ SSH ΠΈ ΠΏΡΠΎΠ±ΡΠΎΡΠΎΠΌ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ SSH-ΠΊΠ»ΡΡΠ° ΡΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΈΡΡ/Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- ΠΠ° init-ΡΡΠ°Π΄ΠΈΠΈ (Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
prepare-app
) ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΊΠΎΠ΄ Π²emptyDir
, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ΄Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ SSH-ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΡ
Π΅ΠΌΡ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΡ
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 }}
Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΡΠΈΡ
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ
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
ΠΡΠ°Π»Ρ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, Π·Π°ΠΏΡΡΡΠΈΠ²ΡΠΈΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° (ΠΊΠ°ΠΊ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΡΠ΄Π°Π²Π°ΡΡ Π΄ΠΎΡΡΡΠΏΡ ΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΡ,
ΠΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ ΠΌΠΈΠ½ΡΡΡ:
- Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ΅ Helm-ΡΠ°ΡΡΠ°, ΡΡΠΎ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ Π΅Π³ΠΎ ΡΡΠ΅Π½ΠΈΠ΅;
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ, ΠΊΡΠΎ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠ» ΡΠ΅ΡΠ²ΠΈΡ;
- Π½ΡΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±ΡΡΡ ΠΏΠΎΡΠΎΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ½ΡΡΡ Π² Git.
2. Telepresence
ΠΡΠΎΠ΅ΠΊΡ
ΠΡΠ»ΠΈ Π²ΠΊΡΠ°ΡΡΠ΅, ΡΠΎ Π²ΡΡ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅ ΡΠ°ΠΊ ΡΡΡΠ°ΡΠ½ΠΎ. ΠΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Helm-ΡΠ°ΡΡΠ°, Π½Π°Π·Π²Π°Π½Π½ΠΎΠΌ NOTES.txt
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΠΏΠ»ΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Π² Kubernetes Π²ΠΈΠ΄ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ dev-ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π² Π»ΠΎΠ³Π΅ jobβΠ° 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
ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ (ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΡΠ΅) ΠΌΡ Π·Π°Π΄Π°ΡΠΌ:
- ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ (namespace), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠ΅Π½ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ;
- ΠΈΠΌΠ΅Π½Π° deploymentβΠ° ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΡΡΡ.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ. ΠΡΠ»ΠΈ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Kubernetes API ΠΈ Π΄Π»Ρ Π½Π΅Π³ΠΎ --mount=true
(ΠΈΠ»ΠΈ --mount=/dst_path
), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΌΠΎΠ½ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΡΠ΅Π½Ρ (/) ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² Kubernetes ΠΊ Π½Π°ΠΌ Π½Π° desktop. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΠ‘ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π° Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ) Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Β«ΠΊΠ»ΡΡΠ°ΠΌΠΈΒ» ΠΎΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
Π Π½Π°ΡΠ°Π»Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΌΡΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β Π² Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠ»ΡΡΠΎΠΌ --docker-run
ΠΈ ΠΏΡΠΈΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ: -v `pwd`:/app
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ Π·Π°ΠΏΡΡΠΊ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ. ΠΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /app
Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅.
ΠΠ°Π»Π΅Π΅: -v /tmp/app/var/run/secrets:/var/run/secrets
β Π΄Π»Ρ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠΌ/ΡΠΎΠΊΠ΅Π½ΠΎΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
ΠΠ° ΡΡΠΎΠΉ ΠΎΠΏΡΠΈΠ΅ΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΎΠ±ΡΠ°Π·, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. NB: ΠΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΎΠ±ΡΠ°Π·Π° Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ CMD
ΠΈΠ»ΠΈ ENTRYPOINT
!
Π§ΡΠΎ ΠΆΠ΅, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π΄Π°Π»ΡΡΠ΅?
- Π Kubernetes Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ DeploymentβΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° 0. ΠΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡΡ Π½ΠΎΠ²ΡΠΉ Deployment β Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΠ½Π½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ
backend
. - ΠΠ° Π΄Π΅ΡΠΊΡΠΎΠΏΠ΅ Π·Π°ΠΏΡΡΡΡΡΡΡ 2 ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°: ΠΏΠ΅ΡΠ²ΡΠΉ β Ρ Telepresence (ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠ·/Π² Kubernetes), Π²ΡΠΎΡΠΎΠΉ β Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
- ΠΡΠ»ΠΈ execβΠ½ΡΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΎ Π½Π°ΠΌ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ ENV-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ HelmβΠΎΠΌ ΠΏΡΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ. ΠΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄ Π² Π»ΡΠ±ΠΈΠΌΠΎΠΉ IDE ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ.
- Π ΠΊΠΎΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠ΅Π½ Telepresence (ΠΎΠ±ΠΎΡΠ²Π°ΡΡ ΡΠ΅ΡΡΠΈΡ ΠΏΠΎ Ctrl+C), β Π½Π° Π΄Π΅ΡΠΊΡΠΎΠΏΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, Π° Π² Kubernetes Π²ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡΡ Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡΡΠ°Π½Π΅ΡΡΡ Π»ΠΈΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠ½ΡΡΡ, ΠΎΡΠΎΡΠΌΠΈΡΡ MR ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π½Π° review/merge/β¦ (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²).
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ Π½Π΅ Π½Π° PHP, Π° Π½Π° Go, ΠΈ Π²ΡΡ-ΡΠ°ΠΊΠΈ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, β Π·Π°ΠΏΡΡΠΊ Telepresence Π±ΡΠ΄Π΅Ρ Π΅ΡΡ ΠΏΡΠΎΡΠ΅:
telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name }}:backend --mount=true
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Kubernetes API, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ (https://www.telepresence.io/howto/volumes). ΠΠ»Ρ Linux Π΅ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ°
proot -b $TELEPRESENCE_ROOT/var/run/secrets/:/var/run/secrets bash
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Telepresence Π±Π΅Π· ΠΎΠΏΡΠΈΠΈ --docker-run
Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½ΡΠΌ.
NB: ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, PHP, Π½ΡΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ op_cache, apc ΠΈ ΠΏΡΠΎΡΠΈΠ΅ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΡ β ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΡΠΎΠ³ΠΈ
ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ Kubernetes β ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² (ΠΎΡ Π½Π°ΡΠΈΡ
ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²), ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΠΈΡ
ΡΠ΅ΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ Π·Π°ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΈ ΡΠ΅Π±Ρ Π½Π° Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΈ. ΠΠ»Π°Π³ΠΎ, ΡΡΠΎ ΡΡΠ°Π»ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΌΠΈΡΠ΅ ΡΠΆΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°, ΠΈ Telepresence β ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ
(ΠΊ ΡΠ»ΠΎΠ²Ρ, Π΅ΡΡΡ Π΅ΡΡ
P.S.
ΠΡΡΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΈΠΊΠ»Π° K8s tips & tricks:
- Β«
Kubernetes tips & tricks: ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² NGINX Ingress Β»; - Β«
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Helm 2 Β»; - Β«
Π Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ·Π»ΠΎΠ² ΠΈ ΠΎ Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ Π½Π° Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β»; - Β«
ΠΠΎΡΡΡΠΏ ΠΊ dev-ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°ΠΌ Β»; - Β«
Π£ΡΠΊΠΎΡΡΠ΅ΠΌ bootstrap Π±ΠΎΠ»ΡΡΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com