Dailymotion์ด Kubernetes๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ: ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
Dailymotion์์๋ 3๋ ์ ๋ถํฐ ํ๋ก๋์ ํ๊ฒฝ์์ Kubernetes๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋ค. ํ์ง๋ง ์ฌ๋ฌ ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๊ฒ์ ์ฌ๋ฏธ์๊ธฐ ๋๋ฌธ์ ์ง๋ ๋ช ๋ ๋์ ์ฐ๋ฆฌ๋ ๋๊ตฌ์ ์์ ํ๋ฆ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํด ์์ต๋๋ค.
์ด๋์ ์์๋์๋์?
์ฌ๊ธฐ์์๋ ์ ์ธ๊ณ ์ฌ๋ฌ Kubernetes ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์ฌ๋ฌ Kubernetes ๊ฐ์ฒด๋ฅผ ํ ๋ฒ์ ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
๋ํ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ , ์ฐจํธ๋ฅผ ์์ฑํ๊ณ , ๋น๋ฐ์ ์ถ๊ฐํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ํด Helm ์์ ์์ Python ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์์ ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ CI ํ๋ซํผ์์ ์ํ๋ฉ๋๋ค.
์์ ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฉ๋ชจ. ์ด ๊ธ์ ์ฝ์ผ๋ฉด์ Helm 3์ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค ํ๋ณด๊ฐ ์ด๋ฏธ ๋ฐํ๋์์ต๋๋ค. ๋ฉ์ธ ๋ฒ์ ์๋ ๊ณผ๊ฑฐ์ ๊ฒช์๋ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค์ํ ๊ฐ์ ์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ฐจํธ ๊ฐ๋ฐ ์์ ํ๋ฆ
์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ฐจํธ์๋ ๋์ผํ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- ๋๋ญ๊ฐ์ง DEV ๊ฐ๋ฐ ํด๋ฌ์คํฐ์์ ํ ์คํธํ ์ฐจํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Pull Request๊ฐ ์ ์ถ๋๋ฉด ์์ฌ, ์คํ ์ด์ง์์ ํ์ธ๋ฉ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก, ๋ณ๊ฒฝ ์ฌํญ์ ๋ธ๋์น์ ์ปค๋ฐํ๊ธฐ ์ํ ํ ์์ฒญ์ ์์ฑํฉ๋๋ค. ์ฐ๋ฅด๋ค ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํ๋ก๋์ ์ ์ ์ฉํฉ๋๋ค.
๊ฐ ํ๊ฒฝ์๋ ์ฐจํธ๋ฅผ ์ ์ฅํ๋ ์์ฒด ๊ฐ์ธ ์ ์ฅ์๊ฐ ์์ผ๋ฉฐ ์ฐ๋ฆฌ๋
๋ค์ํ ํ๊ฒฝ์ ์ฐจํธ ์ ์ฅ์
๊ฐ๋ฐ์๊ฐ dev ๋ธ๋์น๋ฅผ ํธ์ํ๋ฉด ์ฐจํธ ๋ฒ์ ์ด ์๋์ผ๋ก dev Chartmuseum์ผ๋ก ํธ์๋๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๊ฐ๋ฐ์๋ ๋์ผํ ๊ฐ๋ฐ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ค์๋ก ๋ค๋ฅธ ์ฌ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ฉํ์ง ์๋๋ก ์ฐจํธ ๋ฒ์ ์ ์ ์คํ๊ฒ ์ง์ ํด์ผ ํฉ๋๋ค.
๋ํ, ์ฐ๋ฆฌ์ ์์ Python ์คํฌ๋ฆฝํธ๋ ๋ค์์ ์ฌ์ฉํ์ฌ Kubernetes OpenAPI ์ฌ์์ ๋ํด Kubernetes ๊ฐ์ฒด๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
์ฐจํธ ๊ฐ๋ฐ ์์ ํ๋ฆ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ค๋ช
- ์ฌ์์ ๋ฐ๋ผ ํ์ดํ๋ผ์ธ ์์
์ค์
gazr.io ํ์ง ๊ด๋ฆฌ(๋ฆฐํธ, ๋จ์ ํ ์คํธ)๋ฅผ ์ํ ๊ฒ์ ๋๋ค. - ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ Python ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Docker ์ด๋ฏธ์ง๋ฅผ ํธ์ํฉ๋๋ค.
- ๋ธ๋์น ์ด๋ฆ์ผ๋ก ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค.
- Kubeval์ ์ฌ์ฉํ์ฌ Kubernetes yaml ํ์ผ ์ ํจ์ฑ ๊ฒ์ฌ
- ์ฐจํธ ๋ฐ ์์ ์ฐจํธ(๋ณ๊ฒฝ๋๋ ์ฐจํธ์ ์์กดํ๋ ์ฐจํธ)์ ๋ฒ์ ์ ์๋์ผ๋ก ๋์ ๋๋ค.
- ํ๊ฒฝ์ ๋ง๋ Chartmuseum์ ์ฐจํธ ์ ์ถ
ํด๋ฌ์คํฐ ๊ฐ์ ์ฐจ์ด์ ๊ด๋ฆฌ
ํด๋ฌ์คํฐ ์ฐํฉ
์ฌ์ฉํ๋ ์์ ์ด ์์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ํด๋ฌ์คํฐ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์์ํ์ผ๋ฉฐ ์ด๋ก ์ธํด ํ๋ก์ธ์ค๊ฐ ํฌ๊ฒ ๋จ์ํ๋์์ต๋๋ค(์ฐ๋ฆฌ๋ ํ๋๋ ์ด์ ์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์ฌ์ฉํ์ง๋ง ๋ ๋ฒ์งธ ๋ฒ์ ์์๋ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์์ ์ ์์ต๋๋ค).
์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ๋ซํผ
์ฐ๋ฆฌ ํ๋ซํผ์ ํ์ฌ 6๊ฐ ์ง์ญ(๋ก์ปฌ 3๊ฐ, ํด๋ผ์ฐ๋ 3๊ฐ)์ ๋ฐฐํฌ๋์ด ์์ต๋๋ค.
๊ธ๋ก๋ฒ ํฌ๊ตฌ ๊ฐ์น
4๊ฐ์ ์ ์ญ Helm ๊ฐ์ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ ๊ฐ์ ์ฐจ์ด์ ์ ์๋ณํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ฐจํธ์๋ ๊ธฐ๋ณธ ์ต์๊ฐ์ด ์์ต๋๋ค.
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
์๋น์ค ์ ์
์ด๋ ๋ฐฐํฌ ์ํฌํ๋ก๋ฅผ ์ ์ํ๋ ๋ชจ๋ ๋จ๊ณ์ ๊ฐ์์ ๋๋ค. ๋ง์ง๋ง ๋จ๊ณ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์์ ์ ํด๋ฌ์คํฐ์ ๋์์ ๋ฐฐํฌํฉ๋๋ค.
๋น๋ฐ์ ์ด๋ป์ต๋๊น?
๋ณด์๊ณผ ๊ด๋ จํ์ฌ ์ฐ๋ฆฌ๋ ๋ค์ํ ์ฅ์์ ๋ชจ๋ ๋น๋ฐ์ ์ถ์ ํ์ฌ ๊ณ ์ ํ ์ ์ฅ์์ ์ ์ฅํฉ๋๋ค.
์ฐ๋ฆฌ์ ๋ฐฐํฌ ๋๊ตฌ๋ 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์ ๋น๋ฐ์ ๊ธฐ๋กํ ๋ ๋ฐ๋ผ์ผ ํ ์ผ๋ฐ ๊ท์น์ ์ ์ํ์ต๋๋ค.
- ๋น๋ฐ์ด ์ ์ฉ๋๋ ๊ฒฝ์ฐ ํน์ ์ปจํ ์คํธ ๋๋ ํด๋ฌ์คํฐ์, ํน์ ํญ๋ชฉ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. (์ฌ๊ธฐ์ ํด๋ฌ์คํฐ1 ์ปจํ ์คํธ์๋ ๋น๋ฐ stack-app1-password์ ๋ํ ์์ฒด ๊ฐ์ด ์์ต๋๋ค).
- ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก.
- ์ด ๋ชฉ๋ก์ ๊ฐ ํญ๋ชฉ์ ๋ํด ์ฟ ๋ฒ๋คํฐ์ค ๋น๋ฐ ํค-๊ฐ ์์ด ์ฝ์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐจํธ์ ๋น๋ฐ ํ ํ๋ฆฟ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
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 ๋ฆฌํฌ์งํ ๋ฆฌ๋ 2๊ฐ์ ์์ ํ๋ฆ์ ์๋ฏธํ๋ฏ๋ก ์ด๋ณด์๊ฐ ํผ๋ํ๊ธฐ ์ฝ์ต๋๋ค.
์ผ๋ฐํ๋ ์ฐจํธ ๊ด๋ฆฌ๊ฐ ๋ฒ๊ฑฐ๋ก์
์ด๋ฏธ ๋งํ๋ฏ์ด ์ผ๋ฐ ์ฐจํธ๋ ์ข
์์ฑ์ ์๋ณํ๊ณ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ํ๊ฒ ๋ฐฐํฌํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ --reuse-values
์ด ์ผ๋ฐํ๋ ์ฐจํธ์ ์ผ๋ถ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ๋๋ง๋ค ๋ชจ๋ ๊ฐ์ด ์ ๋ฌ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ง์์ ์ธ ์ ๋ฌ ์ํฌํ๋ก์๋ ์ ๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๋ ๊ฐ์ง ๊ฐ, ์ฆ ๋ณต์ ๋ณธ ์์ ์ด๋ฏธ์ง ํ๊ทธ(๋ฒ์ )๋ง ์์ต๋๋ค. ๋ค๋ฅธ ๋ณด๋ค ์์ ์ ์ธ ๊ฐ์ ์๋์ผ๋ก ๋ณ๊ฒฝ๋๋๋ฐ ์ด๋ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋์ฑ์ด, ์ฐ๋ฆฌ ์์ ์ ๊ฒฝํ์์ ๋ณด์๋ฏ์ด ์ผ๋ฐํ๋ ์ฐจํธ๋ฅผ ๋ฐฐํฌํ ๋ ํ ๋ฒ์ ์ค์๋ก ์ธํด ์ฌ๊ฐํ ์คํจ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ๊ตฌ์ฑ ํ์ผ ์ ๋ฐ์ดํธ
๊ฐ๋ฐ์๊ฐ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ, ๋น๋ฐ ๋ชฉ๋ก, ์ผ๋ฐํ๋ ์ฐจํธ์ ํฌํจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์์ฑ์ผ๋ก ์ถ๊ฐํ๋ ๋ฑ ์ฌ๋ฌ ํ์ผ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
Jenkins ๊ถํ์ด Vault์์ ๋๋ฌด ํ์ฅ๋์์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค
๋กค๋ฐฑ ํ๋ก์ธ์ค๊ฐ ์๋ํ๋์ง ์์์ต๋๋ค.
๋กค๋ฐฑํ๋ ค๋ฉด ์ฌ๋ฌ ํด๋ฌ์คํฐ์์ ๋ช ๋ น์ ์คํํด์ผ ํ๋๋ฐ ์ด๋ก ์ธํด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฒ์ ID๊ฐ ์ง์ ๋์๋์ง ํ์ธํ๊ธฐ ์ํด ์ด ์์ ์ ์๋์ผ๋ก ์ํํฉ๋๋ค.
์ฐ๋ฆฌ๋ GitOps๋ก ๋์๊ฐ๊ณ ์์ต๋๋ค
์ฐ๋ฆฌ์ ๋ชฉํ
๋ฐฐํฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฅ์๋ก ์ฐจํธ๋ฅผ ๋ฐํํ๋ ค๊ณ ํฉ๋๋ค.
์์ ํ๋ฆ์ ๊ฐ๋ฐ๊ณผ ๋์ผํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ถ๊ธฐ๊ฐ ๋ง์คํฐ๋ก ํธ์๋๋ฉด ๋ฐฐํฌ๊ฐ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์๊ณผ ํ์ฌ ์ํฌํ๋ก์ ์ฃผ์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ git์์ ๊ด๋ฆฌ๋ฉ๋๋ค (์ ํ๋ฆฌ์ผ์ด์ ์์ฒด ๋ฐ Kubernetes์ ๋ฐฐํฌ๋๋ ๋ฐฉ์)
๋ช ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค:
- ๋ง์ด ๋ ๋ช ํํ๊ฒ ๊ฐ๋ฐ์๋ฅผ ์ํด. ๋ก์ปฌ ์ฐจํธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.
- ์๋น์ค ๋ฐฐํฌ ์ ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ฝ๋์ ๊ฐ์ ์์น ์๋น์ค.
- ์ผ๋ฐํ๋ ์ฐจํธ ์ ๊ฑฐ ๊ด๋ฆฌ. ์๋น์ค์๋ ์์ฒด Helm ๋ฆด๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ค๋ฅธ ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ๊ฐ์ฅ ์์ ์์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ช ์ฃผ๊ธฐ(๋กค๋ฐฑ, ์ ๊ทธ๋ ์ด๋)๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์์์ ์ฅ์ ์ฐจํธ ๊ด๋ฆฌ: ๋ณ๊ฒฝ ์ฌํญ ์ทจ์, ๊ฐ์ฌ ๋ก๊ทธ ๋ฑ. ์ฐจํธ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํด์ผ ํ๋ ๊ฒฝ์ฐ git์ ์ฌ์ฉํ์ฌ ์ทจ์ํ ์ ์์ต๋๋ค. ๋ฐฐํฌ๊ฐ ์๋์ผ๋ก ์์๋ฉ๋๋ค.
- ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์์ ํ๋ฆ์ ๊ฐ์ ํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ๋น๊ณ, ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํ๋ก๋์ ๊ณผ ๊ฐ๊น์ด ์ํฉ์์ ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ ์ ์์ต๋๋ค.
XNUMX๋จ๊ณ ๋ง์ด๊ทธ๋ ์ด์
์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ค์ ํ์ฌ 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 ์ ๊ทผ ๋ฐฉ์์ ๋ํ ์๊ฐ์ผ๋ก ์ด์ด์ก์ต๋๋ค. ์ฐ๋ฆฌ๋ ์์ง ๋ชฉํ์ ๋๋ฌํ์ง ์์์ผ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ ๋จ์ํํ๊ณ ๊ฐ๋ฐ์์ ์ต๊ด์ ๋ ๊ฐ๊น๊ฒ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ ๋ ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๋ค๊ณ ํ์ ํฉ๋๋ค.
์ถ์ฒ : habr.com