Kubernetes ඉඟි සහ උපක්‍රම: දේශීය සංවර්ධනය සහ Telepresence ගැන

Kubernetes ඉඟි සහ උපක්‍රම: දේශීය සංවර්ධනය සහ Telepresence ගැන

Kubernetes හි ක්ෂුද්‍ර සේවා සංවර්ධනය කිරීම පිළිබඳව අපගෙන් වැඩි වැඩියෙන් අසනු ලැබේ. සංවර්ධකයින්ට, විශේෂයෙන්ම පරිවර්ථනය කරන ලද භාෂාවලට, ඔවුන්ගේ ප්‍රියතම IDE හි කේතය ඉක්මනින් නිවැරදි කිරීමට අවශ්‍ය වන අතර, ගොඩ නැගීම / යෙදවීම බලා නොසිට ප්‍රතිඵලය බලන්න - හුදෙක් F5 එබීමෙන්. එය මොනොලිතික් යෙදුමකට පැමිණි විට, එය දේශීයව දත්ත සමුදායක් සහ වෙබ් සේවාදායකයක් ස්ථාපනය කිරීමට ප්‍රමාණවත් විය (Docker, VirtualBox හි ...), ඉන්පසු වහාම සංවර්ධනය භුක්ති විඳින්න. මොනොලිත් ක්ෂුද්‍ර සේවාවලට කැපීම සහ කුබර්නෙටේස් පැමිණීමත් සමඟ, එකිනෙකා මත යැපීම් පෙනුම සමඟ, සියල්ල එය තව ටිකක් අපහසු විය. මෙම microservices වැඩි වන තරමට ගැටළු වැඩි වේ. නැවත සංවර්ධනය භුක්ති විඳීමට, ඔබ ඩොකර් බහාලුම් එකකට හෝ දෙකකට වඩා වැඩි කළ යුතු අතර, සමහර විට දුසිමකට වඩා වැඩි විය යුතුය ... පොදුවේ ගත් කල, මේ සියල්ල යාවත්කාලීනව තබා ගත යුතු බැවින් බොහෝ කාලයක් ගත විය හැකිය. .

විවිධ අවස්ථාවලදී අපි ගැටලුවට විවිධ විසඳුම් උත්සාහ කළා. තවද මම සමුච්චිත විසඳුම් හෝ සරලව "කිහිලිකරු" සමඟ ආරම්භ කරමි.

1. අත්වාරු

බොහෝ IDEs හට FTP/SFTP භාවිතයෙන් සේවාදායකය මත කෙලින්ම කේතය සංස්කරණය කිරීමේ හැකියාව ඇත. මෙම මාර්ගය ඉතා පැහැදිලිව පෙනෙන අතර අපි වහාම එය භාවිතා කිරීමට තීරණය කළා. එහි සාරය පහත දක්වා පහත වැටේ:

  1. සංවර්ධන පරිසරයන් (dev/review) තුළ, SSH ප්‍රවේශය සහිත අතිරේක බහාලුමක් දියත් කර යෙදුම කැප කරන/පවත්වන සංවර්ධකයාගේ පොදු SSH යතුර යොමු කරයි.
  2. ආරම්භක අදියරේදී (කන්ටේනරය තුළ prepare-app) කේතය මාරු කරන්න emptyDirයෙදුම් බහාලුම් සහ SSH සේවාදායකයෙන් කේතය වෙත ප්‍රවේශ වීමට.

Kubernetes ඉඟි සහ උපක්‍රම: දේශීය සංවර්ධනය සහ Telepresence ගැන

එවැනි යෝජනා ක්‍රමයක තාක්ෂණික ක්‍රියාත්මක කිරීම වඩා හොඳින් අවබෝධ කර ගැනීම සඳහා, මම 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 }}

අවසාන ස්පර්ශය

ඊට පසු ඉතිරිව ඇත්තේ මාරු කිරීම පමණි අවශ්ය 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

Voila: යෙදවීම දියත් කළ සංවර්ධකයාට සේවා නාමයෙන් සම්බන්ධ විය හැක (පොකුරු වෙත ආරක්ෂිතව ප්‍රවේශය ලබා දෙන්නේ කෙසේද, අපි දැනටමත් කිව්වා) ඔබේ ඩෙස්ක්ටොප් එකෙන් SFTP හරහා සහ පොකුරට ලබා දෙන තෙක් බලා නොසිට කේතය සංස්කරණය කරන්න.

මෙය සම්පූර්ණයෙන්ම වැඩ කරන විසඳුමකි, නමුත් ක්රියාත්මක කිරීමේ දෘෂ්ටි කෝණයෙන් එය පැහැදිලි අවාසි ඇත:

  • අනාගතයේදී කියවීමට අපහසු වන හෙල්ම් ප්‍රස්ථාරය පිරිපහදු කිරීමේ අවශ්‍යතාවය;
  • භාවිතා කළ හැක්කේ සේවාව යෙදවූ පුද්ගලයාට පමණි;
  • ඔබ එය දේශීය නාමාවලිය සමඟ කේතය සමඟ සමමුහුර්ත කර Git වෙත භාර දීමට මතක තබා ගත යුතුය.

2. Telepresence

ව්යාපෘති ටෙලිප්‍රෙසන්ස් එය බොහෝ කලක සිට දන්නා නමුත්, ඔවුන් පවසන පරිදි, අපි එය ප්‍රායෝගිකව බැරෑරුම් ලෙස උත්සාහ කළේ නැත. කෙසේ වෙතත්, ඉල්ලුම එහි කාර්යය ඉටු කර ඇති අතර දැන් අපි අපගේ අත්දැකීම් බෙදා ගැනීමට සතුටු වෙමු, එය අපගේ බ්ලොග් පාඨකයන්ට ප්‍රයෝජනවත් විය හැකිය - විශේෂයෙන්ම තවමත් කේන්ද්‍රස්ථානයේ Telepresence පිළිබඳ වෙනත් ද්‍රව්‍ය නොතිබූ බැවින්.

කෙටියෙන් කිවහොත්, සෑම දෙයක්ම එතරම් බියජනක නොවන බව පෙනී ගියේය. අපි ක්‍රියාත්මක කිරීමට අවශ්‍ය සියලුම ක්‍රියා සංවර්ධකයාගේ පැත්තෙන් හෙල්ම් ප්‍රස්ථාර පෙළ ගොනුවක තැබුවෙමු NOTES.txt. මේ අනුව, Kubernetes වෙත සේවාව යෙදවීමෙන් පසු, සංවර්ධකයා GitLab රැකියා ලොගය තුළ දේශීය dev පරිසරය දියත් කිරීම සඳහා උපදෙස් දකියි:

!!! Разработка сервиса локально, в составе 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 සමඟ වැඩ කිරීම

ආරම්භයේදී (ඉහත උපදෙස් වල දක්වා ඇති අවසාන විධානය භාවිතා කරමින්), අපි සකසන්නෙමු:

  • ක්ෂුද්‍ර සේවාව ක්‍රියාත්මක වන නාම අවකාශය;
  • අපට විනිවිද යාමට අවශ්‍ය යෙදවීම සහ බහාලුම්වල නම්.

ඉතිරි තර්ක විකල්ප වේ. අපගේ සේවාව Kubernetes API සමඟ අන්තර් ක්‍රියා කරන්නේ නම් සේවා ගිණුම නිර්මාණය කර ඇත, අපි අපේ ඩෙස්ක්ටොප් එකේ සහතික/ටෝකන සවි කළ යුතුයි. මෙය සිදු කිරීම සඳහා, විකල්පය භාවිතා කරන්න --mount=true (හෝ --mount=/dst_path), එය Kubernetes කන්ටේනරයේ සිට අපගේ ඩෙස්ක්ටොප් එකට root (/) සවි කරනු ඇත. මෙයින් පසු, අපට (OS සහ යෙදුම දියත් කරන ආකාරය අනුව) පොකුරෙන් "යතුරු" භාවිතා කළ හැකිය.

පළමුව, යෙදුමක් ධාවනය කිරීම සඳහා වඩාත්ම විශ්වීය විකල්පය බලමු - ඩොකර් කන්ටේනරය තුළ. මෙය සිදු කිරීම සඳහා අපි යතුර භාවිතා කරමු --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 විචල්‍යයන් අපට ලබා ගත හැකි අතර සියලුම සේවාවන් ද ලබා ගත හැකිය. ඉතිරිව ඇත්තේ ඔබගේ ප්‍රියතම IDE හි කේතය සංස්කරණය කර ප්‍රතිඵලය භුක්ති විඳීමයි.
  • කාර්යය අවසානයේදී, ඔබට Telepresence ක්‍රියාත්මක වන පර්යන්තය වැසීමට අවශ්‍ය වේ (Ctrl + C සමඟ සැසිය අවසන් කරන්න) - ඩොකර් බහාලුම් ඩෙස්ක්ටොප් එක මත නතර වන අතර කුබර්නෙටස් හි සෑම දෙයක්ම එහි ආරම්භක තත්වයට පත්වේ. ඉතිරිව ඇත්තේ කැපවීම, MR නිකුත් කිරීම සහ එය සමාලෝචනය/ඒකාබද්ධ කිරීම/... (ඔබේ කාර්ය ප්‍රවාහයන් අනුව) වෙත මාරු කිරීම පමණි.

අපට යෙදුම ඩොකර් කන්ටේනරයක ධාවනය කිරීමට අවශ්‍ය නැතිනම් - උදාහරණයක් ලෙස, අපි සංවර්ධනය කරන්නේ 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 සහ අනෙකුත් ත්වරණකාරක අක්‍රිය කිරීමට ඔබ මතක තබා ගත යුතුය - එසේ නොමැති නම් කේතය සංස්කරණය කිරීමෙන් අපේක්ෂිත ප්‍රති result ලය නොලැබේ.

ප්රතිඵල

Kubernetes සමඟ දේශීය සංවර්ධනය ගැටලුවක් වන අතර එහි විසඳුම මෙම වේදිකාවේ ව්‍යාප්තියට සමානුපාතිකව වර්ධනය වේ. සංවර්ධකයින්ගෙන් (අපගේ සේවාදායකයින්ගෙන්) අදාළ ඉල්ලීම් ලැබීමෙන්, අපි ඒවා ලබා ගත හැකි පළමු මාධ්‍යයන් සමඟ විසඳීමට පටන් ගත්තෙමු, කෙසේ වෙතත්, එය දිගු කාලයක් පුරා ඔප්පු නොවීය. වාසනාවකට මෙන්, මෙය දැන් පමණක් නොව අපට පමණක් නොව පැහැදිලි වී ඇත, එබැවින් වඩාත් සුදුසු ක්‍රම දැනටමත් ලෝකයේ දර්ශනය වී ඇති අතර ටෙලිප්‍රෙසන්ස් ඒවායින් වඩාත් ප්‍රසිද්ධය (මාර්ගය වන විට, ද ඇත. පලංචිය Google වෙතින්). එය භාවිතා කිරීමේ අපගේ අත්දැකීම තවමත් එතරම් හොඳ නැත, නමුත් එය දැනටමත් අපගේ “සාප්පුවේ සිටින සගයන්ට” එය නිර්දේශ කිරීමට හේතුවක් සපයයි - එය උත්සාහ කරන්න!

ප්රාදේශීය සභා

K8s ඉඟි සහ උපක්‍රම මාලාවෙන් වෙනත්:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න