በኩበርኔትስ ውስጥ የማይክሮ አገልግሎቶችን ስለማዳበር የበለጠ እንጠየቃለን። ገንቢዎች በተለይም የተተረጎሙ ቋንቋዎች በሚወዱት አይዲኢ ውስጥ ኮድን በፍጥነት ማረም እና ግንባታ/ማሰማራትን ሳይጠብቁ ውጤቱን ማየት ይፈልጋሉ - በቀላሉ F5 ን በመጫን። እና ወደ አንድ ነጠላ አፕሊኬሽን ስንመጣ የውሂብ ጎታ እና የድር አገልጋይን (በ Docker, VirtualBox ...) ውስጥ መጫን በቂ ነበር, እና ከዚያ ወዲያውኑ በልማት ይደሰቱ. ሞኖሊቶች ወደ ማይክሮ ሰርቪስ በመቁረጥ እና የኩበርኔትስ መምጣት ፣ እርስ በእርስ ጥገኛ ሆነው ይታያሉ ፣ ሁሉም ነገር
በተለያዩ ጊዜያት ለችግሩ የተለያዩ መፍትሄዎችን ሞክረን ነበር። እና እኔ በተጠራቀሙ የአሰራር ዘዴዎች ወይም በቀላሉ "ክራች" እጀምራለሁ.
1. ክራንች
አብዛኛዎቹ አይዲኢዎች ኤፍቲፒ/ኤስኤፍቲፒን በመጠቀም በአገልጋዩ ላይ በቀጥታ ኮድ የማርትዕ ችሎታ አላቸው። ይህ መንገድ በጣም ግልጽ ነው እና ወዲያውኑ ለመጠቀም ወሰንን. ዋናው ነገር ወደሚከተለው ይወርዳል።
- በልማት አከባቢዎች (dev/ግምገማ) ውስጥ አንድ ተጨማሪ መያዣ ከኤስኤስኤች መዳረሻ ጋር ተጀምሯል እና አፕሊኬሽኑን የሚፈጽም/ የሚያሰማራውን የገንቢውን የህዝብ SSH ቁልፍ ያስተላልፋል።
- በመግቢያው ደረጃ (በመያዣው ውስጥ
prepare-app
) ኮዱን ያስተላልፉemptyDir
ከመተግበሪያው ኮንቴይነሮች እና ከኤስኤስኤች አገልጋይ ወደ ኮዱ መድረስ።
የእንደዚህ አይነት እቅድ ቴክኒካል አተገባበርን የበለጠ ለመረዳት በኩበርኔትስ ውስጥ የተሳተፉትን የ 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
ቮይላ፡ ማሰማራቱን የጀመረው ገንቢ በአገልግሎት ስም መገናኘት ይችላል (እንዴት ወደ ክላስተር ደህንነቱ በተጠበቀ መልኩ እንደሚሰጥ፣
ይህ ሙሉ በሙሉ የሚሰራ መፍትሄ ነው, ነገር ግን ከትግበራ እይታ አንጻር ግልጽ የሆኑ ጉዳቶች አሉት.
- ለወደፊቱ ለማንበብ አስቸጋሪ የሚያደርገውን የሄልማን ሰንጠረዥ የማጥራት አስፈላጊነት;
- አገልግሎቱን ባሰማረው ሰው ብቻ መጠቀም ይቻላል;
- ከአካባቢው ማውጫ ጋር ከኮዱ ጋር ማመሳሰል እና ለጊት ማስገባቱን ማስታወስ ያስፈልግዎታል።
2. በቴሌፎን መገኘት
ፕሮጀክቱ
በአጭሩ, ሁሉም ነገር በጣም አስፈሪ ሆኖ አልተገኘም. በገንቢው በኩል ማስፈጸምን የሚጠይቁትን ሁሉንም ድርጊቶች በተጠራው የ Helm ገበታ የጽሑፍ ፋይል ውስጥ አስቀምጠናል። NOTES.txt
. ስለዚህ አገልግሎቱን ወደ ኩበርኔትስ ካሰማራ በኋላ ገንቢው በ 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 ኤፒአይ ጋር የሚገናኝ ከሆነ --mount=true
(ወይም --mount=/dst_path
, ይህም ሥሩን (/) ከኩበርኔትስ መያዣ ወደ ዴስክቶፕችን ይጭናል. ከዚህ በኋላ, (በስርዓተ ክወናው እና አፕሊኬሽኑ እንዴት እንደሚጀመር ላይ በመመስረት) "ቁልፎቹን" ከክላስተር መጠቀም እንችላለን.
በመጀመሪያ ፣ መተግበሪያን ለማስኬድ በጣም ሁለንተናዊውን አማራጭ እንመልከት - በ Docker መያዣ። ይህንን ለማድረግ ቁልፉን እንጠቀማለን --docker-run
እና ማውጫውን ከኮዱ ጋር ወደ መያዣው ውስጥ ይሰኩት፡ -v `pwd`:/app
ይህ ከፕሮጀክት ማውጫው እየሄደ መሆኑን እባክዎ ልብ ይበሉ። የመተግበሪያው ኮድ በማውጫው ውስጥ ይጫናል /app
በእቃ መያዣ ውስጥ.
ቀጣይ: -v /tmp/app/var/run/secrets:/var/run/secrets
- ማውጫውን ከእውቅና ማረጋገጫው/ቶከን ጋር ወደ መያዣ ውስጥ ለመጫን።
ይህ አማራጭ በመጨረሻ አፕሊኬሽኑ የሚሰራበት ምስል ይከተላል። NB: ምስል ሲገነቡ, መጥቀስ አለብዎት CMD
ወይም ENTRYPOINT
!
በትክክል ቀጥሎ ምን ይሆናል?
- በኩበርኔትስ ውስጥ ፣ ለተጠቀሰው ማሰማራት ፣ የተባዙት ቁጥር ወደ 0 ይቀየራል ። በምትኩ ፣ አዲስ ማሰማራት ይጀምራል - ከተለዋዋጭ መያዣ ጋር።
backend
. - 2 ኮንቴይነሮች በዴስክቶፕ ላይ ይጀምራሉ-የመጀመሪያው በቴሌፕረሴንስ (ከ ኩበርኔትስ የተኪ ጥያቄዎችን ያቀርባል) ፣ ሁለተኛው መተግበሪያ እየተዘጋጀ ነው።
- ከማመልከቻው ጋር ወደ መያዣው ውስጥ ከገባን ፣በመላው ጊዜ በ Helm የሚተላለፉ ሁሉም የ ENV ተለዋዋጮች ለእኛ ይገኛሉ ፣ እና ሁሉም አገልግሎቶች እንዲሁ ይገኛሉ ። የሚቀረው በሚወዱት IDE ውስጥ ያለውን ኮድ ማርትዕ እና በውጤቱ መደሰት ነው።
- በስራው መጨረሻ ላይ ቴሌፕረሰንስ የሚሰራበትን ተርሚናል መዝጋት ብቻ ያስፈልግዎታል (ክፍለ ጊዜውን በ Ctrl + C ያቋርጡ) - Docker ኮንቴይነሮች በዴስክቶፕ ላይ ይቆማሉ እና በ Kubernetes ውስጥ ሁሉም ነገር ወደ መጀመሪያው ሁኔታ ይመለሳል። የቀረው ነገር ቢኖር ቃል መግባቱ፣ ኤምአርኤን ማውጣት እና ወደ መገምገም/ማዋሃድ/… (እንደ የስራ ፍሰቶችዎ የሚወሰን) ማስተላለፍ ነው።
አፕሊኬሽኑን በዶከር ኮንቴይነር ውስጥ ማስኬድ ካልፈለግን - ለምሳሌ በPHP ውስጥ ሳይሆን በ Go ውስጥ እንገነባለን እና አሁንም በአገር ውስጥ እንገነባለን - ቴሌፕረዘንስን ማስጀመር የበለጠ ቀላል ይሆናል፡
telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name }}:backend --mount=true
አፕሊኬሽኑ የኩበርኔትስ ኤፒአይን ከደረሰ፣ የቁልፍ ማውጫውን (https://www.telepresence.io/howto/volumes) መጫን ያስፈልግዎታል። ለሊኑክስ መገልገያ አለ።
proot -b $TELEPRESENCE_ROOT/var/run/secrets/:/var/run/secrets bash
ያለ አማራጭ ቴሌፕረዘንስን ከጀመሩ በኋላ --docker-run
ሁሉም የአካባቢ ተለዋዋጮች አሁን ባለው ተርሚናል ውስጥ ይገኛሉ፣ ስለዚህ አፕሊኬሽኑ በውስጡ መጀመር አለበት።
NBለምሳሌ ፒኤችፒን ሲጠቀሙ የተለያዩ op_cache፣ apc እና ሌሎች ማፍጠኛዎችን ለልማት ማሰናከል እንዳለቦት ማስታወስ አለብዎት - ያለበለዚያ ኮዱን ማረም ወደሚፈለገው ውጤት አይመራም።
ውጤቶች
ከኩበርኔትስ ጋር ያለው የአካባቢ ልማት የዚህ መድረክ መስፋፋት በተመጣጣኝ ፍጥነት እያደገ የመጣ ችግር ነው። ከገንቢዎች (ከደንበኞቻችን) አግባብነት ያላቸው ጥያቄዎችን በመቀበል በመጀመሪያ በሚገኙ ዘዴዎች መፍታት ጀመርን, ሆኖም ግን, ለረዥም ጊዜ እራሳቸውን አላረጋገጡም. እንደ እድል ሆኖ, ይህ አሁን ብቻ ሳይሆን ለእኛም ብቻ ሳይሆን ግልጽ ሆኗል, ስለዚህ ይበልጥ ተስማሚ መንገዶች ቀድሞውኑ በዓለም ላይ ታይተዋል, እና ቴሌፕረሰንስ ከነሱ በጣም ዝነኛ ነው (በነገራችን ላይ ደግሞ አለ.
PS
ከK8s ተከታታይ ምክሮች እና ዘዴዎች ሌሎች፡-
- «
የኩበርኔትስ ምክሮች እና ዘዴዎች፡ ብጁ የስህተት ገጾች በNGINX Ingress ውስጥ "; - «
በ Helm 2 ቁጥጥር ስር ባለው ክላስተር ውስጥ የሚሰሩ ሀብቶችን ማስተላለፍ "; - «
ስለ አንጓዎች ድልድል እና በድር መተግበሪያ ላይ ስላሉት ጭነቶች "; - «
የዴቪ ጣቢያዎች መዳረሻ "; - «
ለትልቅ የውሂብ ጎታዎች የቡት ማሰሪያን ማፋጠን ».
ምንጭ: hab.com