Hi! Funkciju filiÄle (pazÄ«stams arÄ« kÄ izvietoÅ”anas priekÅ”skatÄ«jums, pÄrskatÄ«Å”anas lietotne) ā tas ir tad, kad tiek izvietots ne tikai galvenais zars, bet arÄ« katrs izvilkÅ”anas pieprasÄ«jums uz unikÄlu URL. JÅ«s varat pÄrbaudÄ«t, vai kods darbojas ražoÅ”anas vidÄ, funkciju var parÄdÄ«t citiem programmÄtÄjiem vai produktu speciÄlistiem. KamÄr strÄdÄjat ar izvilkÅ”anas pieprasÄ«jumu, tiek dzÄsts katrs jaunais vecÄ koda izpildes paÅ”reizÄjais izvietojums un tiek izlaista jaunÄ koda jaunÄ izvietoÅ”ana. JautÄjumi var rasties, apvienojot izvilkÅ”anas pieprasÄ«jumu galvenajÄ zarÄ. Jums vairs nav nepiecieÅ”ama lÄ«dzekļu filiÄle, taÄu Kubernetes resursi joprojÄm atrodas klasterÄ«.
VairÄk par funkciju filiÄlÄm
Viena no iespÄjÄm, kÄ izveidot funkciju zarus programmÄ Kubernetes, ir izmantot nosaukumvietas. ÄŖsÄk sakot, ražoÅ”anas konfigurÄcija izskatÄs Å”Ädi:
Objekta atzaram tiek izveidota nosaukumvieta ar tÄs identifikatoru (piemÄram, izvilkÅ”anas pieprasÄ«juma numuru) un sava veida prefiksu/postfiksu (piemÄram, -pr-):
VispÄr es rakstÄ«ju Kubernetes operators (lietojumprogramma, kurai ir piekļuve klastera resursiem), saite uz projektu vietnÄ Github. Tas noÅem nosaukumvietas, kas pieder vecajÄm funkciju zarÄm. ProgrammÄ Kubernetes, ja izdzÄÅ”at nosaukumvietu, automÄtiski tiek izdzÄsti arÄ« citi resursi Å”ajÄ nosaukumvietÄ.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
Varat lasÄ«t par to, kÄ iekļaut lÄ«dzekļu atzarus klasterÄ« Å”eit Šø Å”eit.
Kubernetes pull pieprasÄ«juma konfigurÄcijas tiek Ä£enerÄtas lidojumÄ (piemÄram, tÄs numurs tiek ievietots gatavajÄ veidnÄ).
Izmantojot kubectl apply, konfigurÄcijas tiek pievienotas klasterim (izvietoÅ”anai).
IzvilkÅ”anas pieprasÄ«jums tiek apvienots galvenajÄ filiÄlÄ.
KamÄr strÄdÄjat ar izvilkÅ”anas pieprasÄ«jumu, tiek dzÄsts katrs jaunais vecÄ koda izpildes paÅ”reizÄjais izvietojums un tiek izlaista jaunÄ koda jaunÄ izvietoÅ”ana. Bet, kad izvilkÅ”anas pieprasÄ«jums tiek apvienots galvenajÄ filiÄlÄ, tiks izveidota tikai galvenÄ filiÄle. RezultÄtÄ izrÄdÄs, ka esam jau aizmirsuÅ”i par vilkÅ”anas pieprasÄ«jumu, un tÄ Kubernetes resursi joprojÄm atrodas klasterÄ«.
KÄ lietot
InstalÄjiet projektu ar tÄlÄk norÄdÄ«to komandu:
Parametrs namespaceApakÅ”virkne nepiecieÅ”ams, lai filtrÄtu nosaukumvietas izvilkÅ”anas pieprasÄ«jumiem no citÄm nosaukumvietÄm. PiemÄram, ja klasterim ir Å”Ädas nosaukumvietas: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, tad kandidÄti dzÄÅ”anai bÅ«s habr-back-end-pr-17, habr-back-end-pr-33.
Parametrs afterDaysWithoutDeploy nepiecieÅ”ams, lai izdzÄstu vecÄs nosaukumvietas. PiemÄram, ja ir izveidota nosaukumvieta 3 Š“Š½Ń 1 ŃŠ°Ń atpakaļ, un parametrs norÄda 3 Š“Š½Ń, Ŕī nosaukumvieta tiks dzÄsta. Tas darbojas arÄ« pretÄjÄ virzienÄ, ja ir izveidota nosaukumvieta 2 Š“Š½Ń 23 ŃŠ°ŃŠ° atpakaļ, un parametrs norÄda 3 Š“Š½Ń, Ŕī nosaukumvieta netiks dzÄsta.
Ir vÄl viens parametrs, tas ir atbildÄ«gs par to, cik bieži skenÄt visas nosaukumvietas un pÄrbaudÄ«t dienas bez izvietoÅ”anas - pÄrbaudiet EveryMinutes. PÄc noklusÄjuma tas ir vienÄds 30 Š¼ŠøŠ½ŃŃŠ°Š¼.
$ 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.
NorÄdiet kubectl pÄc noklusÄjuma izmantot vietÄjo kopu:
$ kubectl config use-context minikube
Switched to context "minikube".
TÄ kÄ ražoÅ”anas konfigurÄcijas ir konfigurÄtas, lai pÄrbaudÄ«tu vecÄs nosaukumvietas, un mÅ«su jaunizveidotajÄ klasterÄ« to nav, mÄs aizstÄsim vides mainÄ«go. IS_DEBUG par true. Ar Å”o vÄrtÄ«bu parametrs afterDaysWithoutDeploy netiek Åemts vÄrÄ, un nosaukumvietas netiek pÄrbaudÄ«tas dienÄs bez izvietoÅ”anas, tikai par apakÅ”virknes (-pr-).
Ja esat ieslÄgts Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Ja esat ieslÄgts macOS:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
MÄs pÄrbaudÄm, vai klasterÄ« ir parÄdÄ«jies operators:
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
Ja paskatÄs uz tÄ Å¾urnÄliem, tas ir gatavs resursu apstrÄdei StaleFeatureBranch:
Operators ir atbildÄjis un ir gatavs pÄrbaudÄ«t nosaukumvietas:
$ 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"}
Komplekts fixtures, kas satur divas nosaukumvietas (project-pr-1, project-pr-2) un viÅiem deployments, services, ingress, un tÄ tÄlÄk:
$ 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
MÄs pÄrbaudÄm, vai visi iepriekÅ” minÄtie resursi ir veiksmÄ«gi izveidoti:
$ 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
...
TÄ kÄ mÄs iekļÄvÄm debug, nosaukumvietas project-pr-1 Šø project-pr-2, tÄpÄc visi pÄrÄjie resursi bÅ«s nekavÄjoties jÄdzÄÅ”, neÅemot vÄrÄ parametru afterDaysWithoutDeploy. To var redzÄt operatoru žurnÄlos:
$ 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"}
Ja pÄrbaudÄ«sit resursu pieejamÄ«bu, tie bÅ«s statusÄ Terminating (dzÄÅ”anas process) vai jau izdzÄsts (komandas izvade ir tukÅ”a).
$ 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
...
JÅ«s varat atkÄrtot izveides procesu fixtures vairÄkas reizes un pÄrliecinieties, ka tÄs tiek noÅemtas minÅ«tes laikÄ.
Alternatīvas
Ko var darÄ«t operatora vietÄ, kurÅ” strÄdÄ klasterÄ«? Ir vairÄkas pieejas, un tÄs visas ir nepilnÄ«gas (un to trÅ«kumi ir subjektÄ«vi), un katrs pats izlemj, kas ir vislabÄkais konkrÄtajam projektam:
Lai to izdarÄ«tu, jums jÄzina, kurÅ” izvilkÅ”anas pieprasÄ«jums attiecas uz apÅemÅ”anos, kas tiek veidota. TÄ kÄ lÄ«dzekļa filiÄles nosaukumvieta satur izvilkÅ”anas pieprasÄ«juma identifikatoru - tÄ numuru vai filiÄles nosaukumu, identifikators vienmÄr bÅ«s jÄnorÄda commit.
GalvenÄs filiÄles versijas neizdodas. PiemÄram, jums ir Å”Ädi posmi: lejupielÄdÄjiet projektu, izpildiet testus, izveidojiet projektu, izveidojiet laidienu, nosÅ«tiet paziÅojumus, notÄ«riet lÄ«dzekļa atzaru no pÄdÄjÄ vilkÅ”anas pieprasÄ«juma. Ja izveide neizdodas, nosÅ«tot paziÅojumu, jums bÅ«s manuÄli jÄizdzÄÅ” visi klastera resursi.
Bez atbilstoÅ”a konteksta lÄ«dzekļu atzaru dzÄÅ”ana galvenajÄ bÅ«vniecÄ«bÄ nav acÄ«mredzama.
TÄ var nebÅ«t jÅ«su pieeja. PiemÄram, iekÅ”Ä Jenkins, tikai viena veida cauruļvads atbalsta iespÄju saglabÄt tÄ konfigurÄcijas avota kodÄ. Izmantojot tÄ«mekļa aizÄ·eres, jums ir jÄraksta savs skripts, lai tos apstrÄdÄtu. Å is skripts bÅ«s jÄievieto Jenkins saskarnÄ, kuru ir grÅ«ti uzturÄt.
Rakstīt cron darbs un pievienojiet Kubernetes kopu.
TÄrÄ laiku rakstÄ«Å”anai un atbalstam.
Operators jau strÄdÄ lÄ«dzÄ«gÄ stilÄ, ir dokumentÄts un atbalstÄ«ts.