የኩበርኔትስ ጠቃሚ ምክሮች እና ዘዴዎች፡ ስለ አካባቢ ልማት እና ቴሌፕረዘንስ

የኩበርኔትስ ጠቃሚ ምክሮች እና ዘዴዎች፡ ስለ አካባቢ ልማት እና ቴሌፕረዘንስ

በኩበርኔትስ ውስጥ የማይክሮ አገልግሎቶችን ስለማዳበር የበለጠ እንጠየቃለን። ገንቢዎች በተለይም የተተረጎሙ ቋንቋዎች በሚወዱት አይዲኢ ውስጥ ኮድን በፍጥነት ማረም እና ግንባታ/ማሰማራትን ሳይጠብቁ ውጤቱን ማየት ይፈልጋሉ - በቀላሉ F5 ን በመጫን። እና ወደ አንድ ነጠላ አፕሊኬሽን ስንመጣ የውሂብ ጎታ እና የድር አገልጋይን (በ Docker, VirtualBox ...) ውስጥ መጫን በቂ ነበር, እና ከዚያ ወዲያውኑ በልማት ይደሰቱ. ሞኖሊቶች ወደ ማይክሮ ሰርቪስ በመቁረጥ እና የኩበርኔትስ መምጣት ፣ እርስ በእርስ ጥገኛ ሆነው ይታያሉ ፣ ሁሉም ነገር ትንሽ የበለጠ አስቸጋሪ ሆነ. የእነዚህ ማይክሮ አግልግሎቶች የበለጠ, ብዙ ችግሮች. በልማት እንደገና ለመደሰት ከአንድ ወይም ከሁለት በላይ የዶከር ኮንቴይነሮችን እና አንዳንዴም ከደርዘን በላይ መጨመር ያስፈልግዎታል ... በአጠቃላይ ይህ ሁሉ በጣም ብዙ ጊዜ ሊወስድ ይችላል, ምክንያቱም እንዲሁ ወቅታዊ መሆን አለበት. .

በተለያዩ ጊዜያት ለችግሩ የተለያዩ መፍትሄዎችን ሞክረን ነበር። እና እኔ በተጠራቀሙ የአሰራር ዘዴዎች ወይም በቀላሉ "ክራች" እጀምራለሁ.

1. ክራንች

አብዛኛዎቹ አይዲኢዎች ኤፍቲፒ/ኤስኤፍቲፒን በመጠቀም በአገልጋዩ ላይ በቀጥታ ኮድ የማርትዕ ችሎታ አላቸው። ይህ መንገድ በጣም ግልጽ ነው እና ወዲያውኑ ለመጠቀም ወሰንን. ዋናው ነገር ወደሚከተለው ይወርዳል።

  1. በልማት አከባቢዎች (dev/ግምገማ) ውስጥ አንድ ተጨማሪ መያዣ ከኤስኤስኤች መዳረሻ ጋር ተጀምሯል እና አፕሊኬሽኑን የሚፈጽም/ የሚያሰማራውን የገንቢውን የህዝብ SSH ቁልፍ ያስተላልፋል።
  2. በመግቢያው ደረጃ (በመያዣው ውስጥ 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 }}

የመጨረሻ ንክኪ

ከዚያ በኋላ የሚቀረው ማስተላለፍ ብቻ ነው። የሚያስፈልጉ gitlab-ci.yml ተለዋዋጮች:

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 በኩል እና ኮዱን ወደ ክላስተር እስኪደርስ ድረስ ሳትጠብቅ አርትዕ አድርግ።

ይህ ሙሉ በሙሉ የሚሰራ መፍትሄ ነው, ነገር ግን ከትግበራ እይታ አንጻር ግልጽ የሆኑ ጉዳቶች አሉት.

  • ለወደፊቱ ለማንበብ አስቸጋሪ የሚያደርገውን የሄልማን ሰንጠረዥ የማጥራት አስፈላጊነት;
  • አገልግሎቱን ባሰማረው ሰው ብቻ መጠቀም ይቻላል;
  • ከአካባቢው ማውጫ ጋር ከኮዱ ጋር ማመሳሰል እና ለጊት ማስገባቱን ማስታወስ ያስፈልግዎታል።

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 እና ሌሎች ማፍጠኛዎችን ለልማት ማሰናከል እንዳለቦት ማስታወስ አለብዎት - ያለበለዚያ ኮዱን ማረም ወደሚፈለገው ውጤት አይመራም።

ውጤቶች

ከኩበርኔትስ ጋር ያለው የአካባቢ ልማት የዚህ መድረክ መስፋፋት በተመጣጣኝ ፍጥነት እያደገ የመጣ ችግር ነው። ከገንቢዎች (ከደንበኞቻችን) አግባብነት ያላቸው ጥያቄዎችን በመቀበል በመጀመሪያ በሚገኙ ዘዴዎች መፍታት ጀመርን, ሆኖም ግን, ለረዥም ጊዜ እራሳቸውን አላረጋገጡም. እንደ እድል ሆኖ, ይህ አሁን ብቻ ሳይሆን ለእኛም ብቻ ሳይሆን ግልጽ ሆኗል, ስለዚህ ይበልጥ ተስማሚ መንገዶች ቀድሞውኑ በዓለም ላይ ታይተዋል, እና ቴሌፕረሰንስ ከነሱ በጣም ዝነኛ ነው (በነገራችን ላይ ደግሞ አለ. skaffold ከ Google)። እሱን የመጠቀም ልምዳችን ገና ያን ያህል ትልቅ አይደለም ፣ ግን ቀድሞውኑ “በሱቅ ውስጥ ላሉ ባልደረቦቻችን” እንድንመክረው ምክንያት ይሰጠናል - ይሞክሩት!

PS

ከK8s ተከታታይ ምክሮች እና ዘዴዎች ሌሎች፡-

ምንጭ: hab.com

አስተያየት ያክሉ