ืื ืื ื ื ืฉืืืื ืืืชืจ ืืืืชืจ ืืืื ืคืืชืื ืฉืืจืืชื ืืืงืจื ื-Kubernetes. ืืคืชืืื, ืืืืืื ืฉื ืฉืคืืช ืืชืคืจืฉืืช, ืจืืฆืื ืืชืงื ืืืืืจืืช ืืช ืืงืื ื-IDE ืืืืขืืฃ ืขืืืื ืืืจืืืช ืืช ืืชืืฆืื ืืืื ืืืืืช ืืื ืืื/ืคืจืืกื - ืคืฉืื ืขื ืืื ืืืืฆื ืขื F5. ืืืฉืื ืืืืข ืืืคืืืงืฆืื ืืื ืืืืืืช, ืื ืืื ืืกืคืืง ืืืชืงืื ืืงืืืืช ืืกื ื ืชืื ืื ืืฉืจืช ืืื ืืจื ื (ื Docker, VirtualBox...), ืืื ืืื ืืืื ืืช ืืคืืชืื. ืขื ืืืชืื ืืืื ืืืืืื ืืืืงืจื-ืฉืืจืืชืื ืืืืขืช Kubernetes, ืขื ืืืคืขืช ืชืืืช ืื ืืื, ืืื
ืืืื ืื ืฉืื ืื ื ืืกืื ื ืคืชืจืื ืืช ืฉืื ืื ืืืขืื. ืืืชืืื ืขื ืืืจืืื ืืืฆืืืจืืช ืืขืงืืคืช ืืืขืื ืื ืคืฉืื "ืงืืืื".
1. ืงืืืื
ืืจืื ื-IDEs ืืฉ ืืช ืืืืืืช ืืขืจืื ืงืื ืืฉืืจืืช ืืฉืจืช ืืืืฆืขืืช FTP/SFTP. ืืืจื ืืื ืืืื ืืจืืจื ืืืื ืืืืื ื ืืืฉืชืืฉ ืื. ืืืืืช ืฉืื ืืกืชืืืช ืืืืจืื ืืืืื:
- ืืคืื ืฉื ืกืืืืืช ืืคืืชืื (dev/review), ืืืฉืง ืงืื ืืืื ืจ ื ืืกืฃ ืขื ืืืฉืช SSH ืืืขืืจืช ืืคืชื ื-SSH ืืฆืืืืจื ืฉื ืืืคืชื ืฉืืืฆืข/ืคืจืืก ืืช ืืืคืืืงืฆืื.
- ืืฉืื ืืคืชืืื (ืืชืื ืืืืื
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
ืืืืื: ืืืคืชื ืฉืืฉืืง ืืช ืืคืจืืกื ืืืื ืืืชืืืจ ืืคื ืฉื ืืฉืืจืืช (ืืื ืืืขื ืืง ืืฆืืจื ืืืืืืืช ืืืฉื ืืืฉืืื,
ืืื ืคืชืจืื ืขืืื ืืืืืืื, ืื ืื ืงืืืช ืืื ืฉื ืืืฉืื ืืฉ ืื ืืกืจืื ืืช ืืจืืจืื:
- ืืฆืืจื ืืืื ืืช ืชืจืฉืื ืืืื, ืื ืฉืืงืฉื ืขื ืืงืจืืื ืืขืชืื;
- ืืืื ืืฉืืฉ ืจืง ืืช ืืืื ืฉืคืจืก ืืช ืืฉืืจืืช;
- ืืชื ืฆืจืื ืืืืืจ ืืืืจ ืืื ืืกื ืืจื ืืืชื ืขื ืืกืคืจืืื ืืืงืืืืช ืขื ืืงืื ืืืืกืืจ ืืืชื ื-Git.
2. ื ืืืืืช ืืืคืื ืืช
ืคืจืืืงื
ืืงืืฆืืจ, ืืชืืจืจ ืฉืืื ืื ืื ืื ืืคืืื. ืฉืื ื ืืช ืื ืืคืขืืืืช ืืืืจืฉืืช ืืืฆืืข ืืฆื ืืืคืชื ืืงืืืฅ ืืงืกื ืฉื Helm chart ืืฉื 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
ืืขืช ืืืชืืื (ืืืืฆืขืืช ืืคืงืืื ืืืืจืื ื ืฉืฆืืื ื ืืืืจืืืช ืืืขืื), ืืืืจื ื:
- ืืจืื ืืฉืืืช ืฉืื ืคืืขื ืืืืงืจื-ืฉืืจืืช;
- ืฉืืืช ืืคืจืืกื ืืืืืื ืฉืื ื ืจืืฆืื ืืืืืจ ืืืืื.
ืฉืืจ ืืืืขืื ืื ืื ืืืคืฆืืื ืืืื. ืื ืืฉืืจืืช ืฉืื ื ืืงืืื ืืื ืืจืืงืฆืื ืขื ืืขืืืจ ื-API ืฉื Kubernetes --mount=true
(ืื --mount=/dst_path
), ืฉืืขืื ืืช ืืฉืืจืฉ (/) ืืืืื Kubernetes ืืฉืืืื ืืขืืืื ืฉืื ื. ืืืืจ ืืื, ืื ื ืืืืืื (ืืืชืื ืืืขืจืืช ืืืคืขืื ืืืื ืืืคืืืงืฆืื ืืืคืขืืช) ืืืฉืชืืฉ ื"ืืคืชืืืช" ืืืืฉืืื.
ืจืืฉืืช, ืืืื ื ืกืชืื ืขื ืืืคืฉืจืืช ืืืื ืืืจืกืืืช ืืืืชืจ ืืืคืขืืช ืืคืืืงืฆืื - ืืงืื ืืืื ืจ ืฉื Docker. ืืฉื ืื ื ืฉืชืืฉ ืืืคืชื --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 ืืืขืฆืจื ืขื ืฉืืืื ืืขืืืื, ืื-Kubernetes ืืื ืืืืืจ ืืืฆืื ืืืชืืืชื. ืื ืื ืฉื ืืชืจ ืืื ืืืชืืืื, ืืื ืคืืง ืืช ื-MR ืืืืขืืืจื ืืืืืงื/ืืืืื/... (ืืืชืื ืืืจืืืืช ืืขืืืื ืฉืืื).
ืื ืื ืื ื ืื ืจืืฆืื ืืืจืืฅ ืืช ืืืคืืืงืฆืื ืืงืื ืืืื ืจ ืฉื Docker - ืืืฉื, ืื ืื ื ืืคืชืืื ืื ื-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 ืืื ืืืคืืจืกืืช ืฉืืื (ืืื, ืืฉ ืื
ื .ื.
ืืืจ ืืกืืจืช ืืืืคืื ืืืืจืืงืื ืฉื K8s:
- ยซ
ืขืฆืืช ืืืจืืงืื ืฉื Kubernetes: ืืคื ืฉืืืื ืืืชืืืื ืืืฉืืช ื-NGINX Ingress "; - ยซ
ืืขืืจืช ืืฉืืืื ืืคืืขืืื ืืืฉืืื ืื ืืืื Helm 2 "; - ยซ
ืขื ืืงืฆืืช ืฆืืชืื ืืขืืืกืื ืืืืฉืื ืืื ืืจื ื "; - ยซ
ืืืฉื ืืืชืจื ืคืืชืื "; - ยซ
ืืืจืื ืืชืืื ืขืืืจ ืืกืื ื ืชืื ืื ืืืืืื ".
ืืงืืจ: www.habr.com