Dailymotion Kubernetes እንዴት እንደሚጠቀም፡ የመተግበሪያ ማሰማራት
እኛ በ Dailymotion ኩበርኔትስን በምርት ውስጥ መጠቀም የጀመርነው ከ3 ዓመታት በፊት ነው። ነገር ግን አፕሊኬሽኖችን በበርካታ ዘለላዎች ማሰማራት አስደሳች ነው፣ ስለዚህ ባለፉት ጥቂት አመታት መሳሪያዎቻችንን እና የስራ ፍሰቶቻችንን ለማሻሻል እየሞከርን ነበር።
የት ተጀመረ
አፕሊኬሽኖቻችንን በአለም ዙሪያ በበርካታ የኩበርኔትስ ስብስቦች ውስጥ እንዴት እንደምናሰማራ እዚህ እናቀርባለን።
ብዙ የኩበርኔትስ እቃዎችን በአንድ ጊዜ ለማሰማራት, እንጠቀማለን
እንዲሁም ቼኮችን ለመስራት፣ ገበታዎችን ለመፍጠር፣ ሚስጥሮችን ለመጨመር እና መተግበሪያዎችን ለማሰማራት ትንሽ የፓይዘን ስክሪፕት ፃፍን። እነዚህ ሁሉ ተግባራት የሚከናወኑት በማዕከላዊ CI መድረክ ላይ የዶክ ምስልን በመጠቀም ነው።
ወደ ነጥቡ እንግባ።
ማስታወሻ. ይህን በሚያነቡበት ጊዜ፣ ለ Helm 3 የመጀመሪያው የሚለቀቅ እጩ አስቀድሞ ታውቋል:: ዋናው ስሪት ከዚህ በፊት ያጋጠሙንን አንዳንድ ጉዳዮች ለመፍታት አጠቃላይ ማሻሻያዎችን ይዟል።
የገበታ ልማት የስራ ሂደት
ቅርንጫፍን ለትግበራዎች እንጠቀማለን, እና በገበታዎች ላይ ተመሳሳይ አቀራረብን ለመተግበር ወሰንን.
- ቅርንጫፍ dev በልማት ዘለላዎች ላይ የሚሞከሩ ገበታዎችን ለመፍጠር ይጠቅማል።
- የመሳብ ጥያቄ ሲቀርብ ባለቤት, በመድረክ ላይ ምልክት ይደረግባቸዋል.
- በመጨረሻም፣ ለውጦቹን በቅርንጫፉ ላይ ለማድረግ የመሳብ ጥያቄ እንፈጥራለን ምርት እና በምርት ላይ ይተግብሩ.
እያንዳንዱ አካባቢ የእኛን ገበታዎች የሚያከማችበት የራሱ የግል ማከማቻ አለው እና እንጠቀማለን።
በተለያዩ አካባቢዎች ውስጥ ያሉ የገበታ ማከማቻዎች
ገንቢዎች የዴቭ ቅርንጫፍን ሲገፉ የገበታቸው ስሪት በራስ-ሰር ወደ dev Chartmuseum እንደሚገፋ ልብ ሊባል ይገባል። ስለዚህ ሁሉም ገንቢዎች አንድ አይነት የዴቭ ማከማቻ ይጠቀማሉ፣ እና የሌላ ሰው ለውጦችን በአጋጣሚ ላለመጠቀም የገበታውን ስሪት በጥንቃቄ መግለጽ ያስፈልግዎታል።
ከዚህም በላይ የእኛ ትንሽ የፓይዘን ስክሪፕት የ Kubernetes ነገሮችን ከ Kubernetes OpenAPI መግለጫዎች ጋር በማነፃፀር ያረጋግጣል
የገበታ ልማት የስራ ሂደት አጠቃላይ መግለጫ
- በዝርዝሩ መሰረት የቧንቧ ስራዎችን ማዘጋጀት
gazr.io ለጥራት ቁጥጥር (ሊንት, ዩኒት-ሙከራ). - አፕሊኬሽኖቻችንን በሚያሰማሩ የፓይዘን መሳሪያዎች የዶክተር ምስልን በመግፋት ላይ።
- አካባቢን በቅርንጫፍ ስም ማዋቀር.
- Kubevalን በመጠቀም የKubernetes yaml ፋይሎችን በማረጋገጥ ላይ።
- የገበታውን ስሪት እና የወላጅ ገበታዎቹን (በገበታው ላይ በመቀየር ላይ የሚመረኮዙ ገበታዎች) በራስ-ሰር ይጨምሩ።
- ከአካባቢው ጋር የሚዛመድ ገበታ ወደ 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
የአገልግሎት ትርጉም
ይህ የእኛን የማሰማራት የስራ ሂደትን የሚገልጹት የሁሉም እርምጃዎች ዝርዝር ነው። የመጨረሻው ደረጃ መተግበሪያውን በአንድ ጊዜ ወደ ብዙ የሰራተኛ ስብስቦች ያሰፋል።
ስለ ምስጢሮችስ?
ደህንነትን በተመለከተ ሁሉንም ሚስጥሮች ከተለያዩ ቦታዎች እንከታተላለን እና በልዩ ማከማቻ ውስጥ እናከማቻቸዋለን
የእኛ የማሰማሪያ መሳሪያዎች ሚስጥራዊ እሴቶችን ከቮልት አውጥተው የማሰማራቱ ጊዜ ሲመጣ ወደ ሄልም ያስገባቸዋል።
ይህንን ለማድረግ በቮልት ውስጥ ባሉ ሚስጥሮች እና መተግበሪያዎቻችን በሚያስፈልጉት ሚስጥሮች መካከል ያለውን የካርታ ስራ ገለጽን፡-
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