குபெர்னெட்ஸ் உதவிக்குறிப்புகள் மற்றும் தந்திரங்கள்: உள்ளூர் மேம்பாடு மற்றும் டெலிபிரசென்ஸ் பற்றி

குபெர்னெட்ஸ் உதவிக்குறிப்புகள் மற்றும் தந்திரங்கள்: உள்ளூர் மேம்பாடு மற்றும் டெலிபிரசென்ஸ் பற்றி

குபெர்னெட்டஸில் மைக்ரோ சர்வீஸ்களை உருவாக்குவது பற்றி எங்களிடம் அதிகளவில் கேட்கப்படுகிறது. டெவலப்பர்கள், குறிப்பாக விளக்கப்பட்ட மொழிகள், தங்களுக்குப் பிடித்தமான IDE இல் குறியீட்டை விரைவாகச் சரிசெய்து, உருவாக்க/பயன்படுத்துவதற்குக் காத்திருக்காமல் முடிவைப் பார்க்க விரும்புகிறார்கள் - F5ஐ அழுத்துவதன் மூலம். மோனோலிதிக் பயன்பாட்டிற்கு வரும்போது, ​​​​உள்ளூரில் ஒரு தரவுத்தளத்தையும் வலை சேவையகத்தையும் (டோக்கர், விர்ச்சுவல்பாக்ஸில்...) நிறுவினால் போதும், பின்னர் உடனடியாக மேம்பாட்டை அனுபவிக்கவும். மோனோலித்களை மைக்ரோ சர்வீஸ்களாக வெட்டுவது மற்றும் குபெர்னெட்டஸின் வருகையுடன், ஒன்றுக்கொன்று சார்ந்திருக்கும் தோற்றத்துடன், எல்லாமே அது இன்னும் கொஞ்சம் கடினமாகிவிட்டது. இந்த மைக்ரோ சர்வீஸ்கள் அதிகமாக இருந்தால், அதிக சிக்கல்கள். வளர்ச்சியை மீண்டும் அனுபவிக்க, நீங்கள் ஒன்று அல்லது இரண்டு டோக்கர் கொள்கலன்களை உயர்த்த வேண்டும், சில சமயங்களில் ஒரு டசனுக்கும் அதிகமாகவும்... பொதுவாக, இவை அனைத்தும் புதுப்பித்த நிலையில் வைத்திருக்க வேண்டும் என்பதால், இது நிறைய நேரம் எடுக்கும். .

வெவ்வேறு சமயங்களில் பிரச்சனைக்கு வெவ்வேறு தீர்வுகளை முயற்சித்தோம். மற்றும் நான் திரட்டப்பட்ட வேலைத்திட்டங்கள் அல்லது வெறுமனே "ஊன்றுகோல்" மூலம் தொடங்குவேன்.

1. ஊன்றுகோல்

பெரும்பாலான IDEகள் FTP/SFTP ஐப் பயன்படுத்தி சேவையகத்தில் நேரடியாக குறியீட்டைத் திருத்தும் திறனைக் கொண்டுள்ளன. இந்த பாதை மிகவும் வெளிப்படையானது, உடனடியாக அதைப் பயன்படுத்த முடிவு செய்தோம். அதன் சாராம்சம் பின்வருவனவற்றைக் குறைக்கிறது:

  1. டெவலப்மெண்ட் சூழல்களில் (dev/review), SSH அணுகலுடன் ஒரு கூடுதல் கொள்கலன் தொடங்கப்பட்டு, டெவலப்பரின் பொது SSH விசையை அனுப்புகிறது.
  2. தொடக்க நிலையில் (கன்டெய்னருக்குள் prepare-app) குறியீட்டை மாற்றவும் emptyDirபயன்பாட்டுக் கொள்கலன்கள் மற்றும் SSH சேவையகத்திலிருந்து குறியீட்டை அணுகுவதற்கு.

குபெர்னெட்ஸ் உதவிக்குறிப்புகள் மற்றும் தந்திரங்கள்: உள்ளூர் மேம்பாடு மற்றும் டெலிபிரசென்ஸ் பற்றி

அத்தகைய திட்டத்தின் தொழில்நுட்ப செயலாக்கத்தை நன்கு புரிந்து கொள்ள, குபெர்னெட்டஸில் உள்ள YAML உள்ளமைவுகளின் துண்டுகளை வழங்குவேன்.

கொன்ஃபிகுராசி

1.1 மதிப்புகள்.யாம்ல்

ssh_pub_key:
  vasya.pupkin: <ssh public key in base64> 

இது vasya.pupkin என்பது மாறியின் மதிப்பு ${GITLAB_USER_LOGIN}.

1.2 வரிசைப்படுத்தல்.யாம்ல்

...
{{ 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 ரகசியம்.யாம்ல்

{{ 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. டெலிபிரசென்ஸ்

திட்டம் தொலைப்பேசி இது நீண்ட காலமாக அறியப்படுகிறது, ஆனால் அவர்கள் சொல்வது போல், "நடைமுறையில் அதை தீவிரமாக முயற்சி செய்ய நாங்கள் வரவில்லை." இருப்பினும், தேவை அதன் வேலையைச் செய்துவிட்டது, இப்போது எங்கள் அனுபவத்தைப் பகிர்ந்து கொள்வதில் நாங்கள் மகிழ்ச்சியடைகிறோம், இது எங்கள் வலைப்பதிவின் வாசகர்களுக்கு பயனுள்ளதாக இருக்கும் - குறிப்பாக டெலிபிரசென்ஸைப் பற்றிய வேறு எந்தப் பொருட்களும் மையத்தில் இதுவரை இல்லாததால்.

சுருக்கமாக, எல்லாம் மிகவும் பயமாக இல்லை என்று மாறியது. டெவலப்பரின் தரப்பில் செயல்படுத்தப்பட வேண்டிய அனைத்து செயல்களையும் ஹெல்ம் விளக்கப்பட உரைக் கோப்பில் வைக்கிறோம் 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
#########################################################################

இந்த அறிவுறுத்தலில் விவரிக்கப்பட்டுள்ள படிகளில் நாம் விரிவாக வாழ மாட்டோம்... கடைசியாக ஒன்றைத் தவிர. டெலிபிரசென்ஸ் தொடங்கும் போது என்ன நடக்கிறது?

டெலிபிரசென்ஸுடன் பணிபுரிதல்

தொடக்கத்தில் (மேலே உள்ள வழிமுறைகளில் குறிப்பிடப்பட்டுள்ள கடைசி கட்டளையைப் பயன்படுத்தி), நாங்கள் அமைக்கிறோம்:

  • மைக்ரோ சர்வீஸ் இயங்கும் பெயர்வெளி;
  • நாம் ஊடுருவ விரும்பும் வரிசைப்படுத்தல் மற்றும் கொள்கலனின் பெயர்கள்.

மீதமுள்ள வாதங்கள் விருப்பமானவை. எங்கள் சேவை குபெர்னெட்ஸ் API உடன் தொடர்பு கொண்டால் சேவைக் கணக்கு உருவாக்கப்பட்டது, நமது டெஸ்க்டாப்பில் சான்றிதழ்கள்/டோக்கன்களை ஏற்ற வேண்டும். இதைச் செய்ய, விருப்பத்தைப் பயன்படுத்தவும் --mount=true (அல்லது --mount=/dst_path), இது ரூட் (/) ஐ குபெர்னெட்ஸ் கொள்கலனில் இருந்து எங்கள் டெஸ்க்டாப்பில் ஏற்றும். இதற்குப் பிறகு, நாம் (OS மற்றும் பயன்பாடு எவ்வாறு தொடங்கப்பட்டது என்பதைப் பொறுத்து) கிளஸ்டரிலிருந்து "விசைகளை" பயன்படுத்தலாம்.

முதலில், ஒரு பயன்பாட்டை இயக்குவதற்கான மிகவும் உலகளாவிய விருப்பத்தைப் பார்ப்போம் - ஒரு டோக்கர் கொள்கலனில். இதைச் செய்ய, விசையைப் பயன்படுத்துவோம் --docker-run குறியீட்டுடன் கோப்பகத்தை கொள்கலனில் ஏற்றவும்: -v `pwd`:/app

இது திட்டக் கோப்பகத்திலிருந்து இயங்குகிறது என்பதை நினைவில் கொள்ளவும். பயன்பாட்டுக் குறியீடு கோப்பகத்தில் ஏற்றப்படும் /app ஒரு கொள்கலனில்.

அடுத்து: -v /tmp/app/var/run/secrets:/var/run/secrets — சான்றிதழுடன்/டோக்கனுடன் கோப்பகத்தை ஒரு கொள்கலனில் ஏற்றுவதற்கு.

இந்த விருப்பம் இறுதியாக பயன்பாடு இயங்கும் படத்தால் பின்பற்றப்படுகிறது. NB: ஒரு படத்தை உருவாக்கும்போது, ​​நீங்கள் குறிப்பிட வேண்டும் CMD அல்லது ENTRYPOINT!

அடுத்து சரியாக என்ன நடக்கும்?

  • குபெர்னெட்டஸில், குறிப்பிட்ட வரிசைப்படுத்தலுக்கு, பிரதிகளின் எண்ணிக்கை 0 ஆக மாற்றப்படும். அதற்கு பதிலாக, ஒரு புதிய வரிசைப்படுத்தல் தொடங்கப்படும் - ஒரு மாற்று கொள்கலனுடன் backend.
  • டெஸ்க்டாப்பில் 2 கன்டெய்னர்கள் தொடங்கப்படும்: முதலாவது டெலிப்ரெசென்ஸுடன் (இது குபெர்னெட்டஸிலிருந்து/க்கு கோரிக்கைகளை ப்ராக்ஸி செய்யும்), இரண்டாவது பயன்பாடு உருவாக்கப்பட்டு வருகிறது.
  • பயன்பாட்டுடன் கண்டெய்னரில் செயல்பட்டால், வரிசைப்படுத்தலின் போது ஹெல்ம் மாற்றிய அனைத்து ENV மாறிகளும் நமக்குக் கிடைக்கும், மேலும் அனைத்து சேவைகளும் கிடைக்கும். உங்களுக்குப் பிடித்த IDE இல் குறியீட்டைத் திருத்தி, முடிவை அனுபவிப்பது மட்டுமே எஞ்சியுள்ளது.
  • வேலையின் முடிவில், டெலிபிரசென்ஸ் இயங்கும் முனையத்தை நீங்கள் மூட வேண்டும் (Ctrl + C உடன் அமர்வை நிறுத்தவும்) - டோக்கர் கொள்கலன்கள் டெஸ்க்டாப்பில் நிறுத்தப்படும், மேலும் குபெர்னெட்டஸில் அனைத்தும் அதன் ஆரம்ப நிலைக்குத் திரும்பும். எஞ்சியிருப்பது, MRஐ வழங்குவது மற்றும் மதிப்பாய்வு/இணைப்பு/... (உங்கள் பணிப்பாய்வுகளைப் பொறுத்து) மாற்றுவது மட்டுமே.

டோக்கர் கொள்கலனில் பயன்பாட்டை இயக்க விரும்பவில்லை என்றால் - எடுத்துக்காட்டாக, நாங்கள் PHP இல் அல்ல, Go இல் உருவாக்குகிறோம், இன்னும் அதை உள்நாட்டில் உருவாக்குகிறோம் - டெலிப்ரெசென்ஸைத் தொடங்குவது இன்னும் எளிமையானதாக இருக்கும்:

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

விருப்பம் இல்லாமல் டெலிபிரசென்ஸை அறிமுகப்படுத்திய பிறகு --docker-run அனைத்து சூழல் மாறிகளும் தற்போதைய முனையத்தில் கிடைக்கும், எனவே பயன்பாடு அதில் தொடங்கப்பட வேண்டும்.

NB: எடுத்துக்காட்டாக, PHP ஐப் பயன்படுத்தும் போது, ​​பல்வேறு op_cache, apc மற்றும் வளர்ச்சிக்கான பிற முடுக்கிகளை முடக்க நினைவில் கொள்ள வேண்டும் - இல்லையெனில் குறியீட்டைத் திருத்துவது விரும்பிய முடிவுக்கு வழிவகுக்காது.

முடிவுகளை

குபெர்னெட்டஸுடனான உள்ளூர் மேம்பாடு என்பது இந்த தளத்தின் பரவலுக்கு விகிதத்தில் வளர்ந்து வரும் ஒரு பிரச்சனையாகும். டெவலப்பர்களிடமிருந்து (எங்கள் வாடிக்கையாளர்களிடமிருந்து) தொடர்புடைய கோரிக்கைகளைப் பெற்று, முதலில் கிடைக்கக்கூடிய வழிமுறைகளுடன் அவற்றைத் தீர்க்கத் தொடங்கினோம், இருப்பினும், நீண்ட காலத்திற்கு தங்களை நிரூபிக்கவில்லை. அதிர்ஷ்டவசமாக, இது இப்போது மட்டுமல்ல, நமக்கு மட்டுமல்ல தெளிவாகிவிட்டது, எனவே உலகில் மிகவும் பொருத்தமான வழிமுறைகள் ஏற்கனவே தோன்றியுள்ளன, மேலும் டெலிப்ரெசென்ஸ் அவற்றில் மிகவும் பிரபலமானது (மூலம், அதுவும் உள்ளது. சாரக்கட்டு Google இலிருந்து). அதைப் பயன்படுத்துவதற்கான எங்கள் அனுபவம் இன்னும் சிறப்பாக இல்லை, ஆனால் அதை எங்கள் “கடையில் உள்ள சக ஊழியர்களுக்கு” ​​பரிந்துரைக்க இது ஏற்கனவே காரணத்தைத் தருகிறது - இதை முயற்சிக்கவும்!

சோசலிஸ்ட் கட்சி

K8s டிப்ஸ் & ட்ரிக்ஸ் தொடரிலிருந்து மற்றவை:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்