ααααααα Dailymotion ααααΎ Kubernetes: ααΆαααΆααα±ααααααΎααααΆαααααααα·ααΈ
ααΎααα Dailymotion ααΆαα αΆααααααΎαααααΎααααΆαα Kubernetes αα αααα»αααα·αααααααΆαααΈ 3 ααααΆααα»αα ααα»ααααααΆαααΆαααααααΆααααααα·ααΈαα ααΌααΆααα αααααααΆα αααΎαααΊααΆαααΆαααΈαααΆα ααΌα αααααααα»αααααααααα»ααααΆαααααΆαα α»ααααααααα ααΎαααΆαααααΆααΆααααααα’α§ααααα αα·αααααΎαααΆαααΆαααΆαααααααΎαα
ααΎααΆα αΆααααααΎααα α―ααΆ
αα ααΈααα ααΎαααΉααααααΆααα’αααΈαααααααααΎαααΆααα±ααααααΎααααΆαααααααα·ααΈααααααΎααα ααΎα ααααα Kubernetes ααΆα αααΎααα αα»ααα·ααα·αααααα
ααΎααααΈααΆαααααααΆαααααα» Kubernetes α
αααΎααααα»αααααααα½α ααΎαααααΎ
ααΎαααααΆααααααα’αααα Python ααΌα αα½ααα ααΈααΎ Helm ααΎααααΈααααΎααΆααααα½ααα·αα·ααα αααααΎαααααΌαααΆα ααααααα’αΆααααααΆαα αα·αααΆαααααααΆααααααα·ααΈα αα·α αα ααΆαααΆααα’αααααααααΌαααΆαα’αα»αααααα ααΎαααα·ααΆ CI αααααΆααααααααΎααΌαααΆα docker α
α αΌαααΎαααΆααααα ααα»α α
α αααΆαα ααΌα αααα’αααααΆαα’αΆαααα αααααααα ααααααΌααααααΆαα Helm 3 ααααΌαααΆααααααΆααα½α α αΎαα ααααα ααααααΆαααΆααααααα’ααΆααααΌα ααΎααααΈαααααααΆααααα αΆαα½αα ααα½ααααααΎαααΆααα½ααααααααΆααααααααααα
ααααΎαααΆαα’αα·ααααααααααΌαααΆα
ααΎαααααΎααΆααααα αααααααΆαααααααα·ααΈ α αΎαααΎαααΆααααααα α α·αααα’αα»αααααα·ααΈααΆαααααααΌα ααααΆαα ααΉαααΆααΆαα
- ααΆααΆ dev ααααΎααΎααααΈαααααΎαααααΌαααΆααααααΉαααααΌαααΆαααΆαααααααΎαααα»αα’αα·ααααααα
- αα ααααααααααΎααΆαααααΌαααΆαααΆααααΌα αααα½αααααααΌαααΆααααα½ααα·αα·ααααα αααα»αααααΆααααΆαα
- ααΆα α»αααααα ααΎααααααΎαααααΎαααΆαααΎααααΈα’αα»ααααααΆαααααΆααααααΌααα ααΆααΆ ααα·ααα αα·αα’αα»αααααα½αααΆαααα»αααα·αααααα
ααα·ααΆααΆαααΈαα½ααααΆαααααΆααα―αααααααΆαααααα½αααααααΆ ααααααααΆαα»αααΆααΆαααααααΎα α αΎαααΎαααααΎααααΆαα
ααααΆααααααΌαααΆααα αααα»αααα·ααΆααΆαααααααααααΆ
αα½αααααααααΆααααΆ αα ααααααα’αααα’αα·αααααααααα»αααΆααΆα’αα·αααααα ααααααααααΌαααΆααααααα½αααααααΌαααΆααα»ααααααααααααααααα·αα ααΆαα dev Chartmuseum α ααΌα αααα α’αααα’αα·ααααααααΆααα’ααααααΎααααΆαα dev ααΌα ααααΆ α αΎαα’αααααααΌααααααΆααααααααΆααΆαααααα’αααααααααα»ααααααααα ααΎααααΈαα»αα±ααααααΎααΆαααααΆααααααΌαααααααααΆααααΆαααααα αααααα
ααΎαααΈααααα
ααα ααααααΈα Python ααΌα
ααααααΎαααααΎα±ααααααα» Kubernetes ααΆααα»ααααΆααααααΆααααΉαααΆααααααΆαααααα Kubernetes OpenAPI αααααααΎ
ααΆααα·αααααΆααΌαα ααααααΎαααΆαα’αα·ααααααααΆααΆα
- ααΆααααα
αααΆαααΆααααααααΆαααααααααΆααααΆαα
gazr.io αααααΆααααΆααααα½ααα·αα·ααααα»αααΆα (lint, unit-test) α - ααΆααα»αααΌαααΆα docker ααΆαα½αα§ααααα Python αααααΆααα±ααααααΎααααΆαααααααα·ααΈααααααΎαα
- αααα αααα·ααααΆαααΆααααααααΆααΆα
- ααααΎα±ααααΆααα»ααααΆαα―αααΆα Kubernetes yaml αααααααΎ Kubeval α
- αααααΎαααααααααααΌαααΆα αα·αααααΌαααΆαααααααααΆαααααααααααααααα· (ααααΌαααΆααααα’αΆαααααααΎααααΌαααΆαααααααα»αααααΌαααΆαααααΆααααααΌα)α
- ααΆααααααΌαααΆααΆααα ααΆααααααΈα Chartmuseum αααααααΌαααΉαααα·ααΆααΆαααααααΆα
ααΆααααααααααααΆααα»αααααΆααΆααααα»α
αα αααααααα ααααα
ααΆαααααα½ααααααΎαααααΎ
ααΎααααΈαααααααΆααααα αΆ ααΎαααΆαα αΆααααααΎαααααααααααααα»ααααα―αααΆααα αααααααΎα’ααααααΎαααΆααααααΆαααΆαααΆαααα (ααΎαααΆαααααΎααααααΈαα½ααααα ααααα α’αααΈαα½αα’αΆα ααΉαααααΆααααααΌααα αααα»αααΈααΈα)α
αααα·ααΆα ααα αΆαααΌαα·ααΆααααα
αα αα α»ααααααβαααα·ααΆβααααβααΎαβααααΌαβααΆαβα ααα αΆαβααΌααΆαα 6 ααααα - 3 αααα»αβαααα»α αα·α 3 αααα»αβαααα
ααΆαααΆαααααααΆαα
ααα
αΆα
ααααα Global Helm
ααααα Helm αααα ααα½α 4 α’αα»ααααΆαα±ααα’ααααααααααΆααα»αααααΆαααΆαα αααααα ααααΌαααΆαααααααΎαααΆααα’ααααΆααααααα’αααααααΆααααΆαααΎαα
global:
cloud: True
env: staging
region: us-central1
clusterName: staging-us-central1
αααααααα
αααααααΆααααααα½ααααααααα·αααααααΆαααααααα·ααΈααααααΎα α αΎαααααΌαααΆαααααΎαααααΆαααααααααααααααα ααΆααααα½ααα·αα·ααα ααΆαααΆαααΆα ααΆααααααααΆ ααΆαα α ααΌαααααααΆααααα ααΆαααααΎααΆαααααααΆαααα
- "ααα"α ααΎαααΆααααα·ααΆ Kubernetes ααΌαααΆααα α§ααΆα ααα API ααααααΎαααααΌαααΆαααΆααα±ααααααΎααααΆαααα αααα»αααααα GCP αα·ααα αααα»αααααααααααα·ααααααααααααΎαα
- "env"α ααααααα½αα ααα½αα’αΆα ααααΆααααααΌααααααΆααααα·ααααΆαααααα·αααα·αα α§ααΆα ααα ααΆααααααααααΆα αα·αααΆαααααααα ααΆααααααααααααααααααααα·α
- "ααααα"α ααααααΆαααααα½ααααααααΈααΆααααα ααααα αα·αα’αΆα ααααΌαααΆαααααΎααΎααααΈαααααα ααα»α αααα αααα αα·ααααααΆααααααΆααααααΆααααα α
- "clusterName"α ααααα·αααΎ αα·ααα ααααααααΎαα αααααααααααααααααΆααα αααααααΈαα½ααα
αααααΆα§ααΆα αααααΆααααΆαααα½αα
{{/* 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 -}}
ααααΌααααΌαα½ααα»ααααα·ααΆα
αααααα·ααααΆαααααααΌαααΆαααααααα αααα»αααααΌαααα½αααΎααααΈαααααΆαααΆααααααΆα Kubernetes 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
αα·αααααααααΆαααα
αααααΊααΆαααααααααα αΆαααΆααα’ααααααααααααα αΌαααΆαααΆαααααΆαααΆαααααααΆαααααααΎαα ααα αΆαα α»ααααααααΆαααααααΆααααααα·ααΈαα αααα»αααααααα αααΎααααα»ααααααααΆαααααΆα
ααα αΆαααΆαααααααΆα Jenkins
α α»αα’αΆααααααΆαααα·α?
ααΆααααααΉααα»ααααα·ααΆα ααΎαααΆαααΆαα’αΆααααααΆααααΆααα’ααααΈααααααααααααααααΆ α αΎααααααΆαα»αααΆαα
αααα»ααα»ααααααα½αααα
α§αααααααΆαααααααΆαααααααΎαααΆαααααααααααααΆααααΈ Vault α αΎααα αααααααααααααΆααΆαααααααΆαααααα ααΌααααα αΌααα½αααΆαα αααα»α Helm α
ααΎααααΈααααΎααΌα αααα ααΎαααΆαααααααααααΈαααΆαα’αΆααααααΆαααα αααα»α 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"
- ααΎαβααΆαβαααααβα αααΆααβααΌαα βαααβααααΌαβα’αα»ααααβαα αααβαααααααΆβα’αΆααααααΆααβαα αααα»αβααααααβαααα
- ααααα·αααΎααΆααααααΆααααααΌαααΆαα’αα»αααα αα ααα·ααααΆααααΆαα α¬α αααααα’αααααααΌαααααααααΆαα»ααΆααααΆαααα½αα (αα ααΈααα context cluster1 ααΆααααααααααΆαααααα½ααααααΆαα secret stack-app1-password)α
- ααΎαα·αααΌα αααααααααααααααΌαααΆαααααΎ ααΆαααααΆαααΎα.
- αααααΆααααΆαα»ααΈαα½αααα αααα»ααααααΈααααα αααα»α α’αΆααααααΆαα Kubernetes ααΌαααααααααααΌαααΆααααα αΌαα ααΌα αααα ααααΌαααααΆαααα αααα»αααΆααΆαααααααΎαααΊααΆααααααΆααα
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 workflows α αΎαααΆααΆααααα½ααααααΆααα’αααααΎαα αΆααααααΎααααα ααααα
ααΆααααααααααααααΌαααΆαααΌαα ααΊααΆααΆααα·ααΆα
ααΌα
αααααΎαααΆααα·ααΆααα½α
ααα αΎα ααααΌαααΆαααΌαα
ααΆαααααααααααααΆααααΆαααααααΆααααΆααααααα’ααααααααΆαααΆαα’αΆααααα αα·αααΆααα±ααααααΎααααΆαααααααα·ααΈα
αααΎααααΆααα ααα ααα»ααααααΎαααααΎ --reuse-values
ααΎααααΈαααααΆαααΆαααααααΆαααααααααΆααα’αα ααΆααααααααααΎαααΆαααααααΆααααααα·ααΈαααααΆααααααα½αααααααΌαααΆαααΌαα
αααα
αα αααα»αααααΎαααΆαααααΆαα ααα αΆααααα ααΎαααΆααααααααααΈαααα»ααααααααααααΆααααααΌααααααΆααααΊα ααα½αααααΆαα αααα αα·αααααΆαααΌαααΆα (αααα)α αααααααα ααααααααααΆααααααααΆαααΆααα»αααααΌαααΆαααααΆααααααΌαααααα α αΎαααααα·αααΆαα·ααΆαααΆααα ααΎαααΈααααα ααα ααα α»ααα½ααααα»αααΆαααΆαααααααΆαααααΌαααΆαααΌαα α’αΆα ααΆαα±ααααΆαααΆααααΆαααααααααααα ααΌα αααααΎαααΆαααΎαααΈαααα·αααααααααΆααααααααΎαα
ααΆαααααΎαα αα α»ααααααααΆαα―αααΆαααααααα ααΆααααααααα αααΎαα
αα αααα’αααα’αα·αααααααααααααααααα·ααΈααααΈ ααΆααααααΌαααααΆααααααΌαα―αααΆαααΆα αααΎαα ααΆααααααΆααααααα·ααΈ αααααΈα’αΆααααααΆαα αααααααααααα·ααΈααΆααΆαααΉαααα’ααααααα·αααΎααΆααααΌαααΆααααα αΌααααα»αααΆααΆαααΌαα α
ααΆαα’αα»ααααΆααααα Jenkins ααααΌαααΆααααααΈαααααα αααα»α Vault
α₯α‘αΌααααααΎαααΆααα½αα
ααααΎαβααΆαβαααα‘ααβαα·αβαα·αβααααΌαβααΆαβαααααβαααααααα·βααα
ααΎααααΈβαααα‘ααβαα·α α’αααβααααΌαβαααβααΆαααβαααααΆβααΎβα αααααβααΆβα αααΎα α αΎαβααΆβααΆαβααα α»αα ααΎαα’αα»ααααααααα·ααααα·ααΆαααααααααααΎααααΈααΆααΆααΆααααααααΆααααααααααΉαααααΌαααααΌαααΆααααααΆααα
ααΎααααα»αααααααα ααΆαα GitOps
ααααα βααααβααΎα
ααΎαα αααααα‘ααααΆααΆααα ααααΆαααααααααα·ααΈαααααΆααΆαααααααΆαα
ααααΎαααΆαααΆαααΆαααΉαααΌα ααααΆααΉαααΆαα’αα·ααααααα α§ααΆα ααα αα ααααααααΆααΆαα½αααααΌαααΆααα»ααα αα ααΆαααΆαααααααΆαααΉαααααΌαααΆαααααααααααααααααααα·α ααΆααα»αααααΆααααΆαααααΆααα·ααΈααΆαααααααα αα·αααα αΌαααΆαααΆααα αα α»ααααααααΉααα ααΆαααα α’αααΈααααααααΆαααΉαααααΌαααΆαααααααααααα αααα»α git (αααααα·ααΈαααα½αααΆ αα·ααα·ααΈαααααΆααααΌαααΆαααΆαααααααΆααα αααα»α Kubernetes)α
ααΆαα’αααααααααααααΆα αααΎαα
- α αααΎα ααΆααααα αααΆαα αααααΆααα’αααα’αα·ααααααα ααΆααΆααααααΆααααα½ααααααΈααααα’αα»ααααααΆαααααΆααααααΌααα αααα»αααΆααΆαααΌαααααΆαα
- αα·αααααααααΆαααααΎααααΆααααααΆααααα’αΆα ααααΌαααΆααααααΆαα ααααααααΌα ααααΆααΉααααααΌα ααααΆααααα
- αααααααααααΆαααα ααααΌαααααΌαααΆαααΌαα . ααααΆαααααααααΉαααΆαααΆαα ααααααΆα Helm ααααΆαααααα½αα ααΆβααΉαβα’αα»ααααΆαβα±ααβα’αααβαααααααααβααααβααΈαα·αβααααβαααααα·ααΈ (rollback, upgrade) αα βααααα·αβααΌα βαααα»α ααΎααααΈβαα»αα±ααβαααααΆααβαααβααααΆααααβααααααααα
- α’ααααααααααααα git αααααΆααααΆααααααααααααααΌαααΆαα αα·αααααΎαα·αααΆαααααΆααααααΌα αααααα ααα»αααααααααα ααααα·αααΎα’αααααααΌαααΆααα·αααααΎααΆαααααΆααααααΌααα ααΆααΆα α’αααα’αΆα ααααΎααΆαααααααΎ git ααΆαααΆαααααααΆαα αΆααααααΎααααααααααααααααα·α
- α’αααα’αΆα αα·α αΆαααΆαααααα’ααα αΌαααΆαααΆαα’αα·ααααααααααα’ααααααααααΎα§αααααααΌα ααΆ Skaffoldαααα’αααα’αα·ααααααα’αΆα ααΆαααααααΆαααααΆααααααΌααα αααα»αααα·αααα·αααΉαααΆαααα·αα
ααΆαααααΎα αααΆααααα»αααΈαααα αΆα
α’αααα’αα·ααααααααααααΎαααΆαααααΎααααΆααααααΎαααΆαααΆαααΆααααα’αααααααα 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 α αααα»αααΉαααααααααααΆααα½αααααααα»ααααααΆααααααα’αααΈααααΆααααΆαααΈ XNUMXα αααααααααΎαααΆαααααΆααααΈαα
ααα αΌαααΆαααΆα GitOps ααΆαα½α
αα ααΈααα ααΎαααΆαααααΆααΆααααααΆα’αααΈαααααααΆαααααααΎααα αααα»αααααΎαααΆαααααΆαααΆαααααααΆααααααα·ααΈαααα»αααααααααα»ααααΆαααααΆααααααααααα αααααΆαα±ααααΆααααα·αα’αααΈαα·ααΈααΆααααα GitOps α ααΎααα·αααΆααααΆααα αααααααα αα α‘αΎααα α αΎαααΉαααΆαααΆαααα’αααΈαααααα ααα»ααααα₯α‘αΌααααααΎαααΏααΆααααΆααΎαααΆαααααΎααΏαααααΉαααααΌα αα ααααααααΎααααααα α α·αααααααΎα±ααα’αααΈαααΆααα’ααααΆαααααααααΆαααα α αΎαααΆαααΆα±ααααΆαααααα·ααα ααΉααααααΆααααααα’αααα’αα·ααααααα
ααααα: www.habr.com