መተግበሪያዎችን ወደ በርካታ የኩበርኔትስ ስብስቦች ከሄልም ጋር በማሰማራት ላይ

Dailymotion Kubernetes እንዴት እንደሚጠቀም፡ የመተግበሪያ ማሰማራት

እኛ በ Dailymotion ኩበርኔትስን በምርት ውስጥ መጠቀም የጀመርነው ከ3 ዓመታት በፊት ነው። ነገር ግን አፕሊኬሽኖችን በበርካታ ዘለላዎች ማሰማራት አስደሳች ነው፣ ስለዚህ ባለፉት ጥቂት አመታት መሳሪያዎቻችንን እና የስራ ፍሰቶቻችንን ለማሻሻል እየሞከርን ነበር።

የት ተጀመረ

አፕሊኬሽኖቻችንን በአለም ዙሪያ በበርካታ የኩበርኔትስ ስብስቦች ውስጥ እንዴት እንደምናሰማራ እዚህ እናቀርባለን።

ብዙ የኩበርኔትስ እቃዎችን በአንድ ጊዜ ለማሰማራት, እንጠቀማለን ሄልእና ሁሉም ገበታዎቻችን በአንድ git ማከማቻ ውስጥ ተከማችተዋል። ከበርካታ አገልግሎቶች የተሟላ የመተግበሪያ ቁልል ለማሰማራት፣ የማጠቃለያ ገበታ የሚባለውን እንጠቀማለን። በመሰረቱ ይህ ጥገኝነቶችን የሚገልጽ እና ኤፒአይን እና አገልግሎቶቹን በአንድ ትዕዛዝ ለማስጀመር የሚያስችል ገበታ ነው።

እንዲሁም ቼኮችን ለመስራት፣ ገበታዎችን ለመፍጠር፣ ሚስጥሮችን ለመጨመር እና መተግበሪያዎችን ለማሰማራት ትንሽ የፓይዘን ስክሪፕት ፃፍን። እነዚህ ሁሉ ተግባራት የሚከናወኑት በማዕከላዊ CI መድረክ ላይ የዶክ ምስልን በመጠቀም ነው።

ወደ ነጥቡ እንግባ።

ማስታወሻ. ይህን በሚያነቡበት ጊዜ፣ ለ Helm 3 የመጀመሪያው የሚለቀቅ እጩ አስቀድሞ ታውቋል:: ዋናው ስሪት ከዚህ በፊት ያጋጠሙንን አንዳንድ ጉዳዮች ለመፍታት አጠቃላይ ማሻሻያዎችን ይዟል።

የገበታ ልማት የስራ ሂደት

ቅርንጫፍን ለትግበራዎች እንጠቀማለን, እና በገበታዎች ላይ ተመሳሳይ አቀራረብን ለመተግበር ወሰንን.

  • ቅርንጫፍ dev በልማት ዘለላዎች ላይ የሚሞከሩ ገበታዎችን ለመፍጠር ይጠቅማል።
  • የመሳብ ጥያቄ ሲቀርብ ባለቤት, በመድረክ ላይ ምልክት ይደረግባቸዋል.
  • በመጨረሻም፣ ለውጦቹን በቅርንጫፉ ላይ ለማድረግ የመሳብ ጥያቄ እንፈጥራለን ምርት እና በምርት ላይ ይተግብሩ.

እያንዳንዱ አካባቢ የእኛን ገበታዎች የሚያከማችበት የራሱ የግል ማከማቻ አለው እና እንጠቀማለን። Chartmuseum በጣም ጠቃሚ ከሆኑ ኤፒአይዎች ጋር። በዚህ መንገድ በምርት ውስጥ ከመጠቀምዎ በፊት በአካባቢ እና በገሃዱ ዓለም የገበታ ሙከራ መካከል ጥብቅ መገለልን እናረጋግጣለን።

በተለያዩ አካባቢዎች ውስጥ ያሉ የገበታ ማከማቻዎች

ገንቢዎች የዴቭ ቅርንጫፍን ሲገፉ የገበታቸው ስሪት በራስ-ሰር ወደ dev Chartmuseum እንደሚገፋ ልብ ሊባል ይገባል። ስለዚህ ሁሉም ገንቢዎች አንድ አይነት የዴቭ ማከማቻ ይጠቀማሉ፣ እና የሌላ ሰው ለውጦችን በአጋጣሚ ላለመጠቀም የገበታውን ስሪት በጥንቃቄ መግለጽ ያስፈልግዎታል።

ከዚህም በላይ የእኛ ትንሽ የፓይዘን ስክሪፕት የ Kubernetes ነገሮችን ከ Kubernetes OpenAPI መግለጫዎች ጋር በማነፃፀር ያረጋግጣል ኩቤቫልበ Chartmusem ላይ ከማተምዎ በፊት።

የገበታ ልማት የስራ ሂደት አጠቃላይ መግለጫ

  1. በዝርዝሩ መሰረት የቧንቧ ስራዎችን ማዘጋጀት gazr.io ለጥራት ቁጥጥር (ሊንት, ዩኒት-ሙከራ).
  2. አፕሊኬሽኖቻችንን በሚያሰማሩ የፓይዘን መሳሪያዎች የዶክተር ምስልን በመግፋት ላይ።
  3. አካባቢን በቅርንጫፍ ስም ማዋቀር.
  4. Kubevalን በመጠቀም የKubernetes yaml ፋይሎችን በማረጋገጥ ላይ።
  5. የገበታውን ስሪት እና የወላጅ ገበታዎቹን (በገበታው ላይ በመቀየር ላይ የሚመረኮዙ ገበታዎች) በራስ-ሰር ይጨምሩ።
  6. ከአካባቢው ጋር የሚዛመድ ገበታ ወደ Chartmuseum ማስገባት

በክላስተር ውስጥ ያሉ ልዩነቶችን ማስተዳደር

የክላስተር ፌዴሬሽን

የተጠቀምንበት ጊዜ ነበር። የኩበርኔትስ ስብስቦች ፌዴሬሽን፣ የኩበርኔትስ ዕቃዎች ከአንድ ኤፒአይ የመጨረሻ ነጥብ ሊታወጁ የሚችሉበት። ግን ችግሮች ተፈጠሩ. ለምሳሌ, አንዳንድ የኩበርኔትስ እቃዎች በፌዴሬሽኑ የመጨረሻ ነጥብ ውስጥ ሊፈጠሩ አልቻሉም, ይህም የፌዴሬሽኑ እቃዎችን እና ሌሎች ነገሮችን ለግለሰብ ስብስቦች ለማቆየት አስቸጋሪ ያደርገዋል.

ችግሩን ለመፍታት ክላስተሮችን በተናጥል ማስተዳደር ጀመርን ፣ ይህም ሂደቱን በእጅጉ አቅልሎታል (የመጀመሪያውን የፌዴሬሽን ስሪት ተጠቀምን ፣ በሁለተኛው ውስጥ አንድ ነገር ተለውጦ ሊሆን ይችላል)።

ጂኦ-የተከፋፈለ መድረክ

የእኛ መድረክ በአሁኑ ጊዜ በ6 ክልሎች ተሰራጭቷል - 3 በአካባቢው እና 3 በደመና ውስጥ።


የተከፋፈለ ማሰማራት

ግሎባል Helm እሴቶች

4 ግሎባል Helm እሴቶች በክላስተር መካከል ያለውን ልዩነት ለመለየት ያስችሉዎታል። ሁሉም ገበታዎቻችን ነባሪ ዝቅተኛ እሴቶች አሏቸው።

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

ዓለም አቀፍ እሴቶች

እነዚህ እሴቶች የመተግበሪያዎቻችንን አውድ ለመግለፅ ያግዛሉ እና ለተለያዩ ዓላማዎች ጥቅም ላይ ይውላሉ፡ ክትትል፣ ፍለጋ፣ ምዝግብ ማስታወሻ፣ የውጪ ጥሪዎችን ማድረግ፣ ልኬቶችን፣ ወዘተ.

  • "ደመና": ድብልቅ የኩበርኔትስ መድረክ አለን። ለምሳሌ፣ የእኛ ኤፒአይ በጂሲፒ ዞኖች እና በመረጃ ማዕከላችን ውስጥ ተዘርግቷል።
  • "env"፡- ምርት ላልሆኑ አካባቢዎች አንዳንድ እሴቶች ሊለወጡ ይችላሉ። ለምሳሌ የመርጃ ፍቺዎች እና አውቶማቲክ አወቃቀሮች።
  • "ክልል"፡ ይህ መረጃ የክላስተርን ቦታ ለማወቅ ይረዳል እና በአቅራቢያው ያሉ ለውጭ አገልግሎቶች የመጨረሻ ነጥቦችን ለመወሰን ሊያገለግል ይችላል።
  • "ክላስተር ስም"፡ ከሆነ እና መቼ ለግለሰብ ዘለላ እሴት መግለጽ ስንፈልግ።

አንድ የተወሰነ ምሳሌ ይኸውና፡-

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

Helm አብነት ምሳሌ

ይህ አመክንዮ በኩበርኔትስ YAML መጨናነቅን ለማስወገድ በረዳት አብነት ውስጥ ይገለጻል።

የመተግበሪያ ማስታወቂያ

የእኛ የማሰማሪያ መሳሪያዎች በበርካታ YAML ፋይሎች ላይ የተመሰረቱ ናቸው። ከዚህ በታች አንድን አገልግሎት እንዴት እንደምናውጅ የሚያሳይ ምሳሌ እና ቶፖሎጂን (የቅጂዎች ብዛት) በክላስተር ውስጥ ነው።

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

የአገልግሎት ትርጉም

ይህ የእኛን የማሰማራት የስራ ሂደትን የሚገልጹት የሁሉም እርምጃዎች ዝርዝር ነው። የመጨረሻው ደረጃ መተግበሪያውን በአንድ ጊዜ ወደ ብዙ የሰራተኛ ስብስቦች ያሰፋል።


የጄንኪንስ ማሰማራት ደረጃዎች

ስለ ምስጢሮችስ?

ደህንነትን በተመለከተ ሁሉንም ሚስጥሮች ከተለያዩ ቦታዎች እንከታተላለን እና በልዩ ማከማቻ ውስጥ እናከማቻቸዋለን Vault በፓሪስ.

የእኛ የማሰማሪያ መሳሪያዎች ሚስጥራዊ እሴቶችን ከቮልት አውጥተው የማሰማራቱ ጊዜ ሲመጣ ወደ ሄልም ያስገባቸዋል።

ይህንን ለማድረግ በቮልት ውስጥ ባሉ ሚስጥሮች እና መተግበሪያዎቻችን በሚያስፈልጉት ሚስጥሮች መካከል ያለውን የካርታ ስራ ገለጽን፡-

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"

  • በቮልት ውስጥ ሚስጥሮችን በሚቀዳበት ጊዜ መከተል ያለብንን አጠቃላይ ህጎች ገልፀናል።
  • ምስጢሩ የሚሠራ ከሆነ ወደ አንድ የተወሰነ አውድ ወይም ዘለላ, የተወሰነ ግቤት ማከል ያስፈልግዎታል. (እዚህ ላይ የአውድ ክላስተር1 ለሚስጥር ቁልል-መተግበሪያ1-ይለፍ ቃል የራሱ ዋጋ አለው።)
  • አለበለዚያ እሴቱ ጥቅም ላይ ይውላል ነባሪ.
  • በዚህ ዝርዝር ውስጥ ላለው እያንዳንዱ ንጥል በ የኩበርኔትስ ምስጢር የቁልፍ-እሴት ጥንድ ገብቷል. ስለዚህ, በገበታዎቻችን ውስጥ ያለው ሚስጥራዊ አብነት በጣም ቀላል ነው.

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

ችግሮች እና ገደቦች

ከበርካታ ማከማቻዎች ጋር በመስራት ላይ

አሁን የገበታዎችን እና የመተግበሪያዎችን እድገት እንለያያለን። ይህ ማለት ገንቢዎች በሁለት git ማከማቻዎች ውስጥ መሥራት አለባቸው-አንዱ ለመተግበሪያው እና አንድ ወደ Kubernetes መሰማራቱን የሚገልጽ ነው። 2 git repositories ማለት 2 የስራ ፍሰቶች ማለት ነው፣ እና ለአዲስ ሰው ግራ መጋባት ቀላል ነው።

አጠቃላይ ገበታዎችን ማስተዳደር ጣጣ ነው።

ቀደም ብለን እንደተናገርነው፣ አጠቃላይ ገበታዎች ጥገኞችን ለመለየት እና ብዙ መተግበሪያዎችን በፍጥነት ለማሰማራት በጣም ጠቃሚ ናቸው። ግን እንጠቀማለን --reuse-valuesየዚህ አጠቃላይ ገበታ አካል የሆነ አፕሊኬሽን ባሰማራን ቁጥር ሁሉንም እሴቶች ላለማለፍ።

ቀጣይነት ባለው የማድረስ የስራ ሂደት ውስጥ፣ በመደበኛነት የሚለዋወጡ ሁለት እሴቶች ብቻ አሉን-የቅጂዎች ብዛት እና የምስል መለያ (ስሪት)። ሌላ ፣ የበለጠ የተረጋጋ እሴቶች በእጅ ተለውጠዋል ፣ እና ይህ በጣም ከባድ ነው። ከዚህም በላይ፣ አጠቃላይ ቻርትን በመዘርጋት አንድ ስህተት ወደ ከባድ ውድቀቶች ሊመራ ይችላል፣ ከራሳችን ተሞክሮ እንደተመለከትነው።

በርካታ የውቅረት ፋይሎችን በማዘመን ላይ

አንድ ገንቢ አዲስ አፕሊኬሽን ሲጨምር ብዙ ፋይሎችን መቀየር ይኖርበታል፡ የመተግበሪያውን መግለጫ፣ የምስጢር ዝርዝር፣ በአጠቃላይ ቻርት ውስጥ ከተካተተ እንደ ጥገኝነት አፕሊኬሽኑን መጨመር።

የጄንኪንስ ፈቃዶች በቮልት ውስጥ በጣም ተራዝመዋል

አሁን አንድ አለን አፕሮልከቮልት ሁሉንም ሚስጥሮች የሚያነብ.

የመመለሻ ሂደት በራስ ሰር አይደለም።

ወደ ኋላ ለመመለስ ትዕዛዙን በበርካታ ዘለላዎች ላይ ማስኬድ ያስፈልግዎታል፣ እና ይሄ በስህተቶች የተሞላ ነው። ትክክለኛው የስሪት መታወቂያ መገለጹን ለማረጋገጥ ይህንን ክዋኔ በእጅ እንሰራለን።

ወደ GitOps እየተጓዝን ነው።

ግባችን

ሰንጠረዡን ወደሚያሰማራው መተግበሪያ ማከማቻ መመለስ እንፈልጋለን።

የስራ ሂደቱ ከልማት ጋር ተመሳሳይ ይሆናል. ለምሳሌ፣ አንድ ቅርንጫፍ ወደ ጌታው ሲገፋ፣ ማሰማራቱ በራስ-ሰር ይነሳል። በዚህ አቀራረብ እና አሁን ባለው የስራ ሂደት መካከል ያለው ዋነኛው ልዩነት ይህ ይሆናል ሁሉም ነገር በ git ውስጥ ይካሄዳል (መተግበሪያው ራሱ እና በኩበርኔትስ ውስጥ የተዘረጋበት መንገድ).

በርካታ ጥቅሞች አሉት:

  • ብዙ የበለጠ ግልጽ ለገንቢው. በአካባቢ ገበታ ላይ ለውጦችን እንዴት እንደሚተገብሩ መማር ቀላል ነው።
  • የአገልግሎት አሰጣጡ ፍቺ ሊገለጽ ይችላል። ከኮዱ ጋር ተመሳሳይ ቦታ አገልግሎት።
  • አጠቃላይ ገበታዎችን ማስወገድን ማስተዳደር. አገልግሎቱ የራሱ የሄልም ልቀት ይኖረዋል። ይህ በሌሎች አገልግሎቶች ላይ ተጽእኖ እንዳያሳድር የመተግበሪያውን የህይወት ዑደት (የመመለሻ, ማሻሻያ) በትንሹ ደረጃ እንዲቆጣጠሩ ያስችልዎታል.
  • የ git ጥቅሞች ለገበታ አስተዳደር፡ለውጦችን መቀልበስ፣የኦዲት መዝገብ፣ወዘተ ማሰማራቱ በራስ-ሰር ይጀምራል።
  • በመሳሰሉት መሳሪያዎች የእድገትዎን የስራ ሂደት ማሻሻል ሊያስቡበት ይችላሉ። ስካፎልድ, በየትኛው ገንቢዎች ወደ ምርት ቅርብ በሆነ አውድ ውስጥ ለውጦችን መሞከር ይችላሉ።

ባለ ሁለት ደረጃ ፍልሰት

የእኛ ገንቢዎች ይህንን የስራ ሂደት ለ2 ዓመታት ሲጠቀሙ ቆይተዋል፣ ስለዚህ ስደት በተቻለ መጠን ህመም አልባ እንዲሆን እንፈልጋለን። ስለዚህ, ወደ ግብ በሚወስደው መንገድ ላይ መካከለኛ ደረጃ ለመጨመር ወስነናል.
የመጀመሪያው ደረጃ ቀላል ነው:

  • የመተግበሪያ ማሰማራትን ለማቀናበር ተመሳሳይ መዋቅር እንይዛለን፣ ነገር ግን 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"

  • በአንድ መተግበሪያ 1 ልቀት (ያለ አጠቃላይ ገበታዎች)።
  • በመተግበሪያው git ማከማቻ ውስጥ ያሉ ገበታዎች።

ሁሉንም ገንቢዎች አነጋግረናል፣ ስለዚህ የፍልሰት ሂደቱ አስቀድሞ ተጀምሯል። የመጀመሪያው ደረጃ አሁንም የ CI መድረክን በመጠቀም ቁጥጥር ይደረግበታል. ስለ ምዕራፍ ሁለት በቅርቡ ሌላ ልጥፍ እጽፋለሁ፡ ወደ GitOps የስራ ፍሰት እንዴት እንደሄድን የማያቋርጥ. ሁሉንም ነገር እንዴት እንዳዘጋጀን እና ምን ችግሮች እንዳጋጠሙን እነግርዎታለሁ (በርካታ ማከማቻዎች ፣ ምስጢሮች ፣ ወዘተ)። ዜናውን ተከታተሉ።

እዚህ ላለፉት ዓመታት በማመልከቻው የማሰማራት የስራ ሂደት ውስጥ ያለንን እድገት ለመግለጽ ሞክረናል፣ ይህም ስለ GitOps አቀራረብ ሀሳብ አመጣ። እስካሁን ግቡ ላይ አልደረስንም እና በውጤቶቹ ላይ ሪፖርት እናደርጋለን, አሁን ግን ሁሉንም ነገር ለማቅለል እና ወደ ገንቢዎች ልምዶች ለመቅረብ ስንወስን ትክክለኛውን ነገር እንዳደረግን እርግጠኞች ነን.

ምንጭ: hab.com

አስተያየት ያክሉ