Kubvisa yechinyakare ficha bazi muKubernetes cluster

Kubvisa yechinyakare ficha bazi muKubernetes cluster

Nhai! Feature bazi (aka deploy preview, wongororo app) - apa ndipo parisiri chete master bazi rinoiswa, asiwo yega yega yekudhonza kune yakasarudzika URL. Iwe unogona kutarisa kana iyo kodhi inoshanda munzvimbo yekugadzira; iyo ficha inogona kuratidzwa kune vamwe vanogadzira zvirongwa kana nyanzvi yechigadzirwa. Paunenge uchishanda muchikumbiro chekudhonza, imwe neimwe nyowani dhizaini ikozvino yekodhi kodhi inobviswa, uye iyo nyowani nyowani yekodhi nyowani inoburitswa. Mibvunzo inogona kumuka pawakabatanidza chikumbiro chekudhonza mubazi ratenzi. Iwe hauchada iyo ficha yebazi, asi iyo Kubernetes zviwanikwa zvichiri musumbu.

Zvimwe pamusoro pemapazi emhando

Imwe nzira yekugadzira matavi emhando muKubernetes ndeye kushandisa mazita enzvimbo. Muchidimbu, gadziriso yekugadzira inoita seizvi:

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

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

Kune chikamu chebazi, nzvimbo yezita inogadzirwa ine identifier yayo (semuenzaniso, iyo yekudhonza nhamba yekukumbira) uye imwe mhando ye prefix / postfix (semuenzaniso, -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
...

Kazhinji, ndakanyora Kubernetes Operator (chishandiso chinokwanisa kuwana zviwanikwa zvecluster), link kune purojekiti paGithub. Inobvisa nzvimbo dzemazita dzemapazi echinyakare. MuKubernetes, kana ukadzima nzvimbo yezita, zvimwe zviwanikwa mune iyo namespace zvinobviswawo otomatiki.

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

Iwe unogona kuverenga nezve maitiro ekushandisa matavi eficha kuita sumbu pano ΠΈ pano.

Chikonzero

Ngatitarisei pane yakajairwa kudhonza chikumbiro lifecycle nekuenderera mberi kwekubatanidza (continuous integration):

  1. Isu tinosundira kuzvipira kutsva kubazi.
  2. Pakuvaka, linters uye / kana bvunzo dzinoitwa.
  3. Kubernetes kudhonza zvikumbiro zvigadziriso zvinogadzirwa panhunzi (semuenzaniso, nhamba yayo inoiswa mutemplate yapera).
  4. Uchishandisa kubectl shandisa, zvigadziriso zvinowedzerwa kune sumbu (deploy).
  5. Chikumbiro chekudhonza chinobatanidzwa mubazi guru.

Paunenge uchishanda muchikumbiro chekudhonza, imwe neimwe nyowani dhizaini ikozvino yekodhi kodhi inobviswa, uye iyo nyowani nyowani yekodhi nyowani inoburitswa. Asi kana chikumbiro chekudhonza chabatanidzwa mubazi ratenzi, chete bazi guru ndiro richavakwa. Nekuda kweizvozvo, zvinoitika kuti isu takatokanganwa nezvechikumbiro chekudhonza, uye zviwanikwa zvayo zveKubernetes zvichiri muboka.

Nzira yekushandisa sei

Isa purojekiti nemurairo uri pasi apa:

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

Gadzira faira ine zvinotevera zvirimo uye isa kuburikidza kubectl apply -f:

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

Parameter namespaceSubstring inodiwa kusefa nzvimbo dzemazita dzekudhonza zvikumbiro kubva kune mamwe mazita. Semuenzaniso, kana cluster iine mazita anotevera: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, ipapo vanoda kubviswa vachave habr-back-end-pr-17, habr-back-end-pr-33.

Parameter afterDaysWithoutDeploy inodiwa kudzima nzvimbo dzemazita dzekare. Semuenzaniso, kana namespace yakagadzirwa 3 дня 1 час kumashure, uye parameter inoratidza 3 дня, nzvimbo iyi yemazita ichadzimwa. Inoshandawo nenzira yakapesana kana nzvimbo yezita yagadzirwa 2 дня 23 часа kumashure, uye parameter inoratidza 3 дня, nzvimbo iyi yemazita haizodzimwa.

Pane imwezve paramende, ine basa rekuti kakawanda sei kuongorora ese mazita uye kutarisa kwemazuva pasina kutumirwa - checkEveryMinutes. By default yakaenzana 30 ΠΌΠΈΠ½ΡƒΡ‚Π°ΠΌ.

Sei basa iri

Mukuita, iwe uchada:

  1. Docker yekushanda munzvimbo iri yoga.
  2. Minikube ichasimudza Kubernetes cluster munharaunda.
  3. kubectl - command line interface ye cluster management.

Isu tinosimudza boka reKubernetes munharaunda:

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

Tinoratidza kubectl shandisa cluster yemuno nekutadza:

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

Dhawunirodha zvigadziriso zvenzvimbo yekugadzira:

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

Sezvo magadzirirwo ekugadzira akagadzirirwa kutarisa ekare mazita enzvimbo, uye cluster yedu ichangobva kusimudzwa haina iwo, isu tinotsiva nharaunda inoshanduka. IS_DEBUG pamusoro true. Nekukosha uku parameter afterDaysWithoutDeploy haina kuverengerwa uye nzvimbo dzemazita hadzitariswe kwemazuva pasina kutumirwa, chete nekuda kwekuitika kweiyo substring (-pr-).

Kana uri pa Linux:

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

Kana uri pa macOS:

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

Kuisa chirongwa:

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

Kutarisa kuti sosi yaonekwa musumbu StaleFeatureBranch:

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

Isu tinotarisa kuti mushandisi aonekwa muchikwata:

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

Kana iwe ukatarisa matanda ayo, yakagadzirira kugadzirisa zviwanikwa 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}

Isu tinoisa yakagadzirira-yakagadzirwa fixtures (yakagadzirira-yakagadzirwa zvigadziriso zvekuenzanisira zviwanikwa zvecluster) zvekushandisa StaleFeatureBranch:

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

Magadzirirwo anoratidza kutsvaga nzvimbo dzezita ne substring -pr- kamwe chete mukati 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ.:

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

Mushandi apindura uye akagadzirira kutarisa mazita:

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

Install fixtures, ine nzvimbo mbiri dzezita (project-pr-1, project-pr-2) uye ivo deployments, services, ingress, zvichingoenda zvakadaro:

$ 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

Isu tinotarisisa kuti zvese zviri pamusoro zvakagadzirwa zvakabudirira:

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

Sezvo takabatanidza debug, nzvimbo dzemazita project-pr-1 ΠΈ project-pr-2, saka zvimwe zvese zviwanikwa zvinofanirwa kubviswa nekukasira pasina kufunga nezve parameter afterDaysWithoutDeploy. Izvi zvinogona kuoneka muanoshanda logs:

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

Kana iwe ukatarisa kuwanikwa kwezviwanikwa, ivo vachange vari muchimiro Terminating (deletion process) kana kutodzimwa (command output haina chinhu).

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

Iwe unogona kudzokorora nzira yekugadzira fixtures kakawanda uye iva nechokwadi chokuti dzabviswa mukati meminiti.

Alternatives

Chii chingaitwa panzvimbo pemushandisi anoshanda muchikwata? Kune nzira dzinoverengeka, dzese hadzina kukwana (uye zvikanganiso zvavo zvinozviisa pasi), uye munhu wese anozvisarudzira izvo zvakanakira imwe chirongwa:

  1. Delete feature branch panguva inoenderera mberi yekubatanidza kuvaka kwe master bazi.

    • Kuti uite izvi, iwe unofanirwa kuziva kuti ndechipi chikumbiro chekudhonza chine chekuita nekuzvipira kuri kuvakwa. Sezvo iyo nzvimbo yebazi namespace ine yekudhonza chikumbiro identifier - nhamba yayo, kana zita rebazi, identifier inogara ichifanirwa kutsanangurwa mukuita.
    • Master bazi kuvaka vari kukundikana. Semuenzaniso, iwe une anotevera matanho: dhawunirodha purojekiti, mhanyisa bvunzo, gadzira purojekiti, buritsa, tumira zviziviso, bvisa chikamu chechikamu chekupedzisira chikumbiro chekudhonza. Kana iyo chivakwa chikatadza kutumira chiziviso, iwe uchafanirwa kudzima zviwanikwa zvese musumbu nemaoko.
    • Pasina mamiriro akakodzera, kudzima matavi emhando mune tenzi kuvaka hakusi pachena.

  2. Kushandisa webhooks (muenzaniso).

    • Iyi inogona kunge isiri nzira yako. Somuenzaniso, in Jenkins, rudzi rumwe chete rwepombi runotsigira kugona kuchengetedza zvigadziriso zvaro mune kodhi kodhi. Paunenge uchishandisa webhooks, unofanirwa kunyora yako script kuti uzvigadzirise. Iyi script ichafanirwa kuiswa muJenkins interface, iyo yakaoma kuchengetedza.

  3. Kunyora Cronjob uye wedzera Kubernetes cluster.

    • Kupedza nguva pakunyora nekutsigira.
    • Mushandi anotoshanda nenzira yakafanana, inonyorwa uye inotsigirwa.

Ndinokutendai nokuda kwengwariro yenyu kuchinyorwa chacho. Batanidza kune purojekiti paGithub.

Source: www.habr.com

Voeg