A’ toirt air falbh meur feart seann-fhasanta ann am buidheann Kubernetes

A’ toirt air falbh meur feart seann-fhasanta ann am buidheann Kubernetes

Hello! Meur feart (aka cleachdadh ro-shealladh, app ath-bhreithneachaidh) - seo nuair nach e a-mhàin gu bheil am prìomh mheur air a chleachdadh, ach cuideachd gach iarrtas tarraing gu URL sònraichte. Faodaidh tu dearbhadh a bheil an còd ag obair ann an àrainneachd riochdachaidh; faodar am feart a shealltainn do phrògramadairean eile no eòlaichean toraidh. Fhad ‘s a tha thu ag obair ann an iarrtas tarraing, thèid gach cleachdadh gnàthach gealltanas ùr airson an t-seann chòd a dhubhadh às, agus thèid an cleachdadh ùr airson a’ chòd ùr a sgaoileadh a-mach. Faodaidh ceistean èirigh nuair a chuir thu iarrtas tarraing còmhla ris a’ phrìomh mheur. Chan fheum thu am meur feart tuilleadh, ach tha goireasan Kubernetes fhathast sa bhuidheann.

Tuilleadh mu mheuran feart

Is e aon dòigh air meuran feart a dhèanamh ann an Kubernetes a bhith a’ cleachdadh ainmean-àite. Ann an ùine ghoirid, tha an rèiteachadh toraidh a ’coimhead mar seo:

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

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

Airson meur feart, thèid àite-ainm a chruthachadh leis an aithnichear aige (mar eisimpleir, an àireamh iarrtas tarraing) agus seòrsa de ro-leasachan / postfix (mar eisimpleir, -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
...

San fharsaingeachd, sgrìobh mi Gnìomhaiche Kubernetes (iarrtas aig a bheil cothrom air goireasan cnuasachaidh), ceangal ris a’ phròiseact air Github. Bidh e a’ toirt air falbh àiteachan ainmean a bhuineas do sheann mheuran feart. Ann an Kubernetes, ma sguabas tu às àite ainm, thèid goireasan eile san ainm-àite sin a dhubhadh às gu fèin-ghluasadach cuideachd.

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

Faodaidh tu leughadh mu mar a chuireas tu meuran feart an sàs ann am brabhsair an seo и an seo.

Мотивация

Bheir sinn sùil air cuairt-beatha iarrtas tarraing àbhaisteach le amalachadh leantainneach (continuous integration):

  1. Bidh sinn a’ putadh gealltanas ùr chun mheur.
  2. Air an togail, thathas a’ ruith lòchrain agus/no deuchainnean.
  3. Bithear a ’gineadh rèiteachaidhean iarrtas tarraing Kubernetes air an itealan (mar eisimpleir, tha an àireamh aige air a chuir a-steach don teamplaid chrìochnaichte).
  4. A’ cleachdadh kubectl cuir a-steach, thèid rèiteachaidhean a chur ris a’ bhuidheann (cleachdadh).
  5. Tha iarrtas tarraing air a thoirt a-steach don phrìomh mheur.

Fhad ‘s a tha thu ag obair ann an iarrtas tarraing, thèid gach cleachdadh gnàthach gealltanas ùr airson an t-seann chòd a dhubhadh às, agus thèid an cleachdadh ùr airson a’ chòd ùr a sgaoileadh a-mach. Ach nuair a thèid iarrtas tarraing a thoirt a-steach don phrìomh mheur, cha tèid ach am prìomh mheur a thogail. Mar thoradh air an sin, tha e a ’tionndadh a-mach gu bheil sinn mu thràth air dìochuimhneachadh mun iarrtas tarraing, agus tha na goireasan Kubernetes aige fhathast anns a’ bhuidheann.

Mar a chleachdar tu

Stàlaich am pròiseact leis an àithne gu h-ìosal:

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

Cruthaich faidhle leis an t-susbaint a leanas agus stàlaich tro kubectl apply -f:

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

Parameter namespaceSubstring a dhìth gus beàrnan ainm a shìoladh airson iarrtasan tarraing bho àiteachan ainmean eile. Mar eisimpleir, ma tha na h-àiteachan ainmean a leanas aig a’ bhuidheann: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, an uairsin bidh tagraichean airson cuir às habr-back-end-pr-17, habr-back-end-pr-33.

Parameter às dèidh Làithean Gun Chleachdadh tha feum air seann ainmean a sguabadh às. Mar eisimpleir, ma thèid namespace a chruthachadh 3 дня 1 час air ais, agus tha am paramadair a’ nochdadh 3 дня, thèid an t-ainm-àite seo a sguabadh às. Bidh e cuideachd ag obair an taobh eile ma thèid an t-ainm-àite a chruthachadh 2 дня 23 часа air ais, agus tha am paramadair a’ nochdadh 3 дня, cha tèid an t-ainm-àite seo a sguabadh às.

Tha aon paramadair eile ann, tha e an urra ri dè cho tric ‘s a thèid a h-uile àite ainm a sganadh agus sgrùdadh a dhèanamh airson làithean gun chleachdadh - thoir sùil air a h-uile mionaid. Gu gnàthach tha e co-ionann ri 30 минутам.

Ciamar a tha an obair seo

Ann an cleachdadh, bidh feum agad air:

  1. Docker airson a bhith ag obair ann an àrainneachd iomallach.
  2. Minikube togaidh e cruinneachadh Kubernetes gu h-ionadail.
  3. cubectl - eadar-aghaidh loidhne-àithne airson riaghladh brabhsair.

Bidh sinn a’ togail cruinneachadh Kubernetes gu h-ionadail:

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

Comharraich kubectl cleachd brabhsair ionadail gu bunaiteach:

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

Luchdaich sìos rèiteachaidhean airson na h-àrainneachd toraidh:

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

Leis gu bheil rèiteachaidhean cinneasachaidh air an rèiteachadh gus sùil a thoirt air seann ainmean, agus nach eil iad aig a’ bhuidheann ùr againn, cuiridh sinn caochladair na h-àrainneachd an àite IS_DEBUG air true. Leis an luach seo am paramadair afterDaysWithoutDeploy chan eilear a’ toirt aire agus chan eilear a’ sgrùdadh àiteachan ainmean airson làithean gun chleachdadh, dìreach airson an fho-thalamh (-pr-).

Ma tha thu air adhart Linux:

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

Ma tha thu air adhart macOS:

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

Stàladh a 'phròiseict:

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

A’ dèanamh cinnteach gu bheil goireas air nochdadh sa bhuidheann StaleFeatureBranch:

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

Bidh sinn a’ dèanamh cinnteach gu bheil gnìomhaiche air nochdadh anns a’ bhuidheann:

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

Ma choimheadas tu air na clàran aige, tha e deiseil airson goireasan a phròiseasadh 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}

Bidh sinn a 'stàladh deiseil fixtures (rèiteachaidhean deiseil airson goireasan cnuasachaidh a mhodaladh) airson goireas StaleFeatureBranch:

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

Tha na rèiteachaidhean a’ comharrachadh a bhith a’ lorg àiteachan ainmean le fo-thalamh -pr- aon uair a h-uile 1 минуту.:

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

Tha an gnìomhaiche air freagairt agus tha e deiseil airson sùil a thoirt air àiteachan ainmean:

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

Stàlaich fixtures, anns a bheil dà àite ainm (project-pr-1, project-pr-2) agus iadsan deployments, services, ingress, Agus mar sin air adhart:

$ 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

Nì sinn cinnteach gun deach na goireasan gu h-àrd a chruthachadh gu soirbheachail:

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

Bhon a thug sinn a-steach debug, ainmean-àite project-pr-1 и project-pr-2, mar sin feumar a h-uile goireas eile a dhubhadh às sa bhad gun a bhith a’ toirt aire don pharamadair afterDaysWithoutDeploy. Tha seo ri fhaicinn ann an logaichean a’ ghnìomhaiche:

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

Ma nì thu sgrùdadh air na tha ri fhaighinn de ghoireasan, bidh iad san inbhe Terminating (pròiseas sguabaidh às) no air a dhubhadh às mu thràth (tha toradh òrdughan falamh).

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

Faodaidh tu am pròiseas cruthachaidh ath-aithris fixtures grunn thursan agus dèan cinnteach gun tèid an toirt air falbh taobh a-staigh mionaid.

Roghainnean eile

Dè ghabhas dèanamh an àite gnìomhaiche a tha ag obair ann am brabhsair? Tha grunn dhòighean-obrach ann, tha iad uile neo-fhoirfe (agus tha na h-easbhaidhean aca pearsanta), agus bidh a h-uile duine a 'co-dhùnadh dha fhèin dè as fheàrr airson pròiseact sònraichte:

  1. Cuir às do mheur feart rè togail amalachadh leantainneach de phrìomh mheur.

    • Gus seo a dhèanamh, feumaidh fios a bhith agad dè an t-iarrtas tarraing a tha a 'buntainn ris a' ghealltanas a thathar a 'togail. Leis gu bheil an aithnichear iarrtas tarraing ann an àrainn-ainm meur feart - an àireamh aige, no ainm a’ mheur, feumaidh an aithnichear an-còmhnaidh a bhith air a shònrachadh sa ghealladh.
    • Tha prìomh thogalaichean meur a’ fàiligeadh. Mar eisimpleir, tha na h-ìrean a leanas agad: luchdaich sìos am pròiseact, ruith deuchainnean, tog am pròiseact, cuir fios a-mach, cuir fiosan, cuir às don mheur feart den iarrtas tarraing mu dheireadh. Ma dh’ fhailicheas an togail nuair a chuireas tu fios, feumaidh tu a h-uile goireas sa bhuidheann a dhubhadh às le làimh.
    • Às aonais co-theacs ceart, chan eil e follaiseach cuir às do mheuran feart anns a’ phrìomh thogalach.

  2. A’ cleachdadh leabhraichean-lìn (eisimpleir).

    • Is dòcha nach e seo an dòigh-obrach agad. Mar eisimpleir, ann an Jenkins, chan eil ach aon seòrsa de loidhne-phìoban a’ toirt taic don chomas na rèiteachaidhean aige a shàbhaladh sa chòd stòr. Nuair a bhios tu a’ cleachdadh lìn-lìn, feumaidh tu an sgriobt agad fhèin a sgrìobhadh airson an làimhseachadh. Feumaidh an sgriobt seo a bhith air a chuir ann an eadar-aghaidh Jenkins, a tha duilich a chumail suas.

  3. Gus sgrìobhadh Cronobair agus cuir buidheann Kubernetes ris.

    • A’ caitheamh ùine air sgrìobhadh agus taic.
    • Tha an gnìomhaiche mar-thà ag obair ann an stoidhle coltach ris, air a chlàradh agus a 'faighinn taic.

Tapadh leibh airson d’ aire don artaigil. Ceangal ris a’ phròiseact air Github.

Source: www.habr.com

Cuir beachd ann