ααΎαβααααΌαβααΆαβααβαα½αβααΆααβααβααααΆααβα‘αΎαβα’αααΈβααΆαβα’αα·ααααβααααΆβααΈααααΌβαα
βαααα»α Kubernetesα α’αααα’αα·αααααα ααΆαα·αααααΆααΆαααααΆαααααααα
ααααααΌααααΆαααΆαααα αααα
αααα»α IDE ααααα½αααα
αΌαα
α·ααα α αΎαααΎαααααααααααα·αα
αΆαααΆα
ααααα
αΆαααΆαααααΆαααΆ/ααΆααα±ααααααΎααααΆααααααα αααααααΆααααα
α»α
F5α α αΎααα
ααααααααΆααααααααααα·ααΈ monolithic ααΆαααααααααΆαααααα»αααΆαααα‘αΎαααΌαααααΆααα·αααααα αα·ααααΆαααΈααααααααΆα (αα
αααα»α Docker, VirtualBox...) α αΎααααααΆααααααΈαααΆαααΉαααΆαα’αα·ααααααααααΆααα ααΆαα½αααΉαααΆαααΆαα monoliths α
αΌααα
αααα»α microservices αα·αααΆαααααααα Kubernetes ααΆαα½αααΉαααΌαααΆαααααΆαα’αΆαααααααααΆαα
αα·ααα
αα α’αααΈααααααααΆα
αα βαααβαααααβααααΆ ααΎαβααΆαβααααΆααΆαβαααααααααΆαβαααααβααααΆβα ααααβαααα αΆα α αΎαβαααα»αβααΉαβα αΆααβααααΎαβααΆαα½αβααΉαβααΆαβαααβααααΆαβαααβααΆαβαααααΌαβαααα»αβα¬βααΆβααΆααααβαα βααΉα "ααΎα αααα"α
1. ααΎα αααα
IDE ααΆαα αααΎαααΆααααααααΆααααα»αααΆαααααααα½αααΌααααααααΆαααα ααΎαααΆαααΈααααααααααΎ FTP/SFTP α ααααΌααααααΊα αααΆααααΆαα α αΎαααΎααααααααα α α·αααααααΎααΆααααΆααα ααααΉαααΆαααααααΆααΆαααΌα ααΆααααααα
- αα αααα»ααααααααααα·ααααΆαα’αα·αααααα (dev/review) αα»αααΊααααααααααα½αααααΌαααΆαααΎαααααΎαααΆαααΆαα½αααΉαααΆαα αΌαααααΎ SSH αα·ααααααΌαααααααΌα SSH key ααΆααΆαααααααα’αααα’αα·αααααααααααΉααααααααΉααα/ααΆααα±ααααααΎααααΆαααααααα·ααΈα
- αα
ααααΆααααΆαααααΌα (αα
αααα»ααα»α
prepare-app
) ααααααααααΌαααemptyDir
ααΎααααΈααΆααα·αααα·α αΌαααααΎααΌαααΈαα»ααααααα·ααΈ αα·ααααΆαααΈααα SSH α
ααΎααααΈαααααΆααααα
αααΆααα’αααΈααΆαα’αα»αααααα
αα
ααααααααααααααΆααααααααα αααα»αααΉααααααααΌααααααααααΆαααααααα
ααΆαααααααα YAML αααααΆααααααααα
αααα»α Kubernetes α
ααΆαααααααα ααΆαααααααα
α‘.α‘. 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α α’αααβα’αα·ααααααβαααβααΆαβα
αΆααβααααΎαβααΆαβααΆααβαααααΆαβα’αΆα
βαααααΆααβααΆαβαααααβααααΆ (ααααβαααααβαα·αααα·βα
αΌαβααααΎβα
αααααβαααβαα»ααααα·ααΆαα
αααααΊααΆαααααααααΆααααααααΎαααΆαααΆαααααα»α ααα»ααααααΆαααααααααααΆαα’αα»αααα ααΆααΆααα»ααα·ααααα·ααΆαααααααα
- αααααΌαααΆααααα»αααΆααααααα’ααΆααΆα Helm αααααααΎα±ααααΆαα·ααΆααααα»αααΆαα’αΆαααΆαααα’ααΆααα
- α’αΆα ααααΎααΆααααααα’ααααααααΆαααΆαααααααΆαααααΆααααααααα»αααααα
- α’αααααααΌαα αΆαααΆααααΎααααΆαααααααΆααΆαα½αααααΌαααααΆαααΆαα½αααΌα α αΎααααααααΆαα Git α
2. Telepresence
αααααα
ααα»ααα α’αααΈαααΆααααααα
ααΆαα·ααα½αα±ααααααΆα
αααααα ααΎαααΆαααΆαααααααααΆαααΆααα’ααααααααααΌαα±ααααααα·ααααα·ααΎαααααααα’αααα’αα·αααααααα
αααα»αα―αααΆαα’αααααααααΌαααΆα Helm αααα α
ααΆ 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
αα αααα αΆααααααΎα (αααααααΎααΆααααααααΆα α»αααααααααααΆααααααΆαααα αααα»αααΆαααααΆαααΆαααΎ) ααΎαααααα:
- namespace ααα microservice αααα»αααααΎαααΆα;
- αααααααααΆαααΆαααααααΆα αα·ααα»αααΊααααααααΎαα ααααααΆαα αΌαα
α’αΆαα»αααααααααα
αααααΊααααα
α
α·αααα ααααα·αααΎααααΆααααααααααΎαααααΎα’ααααααααααΆαα½α αα·ααααααΆαα Kubernetes API --mount=true
(α¬ --mount=/dst_path
) αααααΉαααααα«α (/) ααΈαα»αααΊααα Kubernetes αα
ααΆαααααααα»ααααααΎαα αααααΆααααΈααα ααΎαα’αΆα
(α’αΆαααααααΎ OS αα·αααααααααααααα·ααΈααααΌαααΆαααΆααα±ααααααΎαααΆα) ααααΎ "ααΌααα" ααΈα
αααααα
ααΆααααΌα ααΌααααα‘ααααΎααααααΎαααααααα»ααααααΆααααΆαααααΎαααΆααααααα·ααΈ - αα
αααα»α Docker containerα ααΎααααΈααααΎααΌα
αααααΎαααΉαααααΎαααααΉα --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 containers ααΉαααααα ααΎαααααα» α αΎααα αααα»α Kubernetes α’αααΈαααΉααααααααα αααΆαααΎααα·αα α’αααΈααααα αααααΊααΆαααααααααΆα α·ααα α αα MR α αΎααααααααΆαα αα·αα·ααα/αααα αΌα/β¦ (α’αΆαααααααΎααα αΌαααΆαααΆαααααα’ααα)α
ααααα·αααΎααΎααα·αα ααααααΎαααΆααααααα·ααΈαα αααα»α Docker container - α§ααΆα ααα ααΎαα’αα·αααααα·αααααα αααα»α 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 ααΊααααΈααααΆααααα»ααααα»αα
αααααα½ααα (ααααα·ααΈααα ααααΆαααααα
PS
ααααααααααΈαααααΈαααααΉα αα·ααααα·α K8sα
- Β«
αααααΉα αα·ααααα·α Kubernetesα αααααααα α»αααααΆαααααα½ααα αααα»α NGINX Ingress Β» - Β«
ααΆααααααααααΆαααααααα»αααααΎαααΆααααα»αα ααααααα ααΆαααααααααα Helm 2 Β» - Β«
α’αααΈααΆααααα ααααααΆαα αα·αααΆααααα»ααα ααΎαααααα·ααΈαααααΆα Β» - Β«
ααΆαα αΌαααααΎααα αααααα’αα·αααααα Β» - Β«
αααααΎαααααΏα Bootstrap αααααΆααααΌαααααΆααα·αααααααα "α
ααααα: www.habr.com