
Kubernetes ã§ã®ãã€ã¯ããµãŒãã¹ã®éçºã«ã€ããŠã®è³ªåãå¢ããŠããŸãã éçºè
ãç¹ã«ã€ã³ã¿ãŒããªã¿åèšèªã®éçºè
ã¯ããæ°ã«å
¥ãã® IDE ã§ã³ãŒãããã°ããä¿®æ£ãããã«ã/ãããã€ã¡ã³ããåŸ
ããã« F5 ããŒãæŒãã ãã§çµæã確èªããããšèããŠããŸãã ãŸããã¢ããªã·ã㯠ã¢ããªã±ãŒã·ã§ã³ã«é¢ããŠã¯ãããŒã¿ããŒã¹ãš Web ãµãŒã㌠(DockerãVirtualBox ãªã©) ãããŒã«ã«ã«ã€ã³ã¹ããŒã«ããã ãã§ååã§ãããã«éçºã楜ããããšãã§ããŸãã ã¢ããªã¹ããã€ã¯ããµãŒãã¹ã«åå²ãããKubernetes ãç»å Žãããšãçžäºã«äŸåããããã«ãªãããã¹ãŠã ã ãããã®ãã€ã¯ããµãŒãã¹ãå¢ããã»ã©ãåé¡ãå¢ããŸãã åã³éçºã楜ããã«ã¯ãXNUMX ã€ã XNUMX ã€ä»¥äžãå Žåã«ãã£ãŠã¯ XNUMX å以äžã® Docker ã³ã³ãããèµ·åããå¿
èŠããããŸããäžè¬ã«ãã³ã³ãããææ°ã®ç¶æ
ã«ä¿ã€å¿
èŠããããããããã«ã¯ããªãã®æéãããããŸãã ã
ããŸããŸãªææã«ãç§ãã¡ã¯åé¡ã«å¯ŸããŠããŸããŸãªè§£æ±ºçã詊ããŸããã ãããŠãèç©ãããåé¿çãã€ãŸãåã«ãæŸèæãããå§ããŸãã
1.æŸèæ
ã»ãšãã©ã® IDE ã«ã¯ãFTP/SFTP ã䜿çšããŠãµãŒããŒäžã§ã³ãŒããçŽæ¥ç·šéããæ©èœããããŸãã ãã®éã¯éåžžã«æçœãªã®ã§ãããã«ããã䜿çšããããšã«ããŸããã ãã®æ¬è³ªã¯æ¬¡ã®ãšããã§ãã
- éçºç°å¢ã®ããã (éçº/ã¬ãã¥ãŒ) ã§ã¯ãSSH ã¢ã¯ã»ã¹ã䜿çšããŠè¿œå ã®ã³ã³ãããŒãèµ·åãããã¢ããªã±ãŒã·ã§ã³ãã³ããã/ãããã€ããéçºè ã®å ¬é SSH ããŒã転éãããŸãã
- åææ®µéïŒã³ã³ããå
ïŒ
prepare-app) ã³ãŒããã«è»¢éããŸãemptyDirã¢ããªã±ãŒã·ã§ã³ ã³ã³ããããã³ SSH ãµãŒããŒããã³ãŒãã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã

ãã®ãããªã¹ããŒã ã®æè¡çãªå®è£
ãããæ·±ãçè§£ããããã«ãKubernetes ã§ã®é¢é£ãã YAML æ§æã®æçãæäŸããŸãã
èšå®
1.1. å€.yaml
ssh_pub_key:
vasya.pupkin: <ssh public key in base64>
ãã㯠vasya.pupkin 倿°ã®å€ã§ã ${GITLAB_USER_LOGIN}.
1.2. ãããã€ã¡ã³ã.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. ã·ãŒã¯ã¬ãã.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
åºæ¥äžãã: ãããã€ã¡ã³ããéå§ããéçºè ã¯ãµãŒãã¹åã§æ¥ç¶ã§ããŸã (ã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹ãå®å šã«èš±å¯ããæ¹æ³ã ) ããã¹ã¯ããããã SFTP çµç±ã§ããŠã³ããŒãããã¯ã©ã¹ã¿ãŒã«é ä¿¡ãããã®ãåŸ ããã«ã³ãŒããç·šéããŸãã
ããã¯å®å šã«æ©èœãããœãªã¥ãŒã·ã§ã³ã§ãããå®è£ ã®èгç¹ããèŠããšæãããªæ¬ ç¹ããããŸãã
- Helm ãã£ãŒããæ¹è¯ããå¿ èŠããããããå°æ¥çã«ã¯èªã¿ã«ãããªããŸãã
- ãµãŒãã¹ãå±éãã人ã®ã¿ã䜿çšã§ããŸãã
- ã³ãŒããå«ãããŒã«ã« ãã£ã¬ã¯ããªãšåæããGit ã«ã³ãããããããšãå¿ããªãã§ãã ããã
2. ãã¬ãã¬ãŒã³ã¹
ãããžã§ã¯ã ããªãåããç¥ãããŠããŸãããã圌ããèšãããã«ãç§ãã¡ã¯ãå®éã«çå£ã«è©Šãããšãã§ããŸããã§ãããã ããããéèŠã¯ååã«æ©èœãããããç¹ã«ããã«ã¯ãã¬ãã¬ãŒã³ã¹ã«é¢ããè³æãä»ã«ãªããããããã°ã®èªè ã«ãšã£ãŠåœ¹ç«ã€å¯èœæ§ã®ããçµéšãå ±æã§ããããšãå¬ããæããŸãã
èŠããã«ããã¹ãŠãããã»ã©æããªãããšã倿ããŸããã éçºè
åŽã§ã®å®è¡ãå¿
èŠãªãã¹ãŠã®ã¢ã¯ã·ã§ã³ãã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 ã®ç«ã¡äžãäžã«äœãèµ·ãããŸãã?
ãã¬ãã¬ãŒã³ã¹ã䜿çšãã
èµ·åæã« (äžèšã®æé ã§æå®ãããæåŸã®ã³ãã³ãã䜿çšããŠ)ãæ¬¡ã®ããã«èšå®ããŸãã
- ãã€ã¯ããµãŒãã¹ãå®è¡ãããŠããåå空éã
- äŸµå ¥ãããããã€ã¡ã³ããšã³ã³ãããŒã®ååã
æ®ãã®åŒæ°ã¯ãªãã·ã§ã³ã§ãã åœç€Ÿã®ãµãŒãã¹ã Kubernetes API ãšå¯Ÿè©±ããå Žåãããã³ Kubernetes API ã®ããã«å¯Ÿè©±ããå Žå ããã¹ã¯ãããã«èšŒææž/ããŒã¯ã³ãããŠã³ãããå¿
èŠããããŸãã ãããè¡ãã«ã¯ããªãã·ã§ã³ã䜿çšããŸã --mount=true ïŒãŸã㯠--mount=/dst_path)ãã«ãŒã (/) ã Kubernetes ã³ã³ãããŒãããã¹ã¯ãããã«ããŠã³ãããŸãã ãã®åŸã(OS ãšã¢ããªã±ãŒã·ã§ã³ã®èµ·åæ¹æ³ã«å¿ããŠ) ã¯ã©ã¹ã¿ãŒããã®ãããŒãã䜿çšã§ããŸãã
ãŸããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã®æãæ±çšçãªãªãã·ã§ã³ã§ãã Docker ã³ã³ãããŒãèŠãŠã¿ãŸãããã ãããè¡ãã«ã¯ãããŒã䜿çšããŸã --docker-run ãããŠãã³ãŒããå«ããã£ã¬ã¯ããªãã³ã³ããã«ããŠã³ãããŸãã -v `pwd`:/app
ããã¯ãããžã§ã¯ã ãã£ã¬ã¯ããªããå®è¡ããããšãåæãšããŠããããšã«æ³šæããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãã£ã¬ã¯ããªã«ããŠã³ããããŸã /app ã³ã³ããã®äžã
次ãžïŒ -v /tmp/app/var/run/secrets:/var/run/secrets â èšŒææž/ããŒã¯ã³ãå«ããã£ã¬ã¯ããªãã³ã³ããã«ããŠã³ãããŸãã
ãã®ãªãã·ã§ã³ã®åŸã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããã€ã¡ãŒãžãæåŸã«ç¶ããŸãã NB: ã€ã¡ãŒãžãæ§ç¯ãããšãã¯ãæå®ããå¿
èŠããããŸã CMD ãŸã㯠ENTRYPOINT!
次ã«å ·äœçã«äœãèµ·ããã®ã§ããããïŒ
- Kubernetes ã§ã¯ãæå®ããããããã€ã¡ã³ãã®ã¬ããªã«ã®æ°ã 0 ã«å€æŽãããŸãã代ããã«ã代æ¿ã³ã³ãããŒã䜿çšããŠæ°ãããããã€ã¡ã³ããèµ·åãããŸãã
backend. - ãã¹ã¯ãããäžã§ 2 ã€ã®ã³ã³ãããèµ·åããŸããXNUMX ã€ç®ã¯ Telepresence (Kubernetes ãšã®éã§ãªã¯ãšã¹ãããããã·ããŸã) ã䜿çšããXNUMX ã€ç®ã¯éçºäžã®ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãå«ãã³ã³ãããŒãå®è¡ãããšããããã€äžã« Helm ã«ãã£ãŠè»¢éããããã¹ãŠã® ENV 倿°ãå©çšå¯èœã«ãªãããã¹ãŠã®ãµãŒãã¹ãå©çšã§ããããã«ãªããŸãã ããšã¯ããæ°ã«å ¥ãã® 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ïŒã Linux ãŠãŒãã£ãªãã£ããããŸã :
proot -b $TELEPRESENCE_ROOT/var/run/secrets/:/var/run/secrets bash ãªãã·ã§ã³ãæå®ããã« Telepresence ãèµ·åããåŸ --docker-run ãã¹ãŠã®ç°å¢å€æ°ã¯çŸåšã®ã¿ãŒããã«ã§äœ¿çšã§ãããããã¢ããªã±ãŒã·ã§ã³ã¯ãã®ã¿ãŒããã«ã§èµ·åããå¿
èŠããããŸãã
NB: ããšãã°ãPHP ã䜿çšããå Žåã¯ãéçºã®ããã«ããŸããŸãª op_cacheãapcãããã³ãã®ä»ã®ã¢ã¯ã»ã©ã¬ãŒã¿ãå¿ããã«ç¡å¹ã«ããå¿ èŠããããŸããç¡å¹ã«ããªããšãã³ãŒããç·šéããŠãæãŸããçµæãåŸãããŸããã
çµæ
Kubernetes ã䜿çšããããŒã«ã«éçºã¯ããã®ãã©ãããã©ãŒã ã®æ®åã«æ¯äŸããŠè§£æ±ºçãæ¡å€§ããŠããåé¡ã§ãã éçºè (ã¯ã©ã€ã¢ã³ã) ããé¢é£ãããªã¯ãšã¹ããåãåããç§ãã¡ã¯æåã«å©çšå¯èœãªææ®µã§ãããã®è§£æ±ºã«åãçµã¿å§ããŸããããé·æçã«ã¯ãã®å¹æã蚌æãããŸããã§ããã 幞ããªããšã«ãããã¯ä»ã ãã§ãªããç§ãã¡ã«ãšã£ãŠãæããã«ãªã£ãã®ã§ãããé©åãªææ®µããã§ã«äžã®äžã«çŸããŠããããã¬ãã¬ãŒã³ã¹ã¯ãã®äžã§æãæåã§ãïŒã¡ãªã¿ã«ã GoogleããïŒã ç§ãã¡ã®äœ¿çšçµéšã¯ãŸã ããã»ã©çŽ æŽããããã®ã§ã¯ãããŸãããããã§ã«ãåºã®ååãã«å§ããçç±ãã§ããŠããŸãããã²è©ŠããŠã¿ãŠãã ããã
PS
K8s ã®ãã³ããšãã¯ãã㯠ã·ãªãŒãºã®ãã®ä»:
- «";
- «";
- «";
- «";
- «'ã
åºæïŒ habr.com
