Cael gwared ar gangen nodwedd hen ffasiwn mewn clwstwr Kubernetes
Hi! Cangen nodwedd (aka rhagolwg deploy, app adolygu) - dyma pryd nid yn unig y brif gangen yn cael ei defnyddio, ond hefyd pob cais tynnu i URL unigryw. Gallwch wirio a yw'r cod yn gweithio mewn amgylchedd cynhyrchu; gellir dangos y nodwedd i raglenwyr eraill neu arbenigwyr cynnyrch. Tra'ch bod yn gweithio mewn cais tynnu, mae pob gosodiad cyfredol ymrwymo newydd ar gyfer yr hen god yn cael ei ddileu, a bydd y defnydd newydd ar gyfer y cod newydd yn cael ei gyflwyno. Gall cwestiynau godi pan fyddwch chi'n uno cais tynnu â'r brif gangen. Nid oes angen y gangen nodwedd arnoch mwyach, ond mae adnoddau Kubernetes yn dal i fod yn y clwstwr.
Mwy am ganghennau nodwedd
Un dull o wneud canghennau nodwedd yn Kubernetes yw defnyddio gofodau enwau. Yn fyr, mae'r cyfluniad cynhyrchu yn edrych fel hyn:
Ar gyfer cangen nodwedd, crëir gofod enw gyda'i ddynodwr (er enghraifft, y rhif cais tynnu) a rhyw fath o rhagddodiad / gosodiad post (er enghraifft, -pr-):
Yn gyffredinol, ysgrifennais Gweithredwr Kubernetes (cymhwysiad sydd â mynediad at adnoddau clwstwr), dolen i'r prosiect ar Github. Mae'n dileu bylchau enwau sy'n perthyn i hen ganghennau nodwedd. Yn Kubernetes, os byddwch yn dileu gofod enw, mae adnoddau eraill yn y gofod enw hwnnw hefyd yn cael eu dileu'n awtomatig.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
Gallwch ddarllen am sut i weithredu canghennau nodwedd yn glwstwr yma и yma.
Cymhelliant
Gadewch i ni edrych ar gylch bywyd cais tynnu nodweddiadol gydag integreiddio parhaus (continuous integration):
Rydym yn gwthio ymrwymiad newydd i'r gangen.
Ar yr adeilad, cynhelir linters a/neu brofion.
Cynhyrchir ffurfweddiadau cais tynnu Kubernetes ar y hedfan (er enghraifft, mae ei rif yn cael ei fewnosod yn y templed gorffenedig).
Gan ddefnyddio kubectl, ychwanegir ffurfweddiadau at y clwstwr (defnyddio).
Cais tynnu yn cael ei uno i mewn i'r brif gangen.
Tra'ch bod yn gweithio mewn cais tynnu, mae pob gosodiad cyfredol ymrwymo newydd ar gyfer yr hen god yn cael ei ddileu, a bydd y defnydd newydd ar gyfer y cod newydd yn cael ei gyflwyno. Ond pan fydd cais tynnu yn cael ei uno â'r brif gangen, dim ond y brif gangen fydd yn cael ei hadeiladu. O ganlyniad, mae'n ymddangos ein bod eisoes wedi anghofio am y cais tynnu, ac mae ei adnoddau Kubernetes yn dal i fod yn y clwstwr.
Paramedr namespaceSubstring angen hidlo bylchau enwau ar gyfer ceisiadau tynnu o ofodau enwau eraill. Er enghraifft, os oes gan y clwstwr y gofodau enwau canlynol: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, yna bydd ymgeiswyr ar gyfer dileu yn habr-back-end-pr-17, habr-back-end-pr-33.
Paramedr afterDaysWithoutDeploy angen dileu hen ofodau enwau. Er enghraifft, os crëir gofod enwau 3 дня 1 час yn ôl, ac mae'r paramedr yn nodi 3 дня, bydd y gofod enw hwn yn cael ei ddileu. Mae hefyd yn gweithio i'r cyfeiriad arall os yw'r gofod enw yn cael ei greu 2 дня 23 часа yn ôl, ac mae'r paramedr yn nodi 3 дня, ni fydd y gofod enw hwn yn cael ei ddileu.
Mae un paramedr arall, mae'n gyfrifol am ba mor aml i sganio pob gofod enw a gwirio am ddyddiau heb eu defnyddio - gwirioPob Munud. Yn ddiofyn, mae'n gyfartal 30 минутам.
Sut mae hwn
Yn ymarferol, bydd angen:
Docker ar gyfer gweithio mewn amgylchedd anghysbell.
ciwctl - rhyngwyneb llinell orchymyn ar gyfer rheoli clwstwr.
Rydym yn codi clwstwr Kubernetes yn lleol:
$ 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.
Nodwch kubectl defnyddio clwstwr lleol yn ddiofyn:
$ kubectl config use-context minikube
Switched to context "minikube".
Lawrlwythwch ffurfweddiadau ar gyfer yr amgylchedd cynhyrchu:
Gan fod cyfluniadau cynhyrchu wedi'u ffurfweddu i wirio hen ofodau enwau, ac nad oes gan ein clwstwr newydd eu codi, byddwn yn disodli'r newidyn amgylchedd IS_DEBUG ar true. Gyda'r gwerth hwn y paramedr afterDaysWithoutDeploy nid yw'n cael ei gymryd i ystyriaeth ac ni chaiff bylchau enwau eu gwirio am ddyddiau heb eu defnyddio, dim ond os yw'r is-linyn yn digwydd (-pr-).
Os ydych ar Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Os ydych ar macOS:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
Rydym yn gwirio bod gweithredwr wedi ymddangos yn y clwstwr:
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
Os edrychwch ar ei logiau, mae'n barod i brosesu adnoddau StaleFeatureBranch:
Mae'r gweithredwr wedi ymateb ac mae'n barod i wirio bylchau enwau:
$ 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"}
Gosod fixtures, yn cynnwys dau fwlch enw (project-pr-1, project-pr-2) a nhw deployments, services, ingress, ac yn y blaen:
$ 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
Rydym yn gwirio bod yr holl adnoddau uchod wedi’u creu’n llwyddiannus:
$ 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
...
Ers i ni gynnwys debug, gofodau enwau project-pr-1 и project-pr-2, felly bydd yn rhaid dileu'r holl adnoddau eraill ar unwaith heb ystyried y paramedr afterDaysWithoutDeploy. Mae hyn i'w weld yn y logiau gweithredwr:
$ 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"}
Os byddwch yn gwirio argaeledd adnoddau, byddant yn y statws Terminating (proses dileu) neu eisoes wedi'i ddileu (allbwn gorchymyn yn wag).
$ 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
...
Gallwch ailadrodd y broses greu fixtures sawl gwaith a gwnewch yn siŵr eu bod yn cael eu tynnu o fewn munud.
Dewisiadau amgen
Beth ellir ei wneud yn lle gweithredwr sy'n gweithio mewn clwstwr? Mae yna sawl dull, pob un ohonynt yn amherffaith (ac mae eu diffygion yn oddrychol), ac mae pawb yn penderfynu drostynt eu hunain beth sydd orau ar gyfer prosiect penodol:
Dileu cangen nodwedd yn ystod integreiddio parhaus y brif gangen.
I wneud hyn, mae angen i chi wybod pa gais tynnu sy'n ymwneud â'r ymrwymiad sy'n cael ei adeiladu. Gan fod gofod enw'r gangen nodwedd yn cynnwys y dynodwr cais tynnu - ei rif, neu enw'r gangen, bydd yn rhaid nodi'r dynodwr bob amser yn yr ymrwymiad.
Mae prif adeiladau cangen yn methu. Er enghraifft, mae gennych y camau canlynol: lawrlwytho'r prosiect, rhedeg profion, adeiladu'r prosiect, gwneud datganiad, anfon hysbysiadau, clirio cangen nodwedd y cais tynnu olaf. Os bydd yr adeiladwaith yn methu wrth anfon hysbysiad, bydd yn rhaid i chi ddileu'r holl adnoddau yn y clwstwr â llaw.
Heb gyd-destun priodol, nid yw dileu canghennau nodwedd yn y prif adeilad yn amlwg.
Efallai nad dyma'ch dull gweithredu. Er enghraifft, yn Jenkins, dim ond un math o biblinell sy'n cefnogi'r gallu i arbed ei ffurfweddiadau yn y cod ffynhonnell. Wrth ddefnyddio bachau gwe, mae angen i chi ysgrifennu eich sgript eich hun i'w prosesu. Bydd yn rhaid gosod y sgript hon yn rhyngwyneb Jenkins, sy'n anodd ei chynnal.
I ysgrifennu Cronjob ac ychwanegu clwstwr Kubernetes.
Treulio amser ar ysgrifennu a chymorth.
Mae'r gweithredwr eisoes yn gweithio mewn arddull debyg, wedi'i ddogfennu a'i gefnogi.