Ka saarida laanta sifada ee ku jirta kooxda Kubernetes
Hello! Laan muuqaal ah (oo loo yaqaan preview, app-ka dib u eegis) - tani waa marka laanta sayidka aan la geynin oo keliya, laakiin sidoo kale mid kastaa wuxuu u jiidayaa codsi URL gaar ah. Waxaad hubin kartaa in koodka uu ka shaqeeyo jawi wax soo saar; sifada waxaa la tusi karaa barnaamijyada kale ama khabiirada alaabta. Inta aad ka shaqaynayso codsi jiidis, mid kasta oo cusub oo la hawlgeliyay koodkii hore waa la tirtirayaa, iyo hawlgelinta cusub ee koodka cusub waa la soo saaray. Su'aalo ayaa soo bixi kara marka aad ku biirto codsiga jiidista laanta sare. Uma baahnid laanta sifada, laakiin ilaha Kubernetes ayaa wali ku jira kooxda.
Wax badan oo ku saabsan laamaha muuqaalka
Mid ka mid ah habka loo sameeyo laamo muuqaal ah ee Kubernetes waa in la isticmaalo meelo magacyo ah. Marka la soo koobo, qaabeynta wax soo saarku waxay u egtahay sidan:
Guud ahaan, waan qoray Kubernetes Operator (codsi marin u leh ilaha kooxda), isku xirka mashruuca Github. Waxay meesha ka saartaa meelaha magac ee ka tirsan laamaha sifada hore. Kubernetes, haddii aad tirtirto meel magaceed, agabyada kale ee ku jira booska magacaas ayaa si toos ah loo tirtiraa.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
Waxaad ka akhrisan kartaa sida loo hirgeliyo laamo muuqaal ah koox ahaan halkan ΠΈ halkan.
Motivation
Aynu eegno codsiga jiidashada caadiga ah ee nolosha oo leh is dhexgalka joogtada ah (continuous integration):
Waxaan ku riixaynaa ballan cusub laanta.
Dhismaha, linters iyo/ama imtixaanno ayaa lagu wadaa.
Kubernetes codsiga jiidida qaabaynta ayaa la soo saaray duullimaad (tusaale ahaan, nambarkeeda waxa la geliyey template dhammaatay).
Isticmaalka kubectl codsan, habayn ayaa lagu daraa kutlada (la dirayo).
Codsiga jiiditaanku wuxuu ku milmay laanta sare.
Inta aad ka shaqaynayso codsi jiidis, mid kasta oo cusub oo la hawlgeliyay koodkii hore waa la tirtirayaa, iyo hawlgelinta cusub ee koodka cusub waa la soo saaray. Laakiin marka codsi jiid lagu daro laanta sayid, kaliya laanta sayid ayaa la dhisi doonaa. Natiijo ahaan, waxay soo baxday in aan horeyba u illownay codsiga jiidista, iyo agabkeeda Kubernetes ayaa weli ku jira kooxda.
Xildhibaan magaca meel-hoosaadka loo baahan yahay si loo shaandheeyo meelaha magacyada ee codsiyada laga soo jiidayo meelo magacyo kale ah. Tusaale ahaan, haddii kooxdu leedahay meelaha magacyada soo socda: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, ka dibna musharixiinta la tirtiri doono habr-back-end-pr-17, habr-back-end-pr-33.
Xildhibaan Maalmo ka dib oo aan la dhigin loo baahan yahay in la tirtiro meelaha magacyadii hore Tusaale ahaan, haddii meel magac la sameeyay 3 Π΄Π½Ρ 1 ΡΠ°Ρ dib, iyo halbeeggu tilmaamayaa 3 Π΄Π½Ρ, meeshan magaca waa la tirtiri doonaa. Waxa kale oo ay ka shaqeysaa jihada ka soo horjeeda haddii meesha magaca la abuuray 2 Π΄Π½Ρ 23 ΡΠ°ΡΠ° dib, iyo halbeeggu tilmaamayaa 3 Π΄Π½Ρ, meel magacan lama tirtiri doono.
Waxaa jira halbeeg dheeri ah, iyada ayaa mas'uul ka ah inta jeer ee lagu baaro dhammaan meelaha magacyada oo la hubiyo maalmo iyada oo aan la dirin - hubi daqiiqad kasta. Sida caadiga ah waa loo siman yahay 30 ΠΌΠΈΠ½ΡΡΠ°ΠΌ.
Minikube waxay kor u qaadi doontaa kutlada Kubernetes gudaha.
kubectl - interface line amarka ee maamulka kooxda.
Waxaan kor u qaadnaa kutlada Kubernetes gudaha:
$ 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.
Waxaan tilmaamaynaa kubectl Isticmaal kooxda deegaanka si caadi ah:
$ kubectl config use-context minikube
Switched to context "minikube".
Mar haddii qaabaynta wax-soo-saarka loo habeeyey si loo hubiyo meelo magacyo hore ah, oo kooxdeenna dhawaan la soo kiciyey aanay haysan iyaga, waxaanu beddeli doonaa doorsoomiyaha deegaanka IS_DEBUG on true. Iyada oo qiimahan lagu qiyaaso afterDaysWithoutDeploy xisaabta laguma darin oo meelaha magacyadooda lama hubiyo maalmo iyada oo aan la dirin, kaliya dhacdada xadhig hoosaadka (-pr-).
Haddii aad ku jirto Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Haddii aad ku jirto macOS:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
Waxaan hubinaa in hawlwadeen ka soo muuqday kooxda:
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
Haddii aad eegto diiwaankeeda, waxay diyaar u tahay inay ka shaqeyso agabka StaleFeatureBranch:
Hawlwadeenku waa ka jawaabay oo wuxuu diyaar u yahay inuu hubiyo meelaha magacyada:
$ 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"}
Ku rakib fixtures, oo ka kooban laba magac oo bannaan (project-pr-1, project-pr-2) iyo iyaga deployments, services, ingress, iyo wixi la mida:
$ 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
Waxaan hubineynaa in dhammaan agabyada kore si guul leh loo abuuray:
$ 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
...
Maadaama aan ku darnay debug, Magacyada project-pr-1 ΠΈ project-pr-2, sidaas darteed dhammaan agabyada kale waa in isla markaaba la tirtiraa iyada oo aan la tixgelinin cabbirka afterDaysWithoutDeploy. Tan waxaa lagu arki karaa diiwaanka hawlwadeenka:
$ 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"}
Haddii aad hubiso helitaanka kheyraadka, waxay ku jiri doonaan heerka Terminating (habraaca tirtirka) ama mar hore la tirtiray (wax soo saarka amarku waa madhan yahay).
$ 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
...
Waxaad ku celin kartaa habka abuurista fixtures dhowr jeer oo hubi in laga saaray hal daqiiqo gudaheed.
Tirtir laanta sifada inta lagu jiro is dhexgalka joogtada ah ee laanta sare.
Si tan loo sameeyo, waxaad u baahan tahay inaad ogaato codsiga jiidista ee la xidhiidha ballan-qaadka la dhisayo. Mar haddii goobta magaca laanta sifadu ay ka kooban tahay aqoonsiga codsiga jiidista - lambarkeeda, ama magaca laanta, aqoonsiga had iyo jeer waa in lagu qeexaa ballan-qaadka.
Dhismihii laanta Master-ka ayaa fashilma. Tusaale ahaan, waxaad haysataa marxaladaha soo socda: soo dejiso mashruuca, samee tijaabooyinka, dhis mashruuca, samee siidaynta, dir ogeysiisyada, nadiifi laanta sifo ee codsi jiidi ugu dambeeya. Haddii dhismuhu guul-darraysto marka aad dirayso wargelinta, waa inaad gacanta ku tirtirtaa dhammaan agabka ku jira kooxda.
Tani ma noqon karto habkaaga. Tusaale ahaan, in Jenkins, kaliya hal nooc oo dhuumo ah ayaa taageera awoodda lagu badbaadinayo habaynteeda koodhka isha. Markaad isticmaalayso webhooks, waxaad u baahan tahay inaad qorto qoraalkaaga si aad uga shaqeyso. Qoraalkan waa in lagu dhejiyaa interface Jenkins, taas oo ay adag tahay in la ilaaliyo.