Dailymotion ááẠKubernetes ááá¯á¡áá¯á¶ážááŒá¯áá¯á¶- Application Deployment
áá»áœááºá¯ááºááá¯á·ááẠDailymotion á០Kubernetes ááᯠááœááºáá²á·áá±á¬ 3 ááŸá áºá áá¯ááºáá¯ááºááŸá¯ááœáẠá áááºá¡áá¯á¶ážááŒá¯áá²á·áááºá ááá¯á·áá±á¬áº á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááœáẠá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠááŒáá·áºáá»ááºá¡áá¯á¶ážááŒá¯ááŒááºážááẠáá»á±á¬áºá áá¬áá±á¬ááºážáááºá ááá¯á·ááŒá±á¬áá·áº ááŒá®ážáá²á·ááá·áºááŸá áºá¡áááºážáááºá¡ááœááºáž áá»áœááºá¯ááºááá¯á·ááááááá¬áá»á¬ážááŸáá·áº á¡áá¯ááºá¡ááœá¬ážá¡áá¬áá»á¬ážááᯠááŒáŸáá·áºáááºááẠááŒáá¯ážá á¬ážáá±áá«áááºá
áááºáá áá¬áá²á
á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠááá¹áá¬áá áºááŸááºážááŸá Kubernetes á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááœáẠáááºááá¯á·á¡áá¯á¶ážáá»áá¯á¶ááᯠáá±á¬áºááŒáá«áááºá
Kubernetes á¡áá¬ááá¹áá¯áá»á¬ážá
áœá¬ááᯠáá
áºááŒáá¯ááºáááºá¡áá¯á¶ážááŒá¯ááẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áááºá
á á áºáá±ážááŸá¯áá»á¬ážááŒá¯áá¯ááºáááºá ááá¬ážáá»á¬ážáááºáá®ážáááºá áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááá·áºáááºááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠHelm áááááºááœáẠPython script áááºáá áºáá¯ááá¯áááºáž áá±ážáá¬ážáá²á·áááºá á€áá¯ááºáá±á¬ááºá áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠdocker áá¯á¶ááᯠá¡áá¯á¶ážááŒá¯á áááᯠCI ááááºáá±á¬ááºážáá±á«áºááœáẠáá¯ááºáá±á¬ááºáá«áááºá
á¡ááŸááºááá¡á±á¬ááºá
ááŸááºáá»ááºá áááºá€á á¬ááá¯áááºááŒá®áž Helm 3 á¡ááœááºááááá¯á¶ážááŒáá·áºáá»áááá·áºááá¯ááºá á¬ážááŸááºááá¯ááŒá±ááŒá¬ááŒá®ážááŒá áºáááºá áááºááá¬ážááŸááºážááœáẠááááºá áá»áœááºá¯ááºááá¯á·ááŒá¯á¶ááœá±á·áá²á·áááá·áº ááŒá¿áá¬á¡áá»áá¯á·ááᯠááŒá±ááŸááºážáááºá¡ááœáẠááá¯ážáááºááŸá¯áá»á¬ážá áœá¬áá«ááŸááááºá
ááá¬ážááœáẠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž áá¯ááºáááºážá¡ááœá¬ážá¡áá¬
áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠá¡ááá¯ááºážá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž ááá¬ážááœááºáá»á¬ážá¡ááœáẠáá°áá®áá±á¬áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá
- ááá¯ááºáž dev ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡á á¯á¡áá±ážáá»á¬ážááœáẠá ááºážáááºááá·áºááá¬ážáá»á¬ážááᯠáááºáá®ážááẠá¡áá¯á¶ážááŒá¯áááºá
- ááœá²áááºááẠáá±á¬ááºážááá¯ááŸá¯ááᯠáááºááŒááá·áºá¡áá« áá¬á áá¬áá°ááá¯á·á áá°á·áááºáá« á á áºáááºá
- áá±á¬ááºáá¯á¶ážááœááºá áá¬áááœá²ááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáá»á°ážááœááºááẠááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠáááºáá®ážáá«áááºá áá±á¬á· áá¯ááºáá¯ááºááŸá¯ááœáẠá¡áá¯á¶ážáá»áá«á
áááºáááºážáá»ááºáá
áºáá¯á
á®ááœáẠáá»áœááºá¯ááºááá¯á·áááá¬ážáá»á¬ážááᯠááááºážáááºážáá¬ážáᬠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº ááá¯ááºááá¯ááºááá¯ááŸá±á¬ááºááŸá¯ááŸááááºá
ááá°áá®áá±á¬áááºáááºážáá»ááºáá»á¬ážááŸáááá¬ážááœááºáá»á¬áž
developer áá»á¬ážááẠdev áá¬áááœá²áá áºáá¯ááᯠááœááºážáá±á¬á¡áá«á áááºážááá¯á·áááá¬ážáá¬ážááŸááºážááᯠdev Chartmuseum ááá¯á· á¡ááá¯á¡áá»á±á¬áẠááœááºážááá¯á·áááºááᯠáááááŒá¯ááá·áºáááºá ááá¯á·ááŒá±á¬áá·áºá developer áá»á¬ážá¡á¬ážáá¯á¶ážááẠáá°áá®áá±á¬ dev repository ááá¯á¡áá¯á¶ážááŒá¯ááŒááŒá®áž á¡ááŒá¬ážáá°áááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠááá±á¬áºááá¡áá¯á¶ážáááŒá¯ááá á±áááºá¡ááœáẠááá·áºááá¬ážááá¬ážááŸááºážááᯠááá¯áá áá¯ááºáááºááŸááºááẠááá¯á¡ááºáá«áááºá
ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·á Python script ááẠKubernetes á¡áá¬ááá¹áá¯áá»á¬ážááᯠKubernetes OpenAPI áááºááŸááºáá»ááºáá»á¬ážááŸáá·áº ááá·áºáá»ááºá ááá¬ážáááºá
á±áááº
ááá¬ážááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá¡ááœá¬ážá¡áá¬á á¡ááœá±ááœá±áá±á¬áºááŒáá»ááº
- áááºááŸááºáá»ááºá¡ááá¯ááºáž ááá¯ááºááá¯ááºážáá¯ááºáááºážáá»á¬ážááᯠáááºááŸááºááŒááºážá
gazr.io á¡áááºá¡ááœá±ážááááºážáá»á¯ááºááŸá¯á¡ááœáẠ(lintá áá°áá áºá ááºážáááºááŸá¯)á - áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áº Python áááááá¬áá»á¬ážááŒáá·áº docker áá¯á¶áá áºáá¯ááᯠááœááºážáááºááŒááºážá
- áá¬áááœá²á¡áááºááŒáá·áº áááºáááºážáá»ááºááᯠáááºááŸááºááŒááºážá
- Kubeval ááᯠá¡áá¯á¶ážááŒá¯á Kubernetes yaml ááá¯ááºáá»á¬ážááᯠá á áºáá±ážááŒááºáž
- ááá¬ážáá áºáá¯á áá¬ážááŸááºážááŸáá·áº áááºážá áááºáááá¬ážáá»á¬áž (ááŒá±á¬ááºážáá²áá±áá±á¬ ááá¬ážá¡áá±á«áº áá°áááºáá±á¬ ááá¬ážáá»á¬áž) ááᯠá¡ááá¯á¡áá»á±á¬áẠááá¯ážááŒáŸáá·áºáá«á
- áááºážááááºáááºážáá»ááºááŸáá·áºááá¯ááºáá®áá±á¬ Chartmuseum ááá¯á·ááá¬ážáá áºáá¯áááºááŒááŒááºážá
á¡á á¯á¡ááœá²á·áá»á¬ážáá áºáá»áŸá±á¬áẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážá
ááá±áá¬áááºáá»á¬ážá¡ááœá²á·áá»á¯ááº
áá»áœááºáá±á¬áºáá¯á¶ážáá²á· á¡áá»áááºáá
áºáá¯ááŸááááºá
ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáááºážá ááºááᯠá¡ááœááºááá¯ážááŸááºážááœááºáá°á á±ááá·áº á¡á á¯á¡ááœá²á·áá»á¬ážááᯠááœááºáááºá áœá¬á á®áá¶ááá·áºááœá²ááẠá áááºáá²á·ááẠ(áá»áœááºá¯ááºááá¯á·ááẠá¡ááœá²á·áá»á¯ááºáááááá¬ážááŸááºážááá¯á¡áá¯á¶ážááŒá¯áá²á·áááºá áá¯áááááá¯ááºážááœáẠáá áºá á¯á¶áá áºáá¯ááŒá±á¬ááºážáá²ááœá¬ážááá¯ááºáááº)á
áááá® ááŒáá·áºáá±ááá·áº ááááºáá±á¬ááºáž
áá»áœááºá¯ááºááá¯á·áááááºáá±á¬ááºážááẠáááºááŸáááœáẠáá±á 6 áá¯ááœáẠááŒáá·áºáá»ááºáá¬ážááẠ- ááŒááºááœááºážááœáẠ3 áá¯ááŸáá·áº cloud ááœáẠ3 áá¯ááŸááááºá
ááŒáá·áºáá»ááºááŒáá·áºáá»ááºááŒááºážá
Global Helm áááºááá¯ážáá»á¬áž
4 global Helm áááºááá¯ážáá»á¬ážááẠá¡á á¯á¡ááœá²á·áá»á¬ážááŒá¬ážááœáẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááᯠááœá²ááŒá¬ážáááºááŸááºááá¯ááºá á±áá«áááºá áá»áœááºá¯ááºááá¯á·áááá¬ážáá»á¬ážá¡á¬ážáá¯á¶ážááœáẠáá°áááºážá¡áááá·áºáá¯á¶ážáááºááá¯ážáá»á¬ážááŸááááºá
global:
cloud: True
env: staging
region: us-central1
clusterName: staging-us-central1
ááá¹áá¬áá¯á¶ážááá¯ááºáá¬áááºááá¯ážáá»á¬áž
á€áááºááá¯ážáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠá¡ááŒá±á¬ááºážá¡áá¬ááᯠáááºááŸááºáá¬ááœáẠáá°áá®áá±ážááŒá®áž á¡áá»áá¯ážáá»áá¯ážáá±á¬ áááºááœááºáá»ááºáá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯áááº- á á±á¬áá·áºááŒáá·áºááŒááºážá ááŒá±áá¬áá¶ááŒááºážá ááŸááºáááºážááœááºážááŒááºážá ááŒááºááá±á«áºááá¯ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááŒááºážá á áá±ážáá»á²á·ááŒááºáž á áááºááŒáá·áº á¡áá¯á¶ážááŒá¯áá«áááºá
- "cloud"- áá»áœááºá¯ááºááá¯á·ááœáẠááá¯ááºááá Ạ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 -}}
Helm ááá°áá¬áá¯á¶á á¶
Kubernetes YAML ááŸá¯ááºááœááŒááºážááᯠááŸá±á¬ááºááŸá¬ážááẠá€áá¯áá¹áááá±áááᯠá¡áá±á¬ááºá¡áá°áá¯á¶á á¶áá¯á¶á á¶ááœáẠáááºááŸááºáá¬ážáááºá
áá»áŸá±á¬ááºááœáŸá¬ááŒá±ááŒá¬ááŒááºážá
áá»áœááºá¯ááºááá¯á·á á¡áá¯á¶ážáá»áááááá¬áá»á¬ážááẠYAML ááá¯ááºáá»á¬ážá áœá¬ááᯠá¡ááŒá±áá¶áá¬ážáááºá á¡á±á¬ááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯áá áºáá¯á¡á¬áž áá»áœááºá¯ááºááá¯á·ááŒá±áá¬áá¯á¶ááŸáá·áº áááºážáá áá±ážáá»á²á·ááœááºááŸá¯ááá¯ááºáᬠtopology (á¡á á¯ááá¯ááºáá¯á¶áá°á¡áá±á¡ááœááº) á á¥ááá¬áá áºáá¯ááŒá áºáááºá
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"
- Vault ááœáẠáá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠááŸááºáááºážáááºááá·áºá¡áá« ááá¯ááºáá¬ááẠáá±áá¯áá»á ááºážáá»ááºážáá»á¬ážááᯠáááºááŸááºáá¬ážáá«áááºá
- áá»áŸáá¯á·ááŸááºáá»ááºááœá±áá±á«á·á áá®ážááŒá¬ážá¡ááŒá±á¬ááºážá¡áᬠááá¯á·ááá¯áẠá¡á á¯á¡áá±ážááá¯á·áááá»áá±á¬ entry ááá¯ááá·áºáááºááá¯á¡ááºáááºá (á€áá±áá¬ááœáẠcontext cluster1 ááẠáá»áŸáá¯á·ááŸáẠ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
ááŒá¿áá¬áá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬áž
ááá¯ááŸá±á¬ááºááŸá¯á¡áá»á¬ážá¡ááŒá¬ážááŸáá·áºá¡áá¯ááºáá¯ááº
ááᯠáá»áœááºá¯ááºááá¯á·ááẠááá¬ážáá»á¬ážááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááœá²ááŒá¬ážáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ developer áá»á¬ážááẠgit repositories ááŸá áºáá¯ááœáẠá¡áá¯ááºáá¯ááºááááºááŒá áºááŒá®áž áá áºáá¯ááẠá¡ááá®áá±ážááŸááºážá¡ááœáẠáá áºáá¯ááŸáá·áº Kubernetes ááá¯á· áááºážá deployment ááᯠáááºááŸááºááŒááºážá¡ááœáẠáá áºáá¯ááŒá áºáááºá 2 git repositories ááẠá¡áá¯ááºá¡ááœá¬ážá¡áᬠ2 áá¯ááᯠááá¯ááá¯ááŒá®áž á¡áá áºáá¯ááºáá°á¡ááœáẠááŸá¯ááºááœá±ážááœááºáááºá
á¡ááœá±ááœá±ááá¬ážááœááºáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážááẠáááºáá²áááºá
áá»áœááºá¯ááºááá¯á·ááŒá±á¬áá²á·ááá·áºá¡ááá¯ááºážá áá±áá¯áá»ááá¬ážáá»á¬ážááẠááŸá®ááá¯ááŸá¯ááᯠááœá²ááŒá¬ážáááºááŸááºáááºááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážá
áœá¬ááᯠáá»ááºááŒááºá
áœá¬á¡áá¯á¶ážáá»áááºá¡ááœáẠá¡ááœááºá¡áá¯á¶ážáááºáá«áááºá áá«áá±ááá·áº áá»áœááºáá±á¬áºááá¯á· áá¯á¶ážáá«áááºá --reuse-values
á€áá±áá°áá»áá¯á¶á
á¶ááá¬ážá á¡á
áááºá¡ááá¯ááºážááŒá
áºáá±á¬ á¡ááºááá®áá±ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá«ááá¯ááºáž áááºááá¯ážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»á±á¬áºááŒááºááŒááºážá០ááŸá±á¬ááºááŒááºáá«á
á ááºáááºáááŒáẠáá±ážááá¯á·ááŒááºážáá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá¯á¶ááŸááºááŒá±á¬ááºážáá²áá±áá±á¬ áááºááá¯ážááŸá áºáá¯áá¬ááŸááááº- áá¯á¶áá°á¡áá±á¡ááœááºááŸáá·áº áá¯á¶ááẠ(áá¬ážááŸááºáž)á á¡ááŒá¬ážá ááá¯ááá¯áááºááŒáááºáá±á¬áááºááá¯ážáá»á¬ážááá¯ááá¯ááºááá¯ááºááŒá±á¬ááºážáá²ááŒá®ážáááºážáááºá¡áá±á¬áºáá±ážáááºáá²áááºá ááá¯á·á¡ááŒááºá áá±áá°áá»á¡á¬ážááŒáá·áº ááá¬ážáá áºáá¯ááᯠá¡áá¯á¶ážáá»ááŒááºážááœáẠá¡ááŸá¬ážáá áºáá¯ááẠáá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯ááºá¡ááœá±á·á¡ááŒá¯á¶á០ááŒááºááœá±á·áá²á·áááá·áºá¡ááá¯ááºáž ááŒá®ážáá±ážáá±á¬áá»ááŸá¯á¶ážááŸá¯áá»á¬ážáá®ááá¯á· áŠážáááºááœá¬ážá á±ááá¯ááºáááºá
ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºáá»á¬ážá áœá¬ááᯠá¡ááºááááºáá¯ááºááŒááºážá
developer ááẠá¡ááá®áá±ážááŸááºážá¡áá áºáá áºáá¯ááᯠáá±á«ááºážááá·áºáá±á¬á¡áá«ááœáẠááá¯ááºá¡áá»á¬ážá¡ááŒá¬ážááᯠááŒá±á¬ááºážááá«áááº- á¡ááá®áá±ážááŸááºážááŒá±ááŒá¬áá»ááºá áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážá á¬áááºážá áááºážááᯠáá±áá°áá»áá¯á¶á á¶ááá¬ážááœáẠááá·áºááœááºážáá«á á¡ááá®áá±ážááŸááºážááᯠááŸá®ááá¯ááŸá¯áá áºáá¯á¡ááŒá Ạááá·áºááœááºážáá«á
Jenkins ááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠVault ááœáẠááá¯ážáá»á²á·ááœááºážáááºá
á¡áᯠáá»áœááºáá±á¬áºááá¯á·ááŸá¬ áá
áºáá¯ááŸááááºá
áá±á¬ááºááŒááºááœá²ááŒááºážáá¯ááºáááºážá ááºááẠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŒááºážááá¯ááºáá«á
ááŒááºááŸáá·áºáááºá áááºááẠá¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááŸá command ááᯠrun ááẠááá¯á¡ááºááŒá®áž áááºážááẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸáá·áº ááŒáá·áºáá±áá«áááºá ááŸááºáááºáá±á¬áá¬ážááŸááºáž ID ááᯠáááºááŸááºáá¬ážááŒá±á¬ááºáž áá±áá»á¬á á±ááẠáá»áœááºá¯ááºááá¯á·ááẠá€áá¯ááºáá±á¬ááºáá»ááºááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠGitOps ááá¯á· áŠážáááºááœá¬ážáá±áá«áááºá
áá«ááá¯á·áá²á·áááºážááá¯ááº
áá»áœááºá¯ááºááá¯á·ááẠáááºážá¡áá¯á¶ážááŒá¯áá±áá±á¬ á¡ááá®áá±ážááŸááºážá ááá¯ááŸá±á¬ááºáááºážááá¯á· ááá¬ážááᯠááŒááºáá±ážááá¯áá«áááºá
ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠáá¯ááºáááºážá¡ááœá¬ážá¡áá¬á á¡áá°áá°áá«áá²á á¥ááá¬á¡á¬ážááŒáá·áºá áá¬áááœá²áá áºáá¯ááᯠáá»áœááºážáá»ááºááẠááœááºážááá¯ááºáá±á¬á¡áá«á ááŒáá·áºáá»ááºááŸá¯ááᯠá¡ááá¯á¡áá»á±á¬áẠá¡á áá»áá¯ážááœá¬ážáááºááŒá áºáááºá á€áá»ááºážáááºáááºážááŸáá·áº áááºááŸááá¯ááºáááºážá¡ááœá¬ážá¡áá¬á¡ááŒá¬áž á¡ááá ááœá¬ááŒá¬ážáá»ááºááŸá¬ ááá¯ááá¯á·ááŒá áºáá±áááºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠgit ááœááºá á®áá¶ááá·áºááœá²áááá·áºáááºá (á¡ááá®áá±ážááŸááºážááá¯ááºááá¯ááºááŸáá·áº Kubernetes ááœááºá¡áá¯á¶ážááŒá¯áá¯á¶)á
á¡á¬ážáá¬áá»ááºáá»á¬ážá áœá¬ááŸááááº-
- á¡áá»á¬ážááŒá®áž ááá¯ááŸááºážáááºá developer á¡ááœááºá áá±áááœááºážááá¬ážáá áºáá¯ááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áá¯á¶ážáá»áááºážááᯠáá±á·áá¬ááẠááá¯ááá¯ááœááºáá°áááºá
- áááºáá±á¬ááºááŸá¯ ááŒáá·áºáá»ááºááŒááºáž á¡áááá¹áá«áẠáááºááŸááºááá¯ááºáááºá áá¯ááºáá²á·áá°áá²á·áá±áᬠáááºáá±á¬ááºááŸá¯á
- á¡ááœá±ááœá±ááá¬ážááœááºáá»á¬ážááᯠáááºááŸá¬ážááŒááºážááᯠá á®áá¶ááá·áºááœá²ááŒááºážá. áááºáá±á¬ááºááŸá¯ááœáẠáááºážáááá¯ááºááá¯áẠHelm ááœááºááŸááááºááŒá áºáááºá áááºážááẠááá·áºá¡á¬áž á¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážááá¯áááááá¯ááºá á±ááẠá¡áá±ážáááºáá¯á¶ážá¡ááá·áºááœáẠá¡ááá®áá±ážááŸááºážáááá¶ááᬠ(ááŒááºááŸáá·áºááŒááºážá á¡ááá·áºááŒáŸáá·áºáááºááŒááºáž) ááᯠá á®áá¶ááá¯ááºá á±áááºááŒá áºáááºá
- git áá¡áá»áá¯ážáá»á±ážáá°ážáá»á¬áž ááá¬ážá á®áá¶ááá·áºááœá²ááŸá¯á¡ááœááº- á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá á á¬áááºážá á áºááŸááºáááºáž á áááºááá¯á·ááᯠááŒááºáá»ááºáááºá á¡áááºá áááºááẠááá¬ážáá áºáá¯ááá¯á· ááŒá±á¬ááºážáá²ááŸá¯ááᯠááŒááºáá»ááºááẠááá¯á¡ááºáá«áá áááºááẠá€á¡áá¬ááᯠgit áá¯á¶ážááŒá®áž áá¯ááºáá±á¬ááºááá¯ááºáááºá ááŒáá·áºáá»ááºááŸá¯ááẠá¡ááá¯á¡áá»á±á¬áẠá áááºáááºá
- áá²á·ááá¯á·áá±á¬ áááááá¬áá»á¬ážááŒáá·áº áááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ áá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááᯠááŒáŸáá·áºáááºááẠá ááºážá á¬ážááá¯ááºáááºá áá¶áá»ááºáá¯ááºáá¯ááºáá°áá»á¬ážááŸáá·áº áá®ážá ááºáá±á¬ á¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯ááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá ááºážáááºááá¯ááºááá·áº developer áá»á¬ážá
ááŸá áºááá·áº ááœáŸá±á·ááŒá±á¬ááºážááŒááºážá
áá»áœááºá¯ááºááá¯á·á áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážááẠá€áá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááᯠááᯠ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 repository ááŸáááá¬ážáá»á¬ážá
áá»áœááºá¯ááºááá¯á·ááẠáá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡á¬ážáá¯á¶ážááŸáá·áº á
áá¬ážááŒá±á¬ááŒá®ážááŒá®ááŒá
áºáá±á¬ááŒá±á¬áá·áº ááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá¯ááºáááºážá
ááºááᯠá
áááºáá±ááŒá®ááŒá
áºáááºá áááá¡ááá·áºááẠCI ááááºáá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯á ááááºážáá»á¯ááºáá¬ážáá²ááŒá
áºáááºá á¡ááá·áº á á¡ááŒá±á¬ááºážááᯠáááŒá¬áááºááŸá¬ áá±á¬ááºááẠááá¯á·á
áºáá
áºáᯠáááºáá±ážáá«áŠážáááºá
á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠááœááºáá²á·áá±á¬ááŸá áºáá»á¬ážá¡ááœááºáž á¡ááá®áá±ážááŸááºážááŒáá·áºáá»ááºááŒááºážáá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááœáẠáá»áœááºá¯ááºááá¯á·áááá¯ážáááºááŸá¯ááᯠáá±á¬áºááŒáááºááŒáá¯ážá á¬ážáá²á·ááŒá®áž GitOps áá»ááºážáááºááŸá¯ááŸáá·áºáááºáááºá á¡ááœá±ážá¡ááŒááºáá»á¬ážááŒá áºáá±á«áºá á±áá²á·áááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯ááºááá¯á·ááá±á¬ááºáá±ážáá² ááááºáá»á¬ážááᯠá¡á á®áááºáá¶áááºááŒáá«áááºá ááá¯á·áá±á¬áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ážááŸááºážááœááºáá°á á±áááºááŸáá·áº áá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážáá¡áá±á·á¡áááŸáá·áº ááá¯ááá¯áá®ážáááºá á±ááẠáá¯á¶ážááŒááºááá¯ááºáá±á¬á¡áá« áá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºáá±á¬á¡áá¬ááᯠáá¯ááºáá±á¬ááºáá²á·ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áá¯á¶ááŒááºáá«áááºá
source: www.habr.com