Ho tlosa lekala la likarolo tsa khale sehlopheng sa Kubernetes

Ho tlosa lekala la likarolo tsa khale sehlopheng sa Kubernetes

Lumela! Lekala la tšobotsi (aka deploy preview, app review) - ke ha ho sa sebelisoe lekala le leholo feela, empa hape le kopo e 'ngoe le e' ngoe ea ho hula URL e ikhethang. U ka hlahloba hore na khoutu e sebetsa sebakeng sa tlhahiso; karolo e ka bontšoa ho baetsi ba mananeo kapa litsebi tse ling tsa lihlahisoa. Ha o ntse o sebetsa kopong ea ho hula, ntho e 'ngoe le e 'ngoe e ncha e romelloang hona joale bakeng sa khoutu ea khale ea hlakoloa, 'me thomello e ncha bakeng sa khoutu e ncha ea phatlalatsoa. Lipotso li ka hlaha ha u kopanya kopo ea ho hula lekaleng le leholo. Ha u sa hloka lekala la likarolo, empa lisebelisoa tsa Kubernetes li ntse li le sehlopheng.

Tse ling mabapi le makala a likarolo

Mokhoa o mong oa ho etsa makala a likarolo ho Kubernetes ke ho sebelisa libaka tsa mabitso. Ka bokhutšoanyane, tlhophiso ea tlhahiso e shebahala tjena:

kind: Namespace
apiVersion: v1
metadata:
  name: habr-back-end
...

kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: habr-back-end
spec:
  replicas: 3
...

Bakeng sa karolo ea lekala, sebaka sa mabitso se entsoe ka sekhetho sa sona (mohlala, nomoro ea kopo ea ho hula) le mofuta o mong oa sehlomathiso / poso (mohlala, -pr-):

kind: Namespace
apiVersion: v1
metadata:
  name: habr-back-end-pr-17
...

kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: habr-back-end-pr-17
spec:
  replicas: 1
...

Ka kakaretso, ke ngotse Opereishene ea Kubernetes (ts'ebeliso e nang le phihlello ea lisebelisoa tsa sehlopha), sehokelo sa morero ho Github. E tlosa libaka tsa mabitso tseo e leng tsa makala a likarolo tsa khale. Ho Kubernetes, haeba u hlakola sebaka sa mabitso, lisebelisoa tse ling sebakeng seo sa mabitso le tsona li hlakoloa ka bo eona.

$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE            ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h

U ka bala ka mokhoa oa ho kenya tšebetsong makala a likarolo ka sehlopha mona и mona.

Tšusumetso

Ha re shebeng kopo e tloaelehileng ea ho hula bophelo ka ho kopanya ho tsoelang pele (continuous integration):

  1. Re sutumelletsa boitlamo bo bocha lekaleng.
  2. Moahong, li-linter le/kapa liteko lia etsoa.
  3. Litlhophiso tsa kopo ea ho hula ea Kubernetes li hlahisoa ka fofa (mohlala, nomoro ea eona e kentsoe template e felileng).
  4. U sebelisa kubectl e sebetsa, litlhophiso li eketsoa sehlopheng (deploy).
  5. Kopo ea ho hula e kopantsoe ho lekala la master.

Ha o ntse o sebetsa kopong ea ho hula, ntho e 'ngoe le e 'ngoe e ncha e romelloang hona joale bakeng sa khoutu ea khale ea hlakoloa, 'me thomello e ncha bakeng sa khoutu e ncha ea phatlalatsoa. Empa ha kopo ea ho hula e kopanngoa lekaleng le leholo, ho tla hahuoa lekala le leholo feela. Ka lebaka leo, hoa bonahala hore re se re lebetse ka kopo ea ho hula, 'me mehloli ea eona ea Kubernetes e ntse e le sehlopheng.

Kamoo u ka se sebelisang

Kenya morero ka taelo e ka tlase:

$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/configs/production.yml

Theha faele e nang le litaba tse latelang 'me u kenye ka kubectl apply -f:

apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
  name: stale-feature-branch
spec:
  namespaceSubstring: -pr-
  afterDaysWithoutDeploy: 3

Parameter sebaka sa mabitsoSubstring e hlokahalang ho sefa libaka tsa mabitso bakeng sa likopo tsa ho hula libakeng tse ling. Ka mohlala, haeba sehlopha se na le libaka tse latelang tsa mabitso: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, joale bonkgetheng ba ho hlakolwa e tla ba habr-back-end-pr-17, habr-back-end-pr-33.

Parameter afterDaysWithoutDeploy e hlokahalang ho hlakola libaka tsa mabitso tsa khale. Mohlala, haeba sebaka sa mabitso se entsoe 3 дня 1 час morao, 'me parameter e bontša 3 дня, sebaka sena sa mabitso se tla hlakoloa. E boetse e sebetsa ka lehlakoreng le fapaneng haeba sebaka sa mabitso se entsoe 2 дня 23 часа morao, 'me parameter e bontša 3 дня, sebaka sena sa mabitso se ke ke sa hlakoloa.

Ho na le paramethara e 'ngoe hape, e na le boikarabello ba hore na ho hlahlojoa libaka tsohle tsa mabitso hangata hakae le ho hlahloba matsatsi ntle le ho romelloa - hlahlobaMetsotso e meng le e meng. Ka kamehla e lekana 30 минутам.

Joang mosebetsing ona

Ka tshebetso, o tla hloka:

  1. Docker bakeng sa ho sebetsa sebakeng se ka thoko.
  2. Minikube e tla phahamisa sehlopha sa Kubernetes sebakeng sa heno.
  3. kubctl - sehokelo sa mola oa taelo bakeng sa taolo ea sehlopha.

Re phahamisa sehlopha sa Kubernetes sebakeng sa heno:

$ 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.

Re bontša kubectl sebelisa sehlopha sa lehae ka ho sa feleng:

$ kubectl config use-context minikube
Switched to context "minikube".

Khoasolla litlhophiso tsa tikoloho ea tlhahiso:

$ curl https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/configs/production.yml > stale-feature-branch-production-configs.yml

Kaha litlhophiso tsa tlhahiso li lokiselitsoe ho hlahloba libaka tsa khale tsa mabitso, 'me sehlopha sa rona se sa tsoa phahamisoa ha se na tsona, re tla nkela sebaka se fapaneng sa tikoloho. IS_DEBUG mabapi le true. Ka boleng bona parameter afterDaysWithoutDeploy ha e eloe hloko 'me libaka tsa mabitso ha li hlahlojoe ka matsatsi a sa romelloe, feela bakeng sa ho hlaha ha mohala o monyenyane (-pr-).

Haeba u le teng Linux:

$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml

Haeba u le teng macOS:

$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml

Ho kenya morero:

$ kubectl apply -f stale-feature-branch-production-configs.yml

Ho hlahloba hore na mohloli o hlahile sehlopheng StaleFeatureBranch:

$ kubectl api-resources | grep stalefeaturebranches
NAME                 ... APIGROUP                             ... KIND
stalefeaturebranches ... feature-branch.dmytrostriletskyi.com ... StaleFeatureBranch

Re netefatsa hore opareitara e hlahile sehlopheng:

$ kubectl get pods --namespace stale-feature-branch-operator
NAME                                           ... STATUS  ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s

Haeba u sheba lifate tsa eona, e loketse ho sebetsana le lisebelisoa StaleFeatureBranch:

$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Operator Version: 0.0.1"}
...
... "msg":"Starting EventSource", ... , "source":"kind source: /, Kind="}
... "msg":"Starting Controller", ...}
... "msg":"Starting workers", ..., "worker count":1}

Re kenya e itokiselitse fixtures (litlhophiso tse seng li entsoe tsa ho etsa mohlala oa lisebelisoa tsa sehlopha) bakeng sa sesebelisoa StaleFeatureBranch:

$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/stale-feature-branch.yml

Litlhophiso li bonts'a ho batla libaka tsa mabitso ka khoele e nyane -pr- hang ka hare 1 минуту.:

apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
  name: stale-feature-branch
spec:
  namespaceSubstring: -pr-
  afterDaysWithoutDeploy: 1 
  checkEveryMinutes: 1

Opereishene e arabile 'me e ikemiselitse ho sheba libaka tsa mabitso:

$ 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"}

Kenya fixtures, e nang le libaka tse peli tsa mabitso (project-pr-1, project-pr-2) le bona deployments, services, ingress, joalo joalo:

$ 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

Re netefatsa hore lisebelisoa tsohle tse kaholimo li entsoe ka katleho:

$ 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
...

Kaha re kenyelelitse debug, libaka tsa mabitso project-pr-1 и project-pr-2, ka hona lisebelisoa tse ling kaofela li tla tlameha ho hlakoloa hang-hang ntle le ho ela hloko parameter afterDaysWithoutDeploy. Sena se ka bonoa ho li-log tsa opareitara:

$ 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"}

Haeba u hlahloba boteng ba lisebelisoa, li tla ba boemong Terminating (Ts'ebetso ea ho hlakola) kapa e se e hlakotsoe (sephetho sa taelo ha se na letho).

$ 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
...

U ka pheta mokhoa oa ho bōpa fixtures makhetlo a 'maloa' me u etse bonnete ba hore li tlosoa nakong ea motsotso.

Mekhoa e meng

Ho ka etsoa eng ho e-na le opareitara e sebetsang ka sehlopha? Ho na le mekhoa e 'maloa, kaofela ha bona ha baa phethahala ('me mefokolo ea bona e itšetlehile ka maikutlo),' me e mong le e mong o iketsetsa qeto ea hore na ke eng e molemo ka ho fetisisa bakeng sa morero o itseng:

  1. Hlakola lekala la likarolo nakong ea kaho e tsoelang pele ea kopanyo ea lekala le leholo.

    • Ho etsa sena, o hloka ho tseba hore na ke kopo efe ea ho hula e amanang le boitlamo bo ntseng bo hahuoa. Kaha sebaka sa mabitso sa lekala se na le sets'oants'o sa kopo ea ho hula - nomoro ea sona, kapa lebitso la lekala, sekhetho se tla tlameha ho hlalosoa kamehla boitlamo.
    • Mehaho ea lekala e hloahloa e ea hloleha. Ka mohlala, u na le mekhahlelo e latelang: khoasolla morero, tsamaisa liteko, haha ​​morero, etsa tokollo, romela litsebiso, hlakola karolo ea lekala la kopo ea ho qetela ea ho hula. Haeba moaho o hloleha ha o romella tsebiso, o tla tlameha ho hlakola lisebelisoa tsohle ka har'a sehlopha ka letsoho.
    • Ntle le maemo a nepahetseng, ho hlakola makala a sebopeho mohahong o moholo ha ho totobetse.

  2. Ho sebelisa li-webhooks (mohlala).

    • Ena e kanna ea se be mokhoa oa hau. Ka mohlala, ka Jenkins, mofuta o le mong feela oa phaephe o tšehetsang bokhoni ba ho boloka litlhophiso tsa oona ho khoutu ea mohloli. Ha o sebelisa li-webhooks, o hloka ho ngola mongolo oa hau ho o sebetsa. Script ena e tla tlameha ho behoa ho Jenkins interface, eo ho leng thata ho e boloka.

  3. Ho ngola Cronjob mme o kenye sehlopha sa Kubernetes.

    • Ho qeta nako ho ngola le ho tshehetsa.
    • Mokhanni o se a ntse a sebetsa ka mokhoa o ts'oanang, o ngotsoe ebile o tšehetsoa.

Kea le leboha ka ho ela hloko sehlooho sena. Kopana le morero ho Github.

Source: www.habr.com

Eketsa ka tlhaloso