ProHoster > Blog > Pulega > Ave'esea se lala fa'apitoa ua tuai i totonu o se fa'aputuga Kubernetes
Ave'esea se lala fa'apitoa ua tuai i totonu o se fa'aputuga Kubernetes
Привет! Fa'aaliga lala (aka deploy preview, toe iloilo app) - o le taimi lea e le gata o le paranesi matai o loʻo faʻapipiʻiina, ae faʻapea foʻi taʻitasi toso talosaga i se URL tulaga ese. E mafai ona e siaki pe galue le code i se siosiomaga gaosiga; o le ata e mafai ona faʻaalia i isi polokalame poʻo tagata tomai faapitoa oloa. A'o e galue i se talosaga toso, o lo'o fa'apipi'iina fou ta'itasi o lo'o iai nei mo le code tuai e tapeina, ma o lo'o fa'asolo atu i fafo le fa'aoga fou mo le code fou. E ono tula'i mai ni fesili pe a e tu'ufa'atasia se talosaga toso i totonu o le lala matua. E te le toe manaʻomia le lala faʻapitoa, ae o loʻo i ai pea punaoa Kubernetes i le fuifui.
Fa'amatalaga atili e uiga i lala fa'apitoa
O le tasi auala e fai ai lala fa'apitoa i Kubernetes o le fa'aogaina lea o igoa avanoa. I se faapuupuuga, o le faatulagaga o le gaosiga e pei o lenei:
Mo se lala faʻapitoa, e faia se igoa avanoa ma lona faʻamatalaga (mo se faʻataʻitaʻiga, numera talosaga toso) ma nisi ituaiga prefix/postfix (mo se faʻataʻitaʻiga, -pr-):
I se tulaga lautele, sa ou tusia Kubernetes Operator (se talosaga e mafai ona maua ai punaoa faʻapipiʻi), feso'ota'iga ile poloketi ile Github. Na te aveesea igoa avanoa e patino i lala vaega tuai. I totonu o Kubernetes, afai e te tapeina se igoa, o isi punaoa i lena igoa avanoa e tapeina foi.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
E mafai ona e faitau e uiga i le faʻaogaina o lala faʻapitoa i totonu o se fuifui iinei и iinei.
Motugaafa
Se'i o tatou va'ava'ai i se fa'ata'ita'iga fa'atoso fa'asologa o le olaga fa'atasi ma fa'aauau fa'atasi (continuous integration):
Matou te tuleia se tautinoga fou i le paranesi.
I luga o le fausiaina, o loʻo faʻataʻitaʻiina liters ma/poʻo suʻega.
Kubernetes toso fa'atonuga talosaga e fa'atupu i luga o le lele (mo se fa'ata'ita'iga, o lona numera o lo'o fa'aofi i totonu o le mamanu mae'a).
I le faʻaaogaina o le kubectl faʻaoga, faʻapipiʻi faʻaopoopo i le fuifui (faʻapipiʻi).
Toso talosaga o lo'o tu'ufa'atasia i totonu o le lala matua.
A'o e galue i se talosaga toso, o lo'o fa'apipi'iina nei ta'itasi fou mo le code tuai e tape, ma o lo'o fa'asolo i fafo le fa'aoga fou mo le code fou. Ae a tu'ufa'atasia se talosaga toso i totonu o le paranesi matai, e na'o le paranesi matai o le a fausia. O se taunuuga, e foliga mai ua galo ia i matou le talosaga toso, ma o loʻo i ai pea ana punaoa Kubernetes i totonu o le fuifui.
Auala e faʻaoga ai
Faʻapipiʻi le poloketi ma le faʻatonuga o loʻo i lalo:
Parakalafa igoaspaceSubstring mana'omia e fa'amama igoa avanoa mo talosaga toso mai isi igoa avanoa. Mo se faʻataʻitaʻiga, afai o le fuifui o loʻo i ai igoa nei: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, o sui tauva mo le tapeina o le a habr-back-end-pr-17, habr-back-end-pr-33.
Parakalafa afterDaysWithoutDeploy mana'omia e tape ai igoa tuai. Mo se faʻataʻitaʻiga, pe a fai igoa avanoa 3 дня 1 час tua, ma o le parakalafa e faailoa mai 3 дня, o le a tape le igoa lea. E galue foi i le itu faafeagai pe a fai le igoa avanoa 2 дня 23 часа tua, ma o le parakalafa e faailoa mai 3 дня, o le a le tapeina lenei igoa avanoa.
E tasi le isi fa'amaufa'ailoga, e nafa ma le fa'afia ona va'ai va'aiga igoa uma ma siaki mo aso e aunoa ma le fa'atinoina - siakiEveryMinutes. I le faaletonu e tutusa 30 минутам.
Minikube o le a fa'atupuina se fuifui Kubernetes i le lotoifale.
kubectl - fa'atonuga laina fa'aoga mo le fa'atonutonuina o fuifui.
Matou te fa'atupuina se vaega Kubernetes i le lotoifale:
$ minikube start --vm-driver=docker
minikube v1.11.0 on Darwin 10.15.5
Using the docker driver based on existing profile.
Starting control plane node minikube in cluster minikube.
Fa'ailoa mai kubectl fa'aoga le fuifui fa'apitonu'u e ala i le fa'aletonu:
$ kubectl config use-context minikube
Switched to context "minikube".
Talu ai ona o faʻatulagaga o gaosiga e faʻapipiʻiina e siaki ai igoa tuai, ma e le o iai i la matou fuifui fou, matou te suia le fesuiaiga o le siosiomaga. IS_DEBUG i true. Faatasi ai ma lenei tau o le parakalafa afterDaysWithoutDeploy e le o amanaia ma e le siakiina igoa avanoa mo aso e aunoa ma le faʻaogaina, naʻo le tupu mai o le substring (-pr-).
Afai o e i luga Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Afai o e i luga macOS:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
Matou te siaki ua aliali mai se tagata fa'afoe i le fuifui:
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
Afai e te vaʻai i ana ogalaau, ua sauni e faʻatautaia punaoa StaleFeatureBranch:
Ua tali mai le fa'afoe ma ua sauni e siaki igoa avanoa:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Stale feature branch is being processing.","namespaceSubstring":"-pr-","afterDaysWithoutDeploy":1,"checkEveryMinutes":1,"isDebug":"true"}
Faʻapipiʻi fixtures, e iai igoa avanoa e lua (project-pr-1, project-pr-2) ma i latou deployments, services, ingress, ma faapena atu ai lava:
$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/first-feature-branch.yml -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/second-feature-branch.yml
...
namespace/project-pr-1 created
deployment.apps/project-pr-1 created
service/project-pr-1 created
horizontalpodautoscaler.autoscaling/project-pr-1 created
secret/project-pr-1 created
configmap/project-pr-1 created
ingress.extensions/project-pr-1 created
namespace/project-pr-2 created
deployment.apps/project-pr-2 created
service/project-pr-2 created
horizontalpodautoscaler.autoscaling/project-pr-2 created
secret/project-pr-2 created
configmap/project-pr-2 created
ingress.extensions/project-pr-2 created
Matou te siakiina o punaoa uma o loʻo i luga ua maeʻa ona fatuina:
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
NAME ... READY ... STATUS ... AGE
pod/project-pr-1-848d5fdff6-rpmzw ... 1/1 ... Running ... 67s
NAME ... READY ... AVAILABLE ... AGE
deployment.apps/project-pr-1 ... 1/1 ... 1 ... 67s
...
Talu ai na matou aofia ai debug, igoa avanoa project-pr-1 и project-pr-2, o le mea lea o isi punaoa uma e tatau ona tape vave e aunoa ma le amanaia o le parakalafa afterDaysWithoutDeploy. E mafai ona vaʻaia lenei mea i faʻamaumauga a le operator:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-1"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-1","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-1"}
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-2"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-2","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-2"}
Afai e te siakiina le maua o punaoa, o le a latou i le tulaga Terminating (fa'asologa o le tapeina) po'o ua uma ona tape (o le fa'atonuga o galuega e gaogao).
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
E mafai ona e toe faia le faagasologa o le fausiaina fixtures ni nai taimi ma ia mautinoa e aveese i totonu o le minute.
Suiga
O le a se mea e mafai ona fai nai lo se fa'alapotopotoga e galue i se fuifui? E tele auala, oi latou uma e le atoatoa (ma o latou vaivaiga e faʻatatau), ma e filifili tagata uma mo ia lava le mea e sili ona lelei mo se galuega faʻapitoa:
Ave'ese le lala fa'apitoa i le fa'aauauina o le fa'apipi'iina o le lala matua.
Ina ia faia lenei mea, e tatau ona e iloa po'o fea talosaga toso e fa'atatau i le ta'utinoga o lo'o fausia. Talu ai ona o le vaega o igoa ole lala o lo'o i ai le fa'ailoaina o talosaga - lona numera, po'o le igoa o le lala, e tatau lava ona fa'ailoa mai le fa'ailoga i le commit.
O faufale matai o lala ua faaletonu. Mo se faʻataʻitaʻiga, o loʻo ia te oe laʻasaga nei: download le poloketi, faʻataʻitaʻiga suʻega, fausia le poloketi, faia se faʻamalolo, auina atu faʻamatalaga, faʻamama le lala vaega o le talosaga toso mulimuli. Afai e le manuia le fausiaina pe a tuʻuina atu se faʻamatalaga, e tatau ona e tape uma punaoa i totonu o le fuifui ma le lima.
A aunoa ma se fa'amatalaga talafeagai, o le tapeina o vaega fa'apitoa i le master build e le manino.
Atonu e le o lau auala lea. Mo se faataitaiga, i Jenkins, na'o le tasi le ituaiga o paipa e lagolagoina le mafai ona fa'asaoina ona fa'atonuga i le fa'ailoga puna. A fa'aoga webhooks, e tatau ona e tusia lau lava tusitusiga e fa'agasolo ai. O lenei tusitusiga e tatau ona tuʻuina i le Jenkins interface, lea e faigata ona tausia.
Ia tusia Cronjob ma fa'aopoopo se fuifui Kubernetes.
Faʻaalu taimi i le tusitusi ma le lagolago.
Ua uma ona galue le tagata fa'afoe i se faiga fa'apena, ua fa'amaumauina ma lagolagoina.