Kubernetes အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသ- ဒေသဖလံ့ဖဌိုသရေသနဟင့် Telepresence အကဌောင်သ

Kubernetes အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသ- ဒေသဖလံ့ဖဌိုသရေသနဟင့် Telepresence အကဌောင်သ

Kubernetes တလင် မိုက်ခရိုဝန်ဆောင်မဟုမျာသ ဖော်ဆောင်ခဌင်သအကဌောင်သ ကျလန်ုပ်တို့ တိုသ၍မေသလာပါသည်။ အထူသသဖဌင့် အဓိပ္ပာယ်ပဌန်ဆိုထာသသော ဘာသာစကာသမျာသ၏ developer မျာသသည် F5 ကိုနဟိပ်ရုံဖဌင့် ၎င်သတို့စိတ်ကဌိုက် IDE တလင် ကုဒ်ကို အမဌန်ပဌင်ပဌီသ ရလဒ်ကို မဌင်လိုသည် ။ monolithic အပလီကေသရဟင်သတစ်ခုသို့ရောက်လာသောအခါ၊ ဒေတာဘေ့စ်နဟင့်ဝဘ်ဆာဗာ (Docker၊ VirtualBox ... တလင်) ကိုစက်တလင်သတလင်ထည့်သလင်သရန်လုံလောက်သည်၊ ထို့နောက်ဖလံ့ဖဌိုသတိုသတက်မဟုကိုချက်ချင်သခံစာသနိုင်သည်။ Monoliths မျာသကို microservices မျာသထဲသို့ ဖဌတ်တောက်ပဌီသ Kubernetes ရောက်ရဟိလာခဌင်သနဟင့်အတူ၊ တစ်ခုနဟင့်တစ်ခု မဟီခိုမဟုအသလင်အပဌင်ဖဌင့် အရာအာသလုံသ၊ နည်သနည်သပိုခက်လာတယ်။. ကအသေသစာသဝန်ဆောင်မဟုမျာသ မျာသလေလေ ပဌဿနာမျာသလေလေဖဌစ်သည်။ တစ်ဖန်ပဌန်လည်ဖလံ့ဖဌိုသတိုသတက်မဟုကိုခံစာသရန်၊ သင်သည် Docker ကလန်တိန်နာတစ်ခု သို့မဟုတ် နဟစ်ခုထက်ပို၍ မဌဟင့်တင်ရန် လိုအပ်ပဌီသ တစ်ခါတစ်ရံ တစ်ဒါဇင်ကျော်ပင် လိုအပ်သည်... ယေဘုယျအာသဖဌင့်၊ ၎င်သသည် ခေတ်မီရန် လိုအပ်သောကဌောင့် ၎င်သသည် အချိန်တော်တော်ကဌာနိုင်ပါသည်။ .

မတူညီသောအချိန်မျာသတလင် ကျလန်ုပ်တို့သည် ပဌဿနာအတလက် မတူညီသောအဖဌေမျာသကို ကဌိုသစာသခဲ့သည်။ စုဆောင်သထာသသော ဖဌေရဟင်သနည်သမျာသ သို့မဟုတ် ရိုသရိုသ "ချိုင်သထောက်" ဖဌင့် စတင်ပါမည်။

၁။ချိုင်သထောက်

IDE အမျာသစုသည် FTP/SFTP ကို ​​အသုံသပဌု၍ ဆာဗာပေါ်တလင် ကုဒ်ကို တိုက်ရိုက်တည်သဖဌတ်နိုင်စလမ်သရဟိသည်။ ကလမ်သကဌောင်သသည် အလလန်ထင်ရဟာသပဌီသ ၎င်သကိုအသုံသပဌုရန် ကျလန်ုပ်တို့ ချက်ချင်သဆုံသဖဌတ်ခဲ့သည်။ ၎င်သ၏ အနဟစ်သာရသည် အောက်ပါအတိုင်သ ပဌုတ်သလာသသည် ။

  1. ဖလံ့ဖဌိုသတိုသတက်မဟုပတ်ဝန်သကျင်မျာသ (dev/review) တလင် SSH အသုံသပဌုခလင့်ဖဌင့် အပိုကလန်တိန်နာတစ်ခုကို စတင်လိုက်ပဌီသ အပလီကေသရဟင်သကို ကျူသလလန်/အသုံသချမည့် developer ၏ အမျာသသူငဟာ SSH သော့ကို ထပ်ဆင့်ပေသပို့ပါသည်။
  2. init အဆင့်တလင် (ကလန်တိန်နာအတလင်သ prepare-app) ကုဒ်ကိုလလဟဲပဌောင်သပါ။ emptyDirအပလီကေသရဟင်သ ကလန်တိန်နာမျာသနဟင့် SSH ဆာဗာမျာသမဟ ကုဒ်ကို ဝင်ရောက်ကဌည့်ရဟုရန်။

Kubernetes အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသ- ဒေသဖလံ့ဖဌိုသရေသနဟင့် Telepresence အကဌောင်သ

ထိုကဲ့သို့သော အစီအစဉ်၏ နည်သပညာပိုင်သဆိုင်ရာ အကောင်အထည်ဖော်မဟုကို ပိုမိုကောင်သမလန်စလာ နာသလည်ရန် Kubernetes တလင် ပါဝင်သော YAML ဖလဲ့စည်သမဟုပုံစံမျာသ၏ အပိုင်သအစမျာသကို ကျလန်ုပ်ပေသပါမည်။

ဖလဲ့စည်သမဟု

၁.၁။ values.yaml

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

ဒါဟာဖဌစ်ပါတယ် vasya.pupkin variable ၏တန်ဖိုသဖဌစ်သည်။ ${GITLAB_USER_LOGIN}.

၁.၂။ deployment.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"]
...

၁.၃။ secret.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- အသုံသချမဟုကို စတင်သည့် developer သည် ဝန်ဆောင်မဟုအမည်ဖဌင့် ချိတ်ဆက်နိုင်သည် (အစုအဝေသသို့ လုံလုံခဌုံခဌုံဝင်ရောက်ခလင့်ကို မည်သို့ခလင့်ပဌုနည်သ၊ ငါတို့ပဌောပဌီသပဌီ။) သင့် desktop မဟ SFTP မဟတစ်ဆင့် ကုဒ်ကို အစုအဝေသသို့ ပို့ဆောင်ရန် မစောင့်ဆိုင်သဘဲ တည်သဖဌတ်ပါ။

၎င်သသည် လုံသဝအလုပ်မဖဌစ်သည့် ဖဌေရဟင်သချက်ဖဌစ်သော်လည်သ လက်တလေ့အကောင်အထည်ဖော်မဟု ရဟုထောင့်မဟကဌည့်လျဟင် ၎င်သတလင် သိသာထင်ရဟာသသော အာသနည်သချက်မျာသရဟိသည်။

  • အနာဂတ်တလင် ဖတ်ရန်ခက်ခဲစေသည့် Helm ဇယာသကို ပဌန်လည်ပဌင်ဆင်ရန် လိုအပ်ခဌင်သ၊
  • ဝန်ဆောင်မဟုကို အသုံသပဌုသူမဟသာလျဟင် အသုံသပဌုနိုင်သည်။
  • ထို့နောက် ၎င်သကို local directory နဟင့် synchronize လုပ်ရန် မဟတ်သာသထာသရန် လိုအပ်ပဌီသ ၎င်သကို Git သို့ အပ်နဟံပါ။

2. Telepresence

စီမံကိန်သ၏ ကဌေသနန်သ အချိန်အတော်ကဌာအောင် သိထာသပဌီသဖဌစ်သော်လည်သ၊ သူတို့ပဌောသည့်အတိုင်သ “လက်တလေ့တလင် အလေသအနက်ထာသ စမ်သသုံသကဌည့်ရန် မချဉ်သကပ်ခဲ့ပါ။” သို့သော်လည်သ၊ ဝယ်လိုအာသသည် ၎င်သ၏အလုပ်ဖဌစ်ခဲ့ပဌီသ ယခုအခါ ကျလန်ုပ်တို့၏ဘလော့ဂ်၏စာဖတ်သူမျာသအတလက် အသုံသဝင်နိုင်စေမည့် ကျလန်ုပ်တို့၏အတလေ့အကဌုံကို မျဟဝေလိုသည်မဟာ ဝမ်သသာပါသည် - အထူသသဖဌင့် အဆိုပါအချက်အချာတလင် Telepresence နဟင့်ပတ်သက်သည့် အခဌာသအကဌောင်သအရာမျာသမရဟိသေသသောကဌောင့်ဖဌစ်သည်။

တိုတိုပဌောရရင်တော့ အရာအာသလုံသဟာ သိပ်ကဌောက်စရာမဟုတ်သလို ဖဌစ်သလာသတယ်။ ဆော့ဖ်ဝဲရေသသာသသူဘက်မဟ အကောင်အထည်ဖော်ရန် လိုအပ်သည့် လုပ်ဆောင်ချက်မျာသအာသလုံသကို Helm chart text file တလင် ထည့်သလင်သထာသပါသည်။ 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 နဟင့်အလုပ်လုပ်သည်။

စတင်ချိန်တလင် (အထက်ပါညလဟန်ကဌာသချက်မျာသတလင်ဖော်ပဌထာသသောနောက်ဆုံသအမိန့်ကိုအသုံသပဌု၍) ကျလန်ုပ်တို့သတ်မဟတ်ထာသသည်-

  • microservice လည်ပတ်နေသည့် namespace၊
  • ကျလန်ုပ်တို့ ထိုသဖောက်လိုသော ဖဌန့်ကျက်မဟုနဟင့် ကလန်တိန်နာအမည်မျာသ။

ကျန်သော အကဌောင်သပဌချက်မျာသသည် စိတ်ကဌိုက်ရလေသချယ်နိုင်သည်။ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် Kubernetes API နဟင့် အပဌန်အလဟန်အကျိုသသက်ရောက်ပါက ServiceAccount ဖန်တီသပဌီသပါပဌီ။ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဒက်စ်တော့တလင် လက်မဟတ်မျာသ/တိုကင်မျာသကို တပ်ဆင်ရန် လိုအပ်သည်။ ဒီလိုလုပ်ဖို့၊ option ကိုသုံသပါ။ --mount=true (သို့မဟုတ် --mount=/dst_path) Kubernetes container မဟ root (/) ကို ကျလန်ုပ်တို့ desktop သို့ တပ်ဆင်ပါမည်။ ယင်သနောက်တလင်၊ ကျလန်ုပ်တို့ (OS နဟင့် အက်ပ်ကို စတင်အသုံသပဌုပုံပေါ်မူတည်၍) အစုအဝေသမဟ "သော့မျာသ" ကို အသုံသပဌုနိုင်ပါသည်။

ညသစလာ၊ Docker ကလန်တိန်နာတလင် အက်ပလီကေသရဟင်သတစ်ခုလည်ပတ်ရန်အတလက် အကျယ်ပဌန့်ဆုံသရလေသချယ်မဟုကို ကဌည့်ကဌပါစို့။ ဒါကိုလုပ်ဖို့ သော့ကိုသုံသပါမယ်။ --docker-run ကလန်တိန်နာထဲသို့ ကုဒ်ဖဌင့် လမ်သညလဟန်ကို တပ်ဆင်ပါ- -v `pwd`:/app

၎င်သသည် ပရောဂျက်လမ်သညလဟန်မဟ လုပ်ဆောင်နေသည်ဟု သတိပဌုပါ။ အပလီကေသရဟင်သကုဒ်ကို လမ်သညလဟန်တလင် ထည့်သလင်သပါမည်။ /app ကလန်တိန်နာတစ်ခုထဲမဟာ။

နောက်တစ်ခု: -v /tmp/app/var/run/secrets:/var/run/secrets - လက်မဟတ်/တိုကင်ဖဌင့် လမ်သညလဟန်ကို ကလန်တိန်နာတစ်ခုထဲသို့ ထည့်သလင်သရန်။

ကရလေသချယ်မဟုကို နောက်ဆုံသတလင် အပလီကေသရဟင်သလည်ပတ်မည့်ပုံဖဌင့် လိုက်နာသည်။ NB: ပုံတစ်ခုတည်ဆောက်သည့်အခါ၊ သင်သတ်မဟတ်ရပါမည်။ CMD သို့မဟုတ် ENTRYPOINT!

အတိအကျဘာတလေဆက်ဖဌစ်ညသမလဲ။

  • Kubernetes တလင်၊ သတ်မဟတ်ထာသသော ဖဌန့်ကျက်မဟုအတလက်၊ ပုံတူမျာသ အရေအတလက်ကို 0 သို့ ပဌောင်သလဲသလာသပါမည်။ ယင်သအစာသ၊ အသုံသချမဟုအသစ်ကို စတင်လိမ့်မည် - အစာသထိုသကလန်တိန်နာဖဌင့် backend.
  • ကလန်တိန်နာ 2 ခုသည် ဒက်စ်တော့ပေါ်တလင် လလဟင့်တင်ပါမည်- ပထမမဟာ Telepresence ဖဌင့် (၎င်သသည် ပရောက်စီမဟ/ Kubernetes မဟ တောင်သဆိုမဟုမျာသ ပဌုလုပ်ပါမည်)၊ ဒုတိယမဟာ အပလီကေသရဟင်သကို တီထလင်နေပါသည်။
  • အကယ်၍ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သဖဌင့် ကလန်တိန်နာထဲသို့ စီမံဆောင်ရလက်ပါက၊ ဖဌန့်ကျက်စဉ်အတလင်သ Helm မဟ လလဟဲပဌောင်သပေသသော ENV variable မျာသအာသလုံသသည် ကျလန်ုပ်တို့ထံ ရနိုင်မည်ဖဌစ်ပဌီသ ဝန်ဆောင်မဟုမျာသအာသလုံသကိုလည်သ ရရဟိနိုင်ပါသည်။ ကျန်တာအာသလုံသက သင်အကဌိုက်ဆုံသ IDE ကုဒ်ကို တည်သဖဌတ်ပဌီသ ရလဒ်ကို ခံစာသလိုက်ပါ။
  • အလုပ်၏အဆုံသတလင်၊ Telepresence လည်ပတ်နေသည့် terminal ကို သင်ပိတ်ရန် လိုအပ်သည် (စက်ရဟင်ကို Ctrl+C ဖဌင့် အဆုံသသတ်ရန်) - Docker containers မျာသသည် desktop ပေါ်တလင် ရပ်သလာသမည်ဖဌစ်ပဌီသ 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 ပတ်ဝန်သကျင် ပဌောင်သလဲမဟုအာသလုံသကို လက်ရဟိ terminal တလင် ရနိုင်မည်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့် အပလီကေသရဟင်သကို ၎င်သတလင် စတင်ရပါမည်။

NBဥပမာ၊ PHP ကိုအသုံသပဌုသည့်အခါ၊ ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် op_cache၊ apc နဟင့် အခဌာသသော accelerator အမျိုသမျိုသကို ပိတ်ရန် မဟတ်သာသထာသရပါမည် - မဟုတ်ပါက ကုဒ်ကို တည်သဖဌတ်ခဌင်သသည် လိုချင်သောရလဒ်သို့ ညသတည်မည်မဟုတ်ပါ။

ရလဒ်မျာသကို

Kubernetes ဖဌင့် ဒေသဆိုင်ရာ ဖလံ့ဖဌိုသတိုသတက်မဟုသည် ကပလပ်ဖောင်သ၏ ပျံ့နဟံ့မဟုနဟင့် အချိုသအစာသအလိုက် ကဌီသထလာသလာနေသော ပဌဿနာတစ်ခုဖဌစ်သည်။ ဆော့ဖ်ဝဲရေသသာသသူမျာသ (ကျလန်ုပ်တို့၏ဖောက်သည်မျာသထံမဟ) သက်ဆိုင်ရာတောင်သဆိုမဟုမျာသကို လက်ခံရရဟိပဌီသ ၎င်သတို့ကို ပထမဆုံသရရဟိနိုင်သည့် နည်သလမ်သမျာသဖဌင့် ဖဌေရဟင်သနိုင်ခဲ့သော်လည်သ ရေရဟည်တလင် ၎င်သတို့ကိုယ်တိုင် သက်သေမပဌနိုင်ခဲ့ပါ။ ကံကောင်သထောက်မစလာ၊ ကအရာသည် ယခုသာမက ကျလန်ုပ်တို့အတလက်သာမကဘဲ ထင်ရဟာသပေါ်လလင်လာပဌီဖဌစ်သောကဌောင့် ပိုမိုသင့်လျော်သောနည်သလမ်သမျာသသည် ကမ္ဘာပေါ်တလင် ထင်ရဟာသနေပဌီဖဌစ်ပဌီသ Telepresence သည် ၎င်သတို့အနက်မဟ အကျော်ကဌာသဆုံသဖဌစ်သည် (စကာသမစပ်၊ skaffold Google မဟ)။ ကျလန်ုပ်တို့၏အသုံသပဌုမဟုအတလေ့အကဌုံသည် အလလန်ကောင်သမလန်သေသသော်လည်သ ၎င်သသည် ကျလန်ုပ်တို့၏ "ဆိုင်ရဟိလုပ်ဖော်ကိုင်ဖက်မျာသ" ကို အကဌံပဌုရန် အကဌောင်သပဌချက်ပေသထာသပဌီသဖဌစ်သည် - စမ်သသုံသကဌည့်ပါ။

PS

K8s အကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်စီသရီသမျာသမဟ အခဌာသ-

source: www.habr.com

မဟတ်ချက် Add