Ag baint brainse gné as dáta i mbraisle Kubernetes

Ag baint brainse gné as dáta i mbraisle Kubernetes

Dia duit! Brainse gné (aka imscaradh réamhamharc, athbhreithniú app) - seo nuair a ní amháin go bhfuil an brainse máistir imscaradh, ach freisin gach iarratas tarraingt chuig URL uathúil. Is féidir leat a sheiceáil cibé an n-oibríonn an cód i dtimpeallacht táirgthe; Agus tú ag obair ar iarratas tarraingthe, scriostar gach imscaradh reatha tiomantais nua don seanchód, agus cuirtear an t-imscaradh nua don chód nua i bhfeidhm. D’fhéadfadh ceisteanna a bheith ann nuair a chumasc tú iarratas ar tharraingt isteach sa mháistirbhrainse. Ní gá duit an brainse gné a thuilleadh, ach tá acmhainní Kubernetes fós sa bhraisle.

Tuilleadh faoi bhrainsí gné

Cur chuige amháin chun gné-bhrainsí a dhéanamh i Kubernetes ná spásanna ainmneacha a úsáid. I mbeagán focal, tá cuma mar seo ar chumraíocht an táirgeachta:

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

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

I gcás brainse gné, cruthaítear ainmspás lena aitheantóir (mar shampla, uimhir an iarratais tarraingthe) agus réimír de shaghas éigin / iarshocrú (mar shampla, -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
...

Go ginearálta, scríobh mé Oibreoir Kubernetes (feidhmchlár a bhfuil rochtain aige ar acmhainní braisle), nasc leis an tionscadal ar Github. Baineann sé spásanna ainmneacha a bhaineann le craobhacha gné d'aois amach. In Kubernetes, má scriosann tú ainmspás, scriostar acmhainní eile san ainmspás sin go huathoibríoch freisin.

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

Is féidir leat léamh faoi conas brainsí gné a chur i bhfeidhm i mbraisle anseo и anseo.

Spreagadh

Breathnaímid ar shaolré iarratais tarraingthe tipiciúil le comhtháthú leanúnach (continuous integration):

  1. Táimid ag brú gealltanas nua chuig an chraobh.
  2. Ar an tógáil, reáchtáiltear lintéir agus/nó tástálacha.
  3. Gintear cumraíochtaí iarratais tarraingt Kubernetes ar an eitilt (mar shampla, cuirtear a uimhir isteach sa teimpléad críochnaithe).
  4. Ag baint úsáide as kubectl i bhfeidhm, cuirtear cumraíochtaí leis an mbraisle (imscaradh).
  5. Déantar iarratas tarraingt a chumasc isteach sa mháistir-bhrainse.

Agus tú ag obair ar iarratas tarraingthe, scriostar gach imscaradh reatha tiomantais nua don seanchód, agus cuirtear an t-imscaradh nua don chód nua i bhfeidhm. Ach nuair a dhéantar iarratas tarraingt a chumasc isteach sa mháistir-bhrainse, ní thógfar ach an máistir-bhrainse. Mar thoradh air sin, tharlaíonn sé go bhfuil dearmad déanta againn cheana féin ar an iarratas tarraingt, agus tá a chuid acmhainní Kubernetes fós sa bhraisle.

Conas a úsáid

Suiteáil an tionscadal leis an ordú thíos:

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

Cruthaigh comhad leis an ábhar seo a leanas agus a shuiteáil trí kubectl apply -f:

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

Paraiméadar ainmspásSubstring ag teastáil chun spásanna ainmneacha a scagadh le haghaidh iarratais ar tharraingt ó spásanna eile. Mar shampla, má tá na spásanna ainmneacha seo a leanas ag an mbraisle: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, ansin beidh iarrthóirí le haghaidh scriosadh habr-back-end-pr-17, habr-back-end-pr-33.

Paraiméadar i ndiaidhLá Gan Imscaradh ag teastáil chun seanspásanna ainmneacha a scriosadh. Mar shampla, má chruthaítear ainmspás 3 дня 1 час ar ais, agus léiríonn an paraiméadar 3 дня, scriosfar an t-ainmspás seo. Oibríonn sé sa treo eile freisin má chruthaítear an t-ainmspás 2 дня 23 часа ar ais, agus léiríonn an paraiméadar 3 дня, ní scriosfar an t-ainmspás seo.

Tá paraiméadar amháin eile ann, tá sé freagrach as cé chomh minic is féidir gach spásanna ainmneacha a scanadh agus seiceáil ar feadh laethanta gan imscaradh - seiceáil Gach Nóiméad. De réir réamhshocraithe tá sé comhionann 30 минутам.

Conas a oibríonn seo

Go praiticiúil, beidh ort:

  1. dhugaire chun oibriú i dtimpeallacht iargúlta.
  2. Miniciúb ardóidh sé braisle Kubernetes go háitiúil.
  3. cubectl — comhéadan na n-orduithe le haghaidh bainistíocht braisle.

Buailimid braisle Kubernetes go háitiúil:

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

Cuirimid in iúl kubectl úsáid braisle áitiúil de réir réamhshocraithe:

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

Íoslódáil cumraíocht don timpeallacht táirgthe.

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

Ós rud é go bhfuil cumraíochtaí táirgeachta cumraithe chun seanspásanna ainm a sheiceáil, agus nach bhfuil siad ag ár mbraisle nua-ardaithe, cuirfimid athróg an chomhshaoil ​​in ionad IS_DEBUG ar true. Leis an luach seo an paraiméadar afterDaysWithoutDeploy ní chuirtear san áireamh agus ní sheiceáiltear spásanna ainmneacha ar feadh laethanta gan imscaradh, ach amháin má tharlaíonn an fhotheaghrán (-pr-).

Má tá tú ar Linux:

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

Má tá tú ar macOS:

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

Suiteáil an tionscadail:

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

Seiceáil go bhfuil acmhainn le feiceáil sa bhraisle StaleFeatureBranch:

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

Déanaimid seiceáil go bhfuil oibreoir le feiceáil sa bhraisle:

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

Má fhéachann tú ar a logs, tá sé réidh chun acmhainní a phróiseáil 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}

Suiteáil muid réidh-déanta fixtures (cumraíochtaí réidh chun acmhainní braisle a shamhaltú) le haghaidh acmhainne StaleFeatureBranch:

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

Léiríonn na cumraíochtaí cuardach a dhéanamh ar spásanna ainmneacha le fotheaghrán -pr- uair amháin gach 1 минуту.:

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

D'fhreagair an t-oibreoir agus tá sé réidh chun spásanna ainmneacha a sheiceáil:

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

Socraigh fixtures, ina bhfuil dhá ainmspás (project-pr-1, project-pr-2) agus iad deployments, services, ingress, agus mar sin de:

$ 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

Déanaimid seiceáil go bhfuil na hacmhainní go léir thuas cruthaithe go rathúil:

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

Ó chuimsigh muid debug, spásanna ainm project-pr-1 и project-pr-2, dá bhrí sin caithfear gach acmhainn eile a scriosadh láithreach gan an paraiméadar a chur san áireamh afterDaysWithoutDeploy. Is féidir é seo a fheiceáil i logaí an oibreora:

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

Má dhéanann tú seiceáil ar infhaighteacht acmhainní, beidh siad sa stádas Terminating (próiseas scriosta) nó scriosta cheana féin (tá an t-aschur ordaithe folamh).

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

Is féidir leat an próiseas cruthaithe a dhéanamh arís fixtures arís agus arís eile agus déan cinnte go mbaintear amach iad laistigh de nóiméad.

Roghanna eile

Cad is féidir a dhéanamh in ionad oibreora a oibríonn i mbraisle? Tá roinnt cur chuige ann, tá gach ceann acu neamhfhoirfe (agus tá a n-easnaimh suibiachtúla), agus cinneann gach duine dó féin cad is fearr do thionscadal áirithe:

  1. Scrios an brainse gné le linn comhtháthú leanúnach a dhéanamh ar an máistirbhrainse.

    • Chun seo a dhéanamh, ní mór duit fios a bheith agat cén t-iarratas tarraingthe a bhaineann leis an ngealltanas atá á thógáil. Ós rud é go bhfuil an t-aitheantóir iarratais tarraingthe in ainmspás an bhrainse gné - a uimhir, nó ainm an bhrainse, ní mór an t-aitheantóir a shonrú sa ghealltanas i gcónaí.
    • Tá ag teip ar thógáil brainse máistir. Mar shampla, tá na céimeanna seo a leanas agat: an tionscadal a íoslódáil, tástálacha a reáchtáil, an tionscadal a thógáil, scaoileadh a dhéanamh, fógraí a sheoladh, an brainse gné den iarratas tarraingt deiridh a ghlanadh. Má theipeann ar an tógáil agus fógra á sheoladh, beidh ort na hacmhainní go léir sa bhraisle a scriosadh de láimh.
    • Gan comhthéacs cuí, ní léir go scriostar brainsí gné sa mháistirthógáil.

  2. Ag baint úsáide as cuaillí gréasáin (mar shampla).

    • Seans nach é seo do chur chuige. Mar shampla, i Jenkins, ní thacaíonn ach cineál amháin píblíne an cumas a chumraíochtaí a shábháil sa chód foinse. Agus tú ag baint úsáide as cuacha gréasáin, ní mór duit do script féin a scríobh chun iad a phróiseáil. Caithfear an script seo a chur i gcomhéadan Jenkins, rud atá deacair a choimeád.

  3. Scríobh Cronjob agus cuir braisle Kubernetes leis.

    • Am a chaitheamh ar scríbhneoireacht agus ar thacaíocht.
    • Oibríonn an t-oibreoir cheana féin i stíl chomhchosúil, tá sé doiciméadaithe agus tacaithe.

Go raibh maith agat as do aird ar an alt. Nasc leis an tionscadal ar Github.

Foinse: will.com

Add a comment