Cleachd tagraidhean thairis air grunn chlàran Kubernetes le Helm

Mar a bhios Dailymotion a’ cleachdadh Kubernetes: Cleachdadh Iarrtais

Thòisich sinn aig Dailymotion a’ cleachdadh Kubernetes ann an cinneasachadh 3 bliadhna air ais. Ach tha e spòrsail a bhith a’ cleachdadh thagraidhean thairis air grunn bhuidhnean, agus mar sin thar nam beagan bhliadhnaichean a dh’ fhalbh tha sinn air a bhith a’ feuchainn ris na h-innealan agus na sruthan-obrach againn a leasachadh.

Càite an tòisich e

An seo còmhdaichidh sinn mar a chleachdas sinn na tagraidhean againn thairis air grunn bhuidhnean Kubernetes air feadh an t-saoghail.

Gus iomadh rud Kubernetes a chleachdadh aig an aon àm, bidh sinn a’ cleachdadh Helm, agus tha na clàran againn uile air an stòradh ann an aon stòr git. Gus stac tagraidh slàn a chleachdadh bho ghrunn sheirbheisean, bidh sinn a’ cleachdadh a’ chairt geàrr-chunntas ris an canar. Gu bunaiteach, is e clàr a tha seo a dhearbhas eisimeileachd agus a leigeas leat an API agus na seirbheisean aige a thòiseachadh le aon àithne.

Sgrìobh sinn cuideachd sgriobt Python beag air mullach Helm gus sgrùdaidhean a dhèanamh, clàran a chruthachadh, dìomhaireachdan a chuir ris, agus tagraidhean a chuir an sàs. Tha na gnìomhan sin uile air an coileanadh air àrd-ùrlar CI sa mheadhan a’ cleachdadh ìomhaigh docker.

Rachamaid chun a 'phuing.

Thoir an aire. Mar a bhios tu a’ leughadh seo, chaidh a’ chiad thagraiche fuasglaidh airson Helm 3 ainmeachadh mar-thà. Anns a’ phrìomh dhreach tha grunn leasachaidhean gus dèiligeadh ri cuid de na cùisean air an do thachair sinn san àm a dh’ fhalbh.

Sruth-obrach leasachadh cairt

Bidh sinn a’ cleachdadh branching airson tagraidhean, agus chuir sinn romhainn an aon dòigh-obrach a chleachdadh airson clàran.

  • Meur dev air a chleachdadh gus clàran a chruthachadh a thèid a dhearbhadh air cruinneachaidhean leasachaidh.
  • Nuair a thèid iarrtas tarraing a chuir a-steach gu mhaighstir, tha iad air an sgrùdadh ann an àrd-ùrlar.
  • Mu dheireadh, bidh sinn a 'cruthachadh iarrtas tarraing gus na h-atharrachaidhean a dhèanamh air a' mheur prod agus cuir an sàs iad ann an riochdachadh.

Tha a stòr prìobhaideach fhèin aig gach àrainneachd a bhios a’ stòradh ar clàran, agus a bhios sinn a’ cleachdadh Taigh-tasgaidh Chart le APIan glè fheumail. San dòigh seo bidh sinn a’ dèanamh cinnteach à aonaranachd teann eadar àrainneachdan agus deuchainn fìor air clàran mus cleachd sinn iad ann an cinneasachadh.

Clàr-stòraidhean ann an diofar àrainneachdan

Is fhiach a bhith mothachail, nuair a bhios luchd-leasachaidh a’ putadh meur dev, gu bheil dreach den chairt aca air a phutadh gu fèin-ghluasadach chun dev Chartmuseum. Mar sin, bidh a h-uile leasaiche a’ cleachdadh an aon stòr dev, agus feumaidh tu an dreach agad den chairt a shònrachadh gu faiceallach gus nach cleachd thu atharrachaidhean cuideigin eile gun fhiosta.

A bharrachd air an sin, tha an sgriobt Python beag againn a’ dearbhadh nithean Kubernetes an aghaidh mion-chomharrachadh Kubernetes OpenAPI a’ cleachdadh Ciùbhail, mus foillsich iad air Chartmusem.

Tuairisgeul coitcheann air sruth-obrach leasachadh cairt

  1. Stèidhich gnìomhan loidhne-phìoban a rèir sònrachadh gazr.io airson smachd càileachd (lint, aonad-deuchainn).
  2. A’ putadh ìomhaigh docker le innealan Python a bhios a’ cleachdadh ar tagraidhean.
  3. A’ stèidheachadh na h-àrainneachd le ainm meur.
  4. A’ dearbhadh faidhlichean Kubernetes yaml a’ cleachdadh Kubeval.
  5. Meudaich gu fèin-ghluasadach an dreach de chairt agus na clàran phàrant aige (clàran a tha an urra ris a’ chairt atharrachadh).
  6. A’ cur a-steach cairt gu Taigh-tasgaidh Chart a tha a rèir na h-àrainneachd aige

A’ riaghladh eadar-dhealachaidhean thar bhuidhnean

Caidreachas nam buidhnean

Bha àm ann nuair a chleachd sinn co-bhanntachd de bhuidhnean Kubernetes, far an gabhadh nithean Kubernetes ainmeachadh bho aon cheann-uidhe API. Ach dh'èirich duilgheadasan. Mar eisimpleir, cha b’ urrainn cuid de stuthan Kubernetes a bhith air an cruthachadh ann am puing crìochnachaidh a’ cho-chaidreachais, ga dhèanamh duilich nithean aonaichte agus nithean eile a chumail airson cruinneachaidhean fa leth.

Gus an duilgheadas fhuasgladh, thòisich sinn air na cruinneachaidhean a riaghladh gu neo-eisimeileach, a rinn am pròiseas gu mòr nas sìmplidhe (chleachd sinn a ’chiad dreach den chaidreachas; is dòcha gu robh rudeigin air atharrachadh san dàrna fear).

Àrd-ùrlar geo-sgaoileadh

Tha an àrd-ùrlar againn an-dràsta air a sgaoileadh thairis air roinnean 6 - 3 gu h-ionadail agus 3 san sgòth.


Sgaoileadh Sgaoilte

Luachan Global Helm

Leigidh 4 luachan Helm cruinne dhut eadar-dhealachaidhean eadar cruinneachaidhean aithneachadh. Tha luachan as ìsle bunaiteach aig a h-uile clàr againn.

global:
  cloud: True
  env: staging
  region: us-central1
  clusterName: staging-us-central1

Luachan cruinne

Bidh na luachan sin a’ cuideachadh le bhith a’ mìneachadh co-theacsa nan tagraidhean againn agus tha iad air an cleachdadh airson diofar adhbharan: sgrùdadh, lorg, logadh, dèanamh fiosan bhon taobh a-muigh, sgèileadh, msaa.

  • "sgòth": Tha àrd-ùrlar Kubernetes tar-chinealach againn. Mar eisimpleir, tha an API againn air a chleachdadh ann an sònaichean GCP agus anns na h-ionadan dàta againn.
  • "env": Faodaidh cuid de luachan atharrachadh airson àrainneachdan neo-riochdachaidh. Mar eisimpleir, mìneachaidhean ghoireasan agus rèiteachadh fèin-sgèile.
  • “sgìre”: Cuidichidh am fiosrachadh seo le bhith a’ dearbhadh far a bheil a’ bhuidheann agus faodar a chleachdadh gus cinn-uidhe faisg air làimh airson seirbheisean taobh a-muigh a dhearbhadh.
  • "clusterName": ma tha agus cuin a tha sinn airson luach a mhìneachadh airson brabhsair fa leth.

Seo eisimpleir sònraichte:

{{/* Returns Horizontal Pod Autoscaler replicas for GraphQL*/}}
{{- define "graphql.hpaReplicas" -}}
{{- if eq .Values.global.env "prod" }}
{{- if eq .Values.global.region "europe-west1" }}
minReplicas: 40
{{- else }}
minReplicas: 150
{{- end }}
maxReplicas: 1400
{{- else }}
minReplicas: 4
maxReplicas: 20
{{- end }}
{{- end -}}

Eisimpleir Helm

Tha an loidsig seo air a mhìneachadh ann an teamplaid cuideachaidh gus bearradh Kubernetes YAML a sheachnadh.

Sanas Iarrtais

Tha na h-innealan cleachdadh againn stèidhichte air grunn fhaidhlichean YAML. Gu h-ìosal tha eisimpleir de mar a bhios sinn a’ foillseachadh seirbheis agus an topology sgèileachaidh (àireamh mac-samhail) ann am buidheann.

releases:
  - foo.world

foo.world:                # Release name
  services:               # List of dailymotion's apps/projects
    foobar:
      chart_name: foo-foobar
      repo: [email protected]:dailymotion/foobar
      contexts:
        prod-europe-west1:
          deployments:
            - name: foo-bar-baz
              replicas: 18
            - name: another-deployment
              replicas: 3

Mìneachadh Seirbheis

Seo geàrr-chunntas de na ceumannan a tha a’ mìneachadh ar sruth-obrach cleachdadh. Bidh an ceum mu dheireadh a’ cleachdadh an tagraidh gu grunn bhuidhnean luchd-obrach aig an aon àm.


Ceumannan cleachdadh Jenkins

Dè mu dheidhinn dìomhaireachdan?

A thaobh tèarainteachd, bidh sinn a’ cumail sùil air dìomhaireachdan bho dhiofar àiteachan agus gan stòradh ann an seilear gun samhail Bùrn ann am Paris.

Bidh na h-innealan cleachdadh againn a’ toirt a-mach luachan dìomhair bho Vault agus, nuair a thig an ùine cleachdadh, cuir a-steach iad ann an Helm.

Gus seo a dhèanamh, mhìnich sinn mapadh eadar na dìomhaireachdan ann an Vault agus na dìomhaireachdan a dh’ fheumas na tagraidhean againn:

secrets:                                                                                                                                                                                                        
     - secret_id: "stack1-app1-password"                                                                                                                                                                                  
       contexts:                                                                                                                                                                                                   
         - name: "default"                                                                                                                                                                                         
           vaultPath: "/kv/dev/stack1/app1/test"                                                                                                                                                               
           vaultKey: "password"                                                                                                                                                                                    
         - name: "cluster1"                                                                                                                                                                           
           vaultPath: "/kv/dev/stack1/app1/test"                                                                                                                                                               
           vaultKey: "password"

  • Tha sinn air riaghailtean coitcheann a mhìneachadh ri leantainn nuair a bhios sinn a’ clàradh dìomhaireachdan ann an Vault.
  • Ma tha an dìomhair a 'buntainn gu co-theacs no buidheann sònraichte, feumaidh tu inntrigeadh sònraichte a chuir ris. (An seo tha luach fhèin aig a’ bhuidheann co-theacsa1 airson am facal-faire dìomhair stack-app1-password).
  • Mur eil, thèid an luach a chleachdadh gu gnàthach.
  • Airson gach nì san liosta seo ann an Kubernetes dìomhair tha paidhir luach-iuchrach air a chuir a-steach. Mar sin, tha an teamplaid dìomhair anns na clàran againn gu math sìmplidh.

apiVersion: v1
data:
{{- range $key,$value := .Values.secrets }}
  {{ $key }}: {{ $value | b64enc | quote }}
{{ end }}
kind: Secret
metadata:
  name: "{{ .Chart.Name }}"
  labels:
    chartVersion: "{{ .Chart.Version }}"
    tillerVersion: "{{ .Capabilities.TillerVersion.SemVer }}"
type: Opaque

Duilgheadasan agus crìochan

Ag obair le grunn stòran

A-nis tha sinn a 'sgaradh leasachadh chlàran agus iarrtasan. Tha seo a’ ciallachadh gum feum luchd-leasachaidh a bhith ag obair ann an dà stòr git: aon airson an tagraidh, agus aon airson a chleachdadh gu Kubernetes a mhìneachadh. Tha tasgaidhean 2 git a’ ciallachadh 2 shruth-obrach, agus tha e furasta dha newbie a bhith troimh-chèile.

Tha e na dhuilgheadas a bhith a’ riaghladh chlàran coitcheann

Mar a thuirt sinn mu thràth, tha clàran coitcheann glè fheumail airson a bhith a’ comharrachadh eisimeileachd agus a bhith a’ cleachdadh iomadh tagradh gu sgiobalta. Ach bidh sinn a 'cleachdadh --reuse-valuesgus nach tèid sinn seachad air na luachan gu lèir a h-uile uair a chleachdas sinn tagradh a tha mar phàirt den chairt choitcheann seo.

Ann an sruth-obrach lìbhrigidh leantainneach, chan eil againn ach dà luach a bhios ag atharrachadh gu cunbhalach: an àireamh de mhac-samhail agus an taga ìomhaigh (dreach). Tha luachan eile, nas seasmhaiche air an atharrachadh le làimh, agus tha seo gu math duilich. A bharrachd air an sin, faodaidh aon mhearachd ann a bhith a’ cleachdadh clàr coitcheann leantainn gu fìor fàilligidhean, mar a chunnaic sinn bhon eòlas againn fhìn.

Ag ùrachadh grunn fhaidhlichean rèiteachaidh

Nuair a chuireas leasaiche tagradh ùr ris, feumaidh e grunn fhaidhlichean atharrachadh: an dearbhadh tagraidh, an liosta de dhìomhaireachd, a’ cur an tagraidh ris mar eisimeileachd ma tha e air a ghabhail a-steach sa chairt choitcheann.

Tha ceadan Jenkins ro leudachadh ann an Vault

A-nis tha aon againn AppRole, a leughas na dìomhaireachdan uile bhon Vault.

Chan eil am pròiseas tilleadh air ais fèin-ghluasadach

Gus gluasad air ais, feumaidh tu an àithne a ruith air grunn chlàran, agus tha seo làn mhearachdan. Bidh sinn a’ coileanadh na h-obrach seo le làimh gus dèanamh cinnteach gu bheil an ID dreach ceart air a shònrachadh.

Tha sinn a’ gluasad a dh’ionnsaigh GitOps

Ar n-amas

Tha sinn airson a’ chairt a thilleadh gu stòr an tagraidh a bhios e a’ cleachdadh.

Bidh an sruth-obrach mar an ceudna ri leasachadh. Mar eisimpleir, nuair a thèid meur a phutadh gu maighstireachd, thèid an cleachdadh a chuir air adhart gu fèin-ghluasadach. Is e sin am prìomh eadar-dhealachadh eadar an dòigh-obrach seo agus an sruth-obrach gnàthach bidh a h-uile càil air a riaghladh ann an git (an tagradh fhèin agus an dòigh anns a bheil e air a chleachdadh ann an Kubernetes).

Tha grunn bhuannachdan ann:

  • Mòran nas soilleire airson an leasaiche. Tha e nas fhasa ionnsachadh mar a chuireas tu atharrachaidhean an sàs ann an clàr ionadail.
  • Faodar mìneachadh cleachdadh seirbheis a shònrachadh an aon àite ris a’ chòd seirbheis.
  • A 'riaghladh toirt air falbh clàran coitcheann. Bidh an sgaoileadh Helm fhèin aig an t-seirbheis. Leigidh seo leat cearcall-beatha an tagraidh a riaghladh (roll air ais, ùrachadh) aig an ìre as lugha, gus nach toir e buaidh air seirbheisean eile.
  • Buannachdan git airson stiùireadh clàir: cuir às do atharrachaidhean, log sgrùdaidh, msaa. Bidh an cleachdadh a’ tòiseachadh gu fèin-ghluasadach.
  • Is dòcha gum beachdaich thu air do shruth-obrach leasachaidh a leasachadh le innealan mar Sgeadaich, leis an urrainn do luchd-leasachaidh atharrachaidhean a dhearbhadh ann an co-theacsa faisg air cinneasachadh.

Imrich dà-cheum

Tha an luchd-leasachaidh againn air a bhith a’ cleachdadh an t-sruth-obrach seo airson 2 bhliadhna a-nis, agus mar sin tha sinn airson gum bi an imrich cho gun phian sa ghabhas. Mar sin, chuir sinn romhainn ceum eadar-mheadhanach a chuir ris an t-slighe chun an amas.
Tha a 'chiad ìre a tha sìmplidh:

  • Bidh sinn a’ cumail structar coltach ris airson cleachdadh thagraidhean a stèidheachadh, ach ann an aon nì ris an canar DailymotionRelease.

apiVersion: "v1"
kind: "DailymotionRelease"
metadata:
  name: "app1.ns1"
  environment: "dev"
  branch: "mybranch"
spec:
  slack_channel: "#admin"
  chart_name: "app1"
  scaling:
    - context: "dev-us-central1-0"
      replicas:
        - name: "hermes"
          count: 2
    - context: "dev-europe-west1-0"
      replicas:
        - name: "app1-deploy"
          count: 2
  secrets:
    - secret_id: "app1"
      contexts:
        - name: "default"
          vaultPath: "/kv/dev/ns1/app1/test"
          vaultKey: "password"
        - name: "dev-europe-west1-0"
          vaultPath: "/kv/dev/ns1/app1/test"
          vaultKey: "password"

  • Sgaoileadh 1 airson gach tagradh (às aonais clàran coitcheann).
  • Clàran ann an stòr git an tagraidh.

Tha sinn air bruidhinn ris an luchd-leasachaidh air fad, agus mar sin tha am pròiseas imrich air tòiseachadh mar-thà. Tha a 'chiad ìre fhathast fo smachd a' cleachdadh an àrd-ùrlar CI. Sgrìobhidh mi post eile a dh’ aithghearr mu ìre a dhà: mar a ghluais sinn gu sruth-obrach GitOps le sruthadh. Innsidh mi dhut mar a shuidhich sinn a h-uile càil agus dè na duilgheadasan a choinnich sinn (ioma stòran, dìomhaireachdan, msaa). Lean na naidheachdan.

An seo tha sinn air feuchainn ri cunntas a thoirt air an adhartas a rinn sinn ann an sruth-obrach cleachdadh thagraidhean thairis air na bliadhnaichean a dh’ fhalbh, a lean gu smuaintean mu dhòigh-obrach GitOps. Chan eil sinn fhathast air an amas a ruighinn agus bheir sinn cunntas air na toraidhean, ach a-nis tha sinn cinnteach gun do rinn sinn an rud ceart nuair a chuir sinn romhainn a h-uile càil a dhèanamh nas sìmplidhe agus a thoirt nas fhaisge air cleachdaidhean luchd-leasachaidh.

Source: www.habr.com

Cuir beachd ann