Mametraka fampiharana amin'ny Cluster Kubernetes marobe miaraka amin'ny Helm

Ahoana ny fampiasan'i Dailymotion Kubernetes: Fametrahana fampiharana

Izahay ato amin'ny Dailymotion dia nanomboka nampiasa Kubernetes tamin'ny famokarana 3 taona lasa izay. Mahafinaritra anefa ny manaparitaka fampiharana amin'ny cluster maro, ka tato anatin'ny taona vitsivitsy izay dia niezaka nanatsara ny fitaovanay sy ny lalan'ny asa izahay.

Taiza no niatombohany

Ho hitantsika eto ny fomba ametrahanay ny rindranasa amin'ny vondron'olona Kubernetes maro manerana izao tontolo izao.

Mampiasa zavatra Kubernetes maromaro indray mandeha izahay fiarovan-doha, ary ny tabilao rehetra dia voatahiry ao anaty tahiry git iray. Mba hametrahana stack fampiharana feno avy amin'ny serivisy maromaro dia mampiasa ilay antsoina hoe tabilao famintinana. Amin'ny ankapobeny dia tabilao manambara fiankinan-doha ity ary ahafahanao manangana ny API sy ny serivisy amin'ny baiko iray.

Nanoratra script Python kely teo an-tampon'ny Helm ihany koa izahay mba hanao fisavana, hamorona tabilao, hampiditra tsiambaratelo ary hametraka fampiharana. Ireo asa rehetra ireo dia atao amin'ny sehatra CI afovoany amin'ny fampiasana sary docker.

Andeha hojerentsika ny teboka.

Fanamarihana. Rehefa mamaky ity ianao dia efa nambara ny kandidΓ  famoahana voalohany ho an'ny Helm 3. Ny dikan-teny fototra dia misy fanatsarana maro be mba hamahana ny olana sasany sendra anay taloha.

Workflow fampandrosoana tabilao

Mampiasa sampana izahay amin'ny fampiharana, ary nanapa-kevitra ny hampihatra ny fomba fiasa mitovy amin'ny tabilao.

  • SAMPANA serasera ampiasaina hamoronana tabilao izay hotsapaina amin'ny vondrona fampandrosoana.
  • Rehefa misy fangatahana misintona atolotra tompony, izy ireo dia voamarina ao amin'ny fandaharana.
  • Farany, mamorona fangatahana misintona izahay mba hanolorany ny fanovana amin'ny sampana famokarana ary ampiharo amin'ny famokarana.

Ny tontolo iainana tsirairay dia manana tahiry manokana manokana izay mitahiry ny saritsika, ary ampiasainay Chartmuseum miaraka amin'ny API tena ilaina. Amin'izany fomba izany dia miantoka ny fitokana-monina henjana eo amin'ny tontolo iainana sy ny fitiliana ny sariitatra tena izy alohan'ny hampiasana azy ireo amin'ny famokarana.

Fametrahana tabilao amin'ny tontolo samihafa

Tsara ny manamarika fa rehefa manosika sampana iray mankany amin'ny dev ny mpamorona, dia atosiky ho azy any amin'ny dev Chartmuseum ny dikan-tsarin'izy ireo. Noho izany, ny mpamorona rehetra dia mampiasa tahiry dev mitovy, ary mila mamaritra tsara ny dikan-teninao amin'ny tabilao ianao mba tsy hampiasana tsy nahy ny fiovan'ny olon-kafa.

Ankoatr'izay, ny script Python kelinay dia manamarina ny zavatra Kubernetes amin'ny fanondroana ny Kubernetes OpenAPI ampiasaina Kubeval, alohan'ny hamoahana azy ireo ao amin'ny Chartmusem.

Famaritana ankapoben'ny fizotran'ny fampivoarana tabilao

  1. Fametrahana ny asan'ny fantsona araka ny fepetra gazr.io ho an'ny fanaraha-maso ny kalitao (lint, unit-test).
  2. Manosika sary docker miaraka amin'ny fitaovana Python izay mametraka ny fampiharanay.
  3. Fametrahana ny tontolo iainana amin'ny anaran'ny sampana.
  4. Fanamarinana ny rakitra yaml Kubernetes amin'ny fampiasana Kubeval.
  5. Ampitomboy ho azy ny dikan-tsarimihetsika sy ny sarin'ny ray aman-dreniny (sarintany miankina amin'ny tabilao ovaina).
  6. Fandefasana tabilao any amin'ny Chartmuseum izay mifanaraka amin'ny tontolo iainany

Mitantana ny fahasamihafana amin'ny cluster

Federasionan'ny Clusters

Nisy fotoana nampiasanay federasionan'ny cluster Kubernetes, izay ahafahana manambara ny zavatra Kubernetes avy amin'ny teboka API tokana. Nipoitra anefa ny olana. Ohatra, ny zavatra Kubernetes sasany dia tsy azo noforonina tao amin'ny federasiona faran'ny federasiona, ka sarotra ny mitazona zavatra federasiona sy zavatra hafa ho an'ny cluster tsirairay.

Mba hamahana ny olana dia nanomboka nitantana tsy miankina ireo cluster, izay nanamora ny fizotran'ny dingana (nampiasa ny federasiona voalohany izahay; mety hisy fiovana amin'ny faharoa).

Sehatra mizara Geo

Miparitaka manerana ny faritra 6 ny sehatra misy anay amin'izao fotoana izao - 3 eo an-toerana ary 3 ao anaty rahona.


Distributed Deployment

Global Helm soatoavina

Ny soatoavin'ny Helm manerantany 4 dia ahafahanao mamantatra ny fahasamihafana eo amin'ny cluster. Ny sarintsika rehetra dia manana sanda ambany indrindra.

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

Soatoavina maneran-tany

Ireo soatoavina ireo dia manampy amin'ny famaritana ny contexte ho an'ny fampiharana ataontsika ary ampiasaina amin'ny tanjona isan-karazany: fanaraha-maso, fanaraha-maso, logging, fanaovana antso ivelany, scaling, sns.

  • "cloud": Manana sehatra Kubernetes hybrid izahay. Ohatra, ny API-nay dia apetraka any amin'ny faritra GCP sy ao amin'ny ivon-tsarimihetsika.
  • "env": Mety hiova ny soatoavina sasany ho an'ny tontolo tsy famokarana. Ohatra, ny famaritana ny loharanon-karena sy ny fanamafisam-peo.
  • "faritra": Ity fampahalalana ity dia manampy amin'ny famaritana ny toerana misy ny cluster ary azo ampiasaina hamaritana ireo teboka akaiky ho an'ny serivisy ivelany.
  • "clusterName": raha te hamaritra sanda ho an'ny cluster tsirairay isika.

Ity misy ohatra manokana:

{{/* 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 -}}

Ohatra modely helm

Ity lojika ity dia voafaritra amin'ny maodely mpanampy mba hisorohana ny fikorontanan'ny Kubernetes YAML.

Fanambarana fampiharana

Mifototra amin'ny rakitra YAML maro ny fitaovana fametrahanay. Ity ambany ity ny ohatra iray amin'ny fomba fanambarantsika serivisy sy ny topologie scaling (isan'ny kopia) ao anaty cluster.

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

Famaritana ny serivisy

Ity dia rindran-damina amin'ny dingana rehetra izay mamaritra ny fizotran'ny fametrahanay. Ny dingana farany dia mametraka ny fampiharana amin'ny vondron'ny mpiasa marobe miaraka.


Jenkins Deployment Steps

Ahoana ny amin'ny tsiambaratelo?

Mikasika ny fiarovana, dia manara-maso ny tsiambaratelo rehetra avy amin'ny toerana samihafa izahay ary mitahiry azy ireo ao anaty vata tokana andohalambony eny any Paris.

Ny fitaovan'ny fanapariahanay dia maka ny soatoavina miafina ao amin'ny Vault ary rehefa tonga ny fotoana fametrahana azy dia ampidiro ao amin'ny Helm.

Mba hanaovana izany, dia namaritra sari-tany eo anelanelan'ny tsiambaratelo ao amin'ny Vault sy ny tsiambaratelo ilain'ny fampiharanay izahay:

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"

  • Nofaritanay ny fitsipika ankapobeny harahina rehefa mirakitra tsiambaratelo ao amin'ny Vault.
  • Raha mihatra ny tsiambaratelo amin'ny contexte na cluster manokana, mila manampy fidirana manokana ianao. (Eto ny context cluster1 dia manana ny sandany manokana ho an'ny miafina stack-app1-password).
  • Raha tsy izany dia ampiasaina ny sanda amin'ny default.
  • Ho an'ny singa tsirairay ao amin'ity lisitra ity Kubernetes secret ampidirina mpivady sanda manan-danja. Noho izany, ny mΓ΄dely miafina ao amin'ny tabilaontsika dia tena tsotra.

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

Olana sy fetra

Miasa miaraka amin'ny repository maro

Ankehitriny dia manasaraka ny fivoaran'ny tabilao sy ny fampiharana. Midika izany fa tsy maintsy miasa ao anaty tahiry git roa ny mpamorona: ny iray ho an'ny fampiharana, ary ny iray hamaritana ny fametrahana azy amin'ny Kubernetes. Ny 2 git repository dia midika hoe 2 workflows, ary mora ho an'ny newbie ny misavoritaka.

Sarotra ny mitantana tabilao ankapobeny

Araka ny efa voalazanay, dia tena ilaina ny tabilao gΓ©nΓ©rique amin'ny famantarana ny fiankinan-doha sy ny fametrahana haingana fampiharana maro. Fa ampiasainay --reuse-valuesmba tsy handalo ny soatoavina rehetra isaky ny mametraka fampiharana izay ao anatin'ity tabilao ankapobeny ity.

Amin'ny fizotran'ny fandefasana mitohy dia manana soatoavina roa miova tsy tapaka isika: ny isan'ny kopia sy ny tag sary (dikan-teny). Ny sanda hafa, miorina kokoa dia ovaina amin'ny tanana, ary sarotra be izany. Fanampin'izany, ny fahadisoana iray amin'ny fametrahana tabilao ankapobeny dia mety hitarika ho amin'ny tsy fahombiazana lehibe, araka ny efa hitantsika tamin'ny traikefantsika manokana.

Fanavaozana rakitra maromaro maromaro

Rehefa manampy fampiharana vaovao ny developer dia tsy maintsy manova rakitra maromaro izy: ny fanambarana fampiharana, ny lisitry ny tsiambaratelo, manampy ny fampiharana ho fiankinan-doha raha ampidirina ao amin'ny tabilao ankapobeny.

Miitatra loatra ny fahazoan-dΓ lana Jenkins ao amin'ny Vault

Ankehitriny dia manana iray isika AppRole, izay mamaky ny tsiambaratelo rehetra ao amin'ny Vault.

Tsy mandeha ho azy ny fizotry ny famerenana

Mba hamerenana indray dia mila mandefa ny baiko amin'ny cluster maromaro ianao, ary feno hadisoana izany. Manao an'io asa io izahay mba hahazoana antoka fa voatondro ny ID dikan-teny marina.

Mizotra mankany amin'ny GitOps izahay

Ny tanjonay

Te-hamerina ny tabilao amin'ny fitahirizana ny fampiharana apetrany izahay.

Ny fizotran'ny asa dia hitovy amin'ny fampandrosoana. Ohatra, rehefa voatosika ho tompon'andraikitra ny sampana iray, dia hivoaka ho azy ny fametrahana. Ny fahasamihafana lehibe eo amin'ity fomba fiasa ity sy ny fizotran'ny asa amin'izao fotoana izao dia izany ny zavatra rehetra dia ho hitantana ao amin'ny git (ny fampiharana sy ny fomba fametrahana azy ao amin'ny Kubernetes).

Misy tombony maromaro:

  • be mazava kokoa ho an'ny mpamorona. Mora kokoa ny mianatra mampihatra ny fanovana amin'ny tabilao eo an-toerana.
  • Ny famaritana ny fametrahana serivisy dia azo faritana toerana mitovy amin'ny kaody fanompoana.
  • Mitantana ny fanesorana ireo tabilao ankapobeny. Ny serivisy dia hanana ny famoahana Helm azy manokana. Izany dia ahafahanao mitantana ny fiainan'ny fampiharana (famerenana, fanavaozana) amin'ny ambaratonga kely indrindra, mba tsy hisy fiantraikany amin'ny serivisy hafa.
  • Ny tombony amin'ny git ho an'ny fitantanana tabilao: manafoana ny fanovana, diarin'ny fanaraha-maso, sns. Raha mila manafoana ny fanovana amin'ny tabilao ianao dia azonao atao izany amin'ny fampiasana git. Manomboka ho azy ny fametrahana.
  • Azonao atao ny mieritreritra ny hanatsara ny fizotran'ny asa fampandrosoana miaraka amin'ny fitaovana toy izany Skaffold, izay ahafahan'ny mpamorona manandrana fiovana amin'ny toe-javatra manakaiky ny famokarana.

Fifindra-monina dingana roa

Efa 2 taona izao no nampiasain'ny developer anay ity workflow ity, ka tianay ny tsy hanaintaina araka izay tratra ny fifindra-monina. Noho izany, nanapa-kevitra izahay fa hanampy dingana manelanelana amin'ny lalana mankany amin'ny tanjona.
Tsotra ny dingana voalohany:

  • Mitazona rafitra mitovy amin'izany izahay amin'ny fametrahana fametrahana fampiharana, fa amin'ny zavatra tokana antsoina hoe 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"

  • Famoahana 1 isaky ny fampiharana (tsy misy tabilao ankapobeny).
  • Sarintany ao amin'ny tahiry git an'ny fampiharana.

Efa niresaka tamin'ny mpamorona rehetra izahay, ka efa nanomboka ny fizotry ny fifindra-monina. Ny dingana voalohany dia mbola fehezina amin'ny fampiasana ny sehatra CI. Hanoratra lahatsoratra hafa aho tsy ho ela momba ny dingana faharoa: ny fomba nifindranay tany amin'ny workflow GitOps mikoriana. Holazaiko aminao ny fomba nametrahanay ny zava-drehetra sy ny fahasarotana sendra anay (repositories maro, tsiambaratelo, sns.). Araho ny vaovao.

Eto izahay dia nanandrana nanoritsoritra ny fivoaranay tamin'ny fizotran'ny fametrahana fampiharana nandritra ny taona lasa, izay nitarika eritreritra momba ny fomba fiasa GitOps. Tsy mbola tratra ny tanjona ary hanao tatitra momba ny vokatra, fa izao dia resy lahatra izahay fa nanao ny tsara rehefa nanapa-kevitra ny hanatsotra ny zava-drehetra sy hanakaiky kokoa ny fahazaran'ny mpamorona.

Source: www.habr.com

Add a comment