Search

The Rendered Manifests Pattern

1. GitOps์™€ ์„ค์ • ๊ด€๋ฆฌ์˜ ํ˜„์žฌ ๋ฌธ์ œ์ 

1.1. ๊ธฐ์กด GitOps ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํ•œ๊ณ„

โ€ข
GitOps๋Š” ๊ฐ€์‹œ์„ฑ๊ณผ ํ˜‘์—… ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์›์น™์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ค์ œ ๊ตฌํ˜„์—์„œ ๋งŽ์€ ํ•ด์„์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ
โ€ข
Git ์ €์žฅ์†Œ ๊ตฌ์กฐ, ์„ค์ • ๊ด€๋ฆฌ ๋„๊ตฌ ์„ ํƒ, ๋ธŒ๋žœ์น˜ ์ „๋žต ๋“ฑ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ ๋ถ€์žฌ
โ€ข
Helm๊ณผ Kustomize ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด ์ œ๊ณตํ•˜๋Š” ์ถ”์ƒํ™”๊ฐ€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐ

1.2. ์„ค์ • ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ๋ฌธ์ œ์ 

์˜ˆ์‹œ: Helm ์ฐจํŠธ ๋ฒ„์ „ ๋ณ€๊ฒฝ chartVersion: 1.2.3 -> 1.2.4 ์ด๋Ÿฌํ•œ ์ž‘์€ ๋ณ€๊ฒฝ์ด ์‹ค์ œ๋กœ๋Š”: - ์ˆ˜๋ฐฑ ์ค„์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ณ€๊ฒฝ - ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์— ๊ฑธ์นœ ์˜ํ–ฅ - ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€์ž‘์šฉ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Œ
Plain Text
๋ณต์‚ฌ

2. Rendered Manifests ํŒจํ„ด์˜ ์ƒ์„ธ ๊ตฌํ˜„

2.1. ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜

1.
๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ
โ€ข
์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ
โ€ข
CI ํŒŒ์ดํ”„๋ผ์ธ ํŠธ๋ฆฌ๊ฑฐ
โ€ข
๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ Œ๋”๋ง
โ€ข
ํ™˜๊ฒฝ๋ณ„ ๋ธŒ๋žœ์น˜์— ๊ฒฐ๊ณผ๋ฌผ ์ €์žฅ
2.
ํ™˜๊ฒฝ๋ณ„ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ
main (์†Œ์Šค) โ”œโ”€โ”€ dev-manifests (๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋งค๋‹ˆํŽ˜์ŠคํŠธ) โ”œโ”€โ”€ staging-manifests (์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ ๋งค๋‹ˆํŽ˜์ŠคํŠธ) โ””โ”€โ”€ prod-manifests (ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋งค๋‹ˆํŽ˜์ŠคํŠธ)
Plain Text
๋ณต์‚ฌ

2.2. ์ƒ์„ธ ํ”„๋กœ์„ธ์Šค ํ๋ฆ„

1.
๊ฐœ๋ฐœ ๋‹จ๊ณ„
โ€ข
๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹
โ€ข
CI ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ Œ๋”๋ง
โ€ข
๋น„ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ธŒ๋žœ์น˜์— ์ž๋™ ์—…๋ฐ์ดํŠธ
2.
ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ๋‹จ๊ณ„
โ€ข
์ž„์‹œ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
โ€ข
๋ Œ๋”๋ง๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋กœ PR ์ƒ์„ฑ
โ€ข
์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ์Šน์ธ ํ”„๋กœ์„ธ์Šค
โ€ข
prod-manifests ๋ธŒ๋žœ์น˜์— ๋จธ์ง€

2.3. ๋ณด์•ˆ ๋ฐ ์ ‘๊ทผ ์ œ์–ด

1.
๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ์ •์ฑ…
๊ฐœ๋ฐœ ํ™˜๊ฒฝ: ์ž๋™ ๋ฐฐํฌ ํ—ˆ์šฉ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ: ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ๋ทฐ ํ•„์š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ: - ํ•„์ˆ˜ ๋ฆฌ๋ทฐ์–ด ์Šน์ธ - CI ์ฒดํฌ ํ†ต๊ณผ - ์ง์ ‘ ํ‘ธ์‹œ ๊ธˆ์ง€
Plain Text
๋ณต์‚ฌ
2.
์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์ „๋žต
โ€ข
External Secrets Operator ์‚ฌ์šฉ
โ€ข
SecretStore์—์„œ ์‹œํฌ๋ฆฟ ์ฐธ์กฐ
โ€ข
ExternalSecret ๋ฆฌ์†Œ์Šค๋กœ ๊ด€๋ฆฌ

3. ์„ฑ๋Šฅ ์ตœ์ ํ™”

3.1. Argo CD ์„ฑ๋Šฅ ํ–ฅ์ƒ

1.
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ
โ€ข
๊ธฐ์กด: ๋ ˆํฌ ์„œ๋ฒ„์—์„œ ์ง€์†์ ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ
โ€ข
๊ฐœ์„ : CI์—์„œ 1ํšŒ ์ƒ์„ฑ์œผ๋กœ ๋ณ€๊ฒฝ
2.
์บ์‹œ ํšจ์œจ์„ฑ
โ€ข
๋งค๋‹ˆํŽ˜์ŠคํŠธ ์žฌ์ƒ์„ฑ ํ•„์š”์„ฑ ๊ฐ์†Œ
โ€ข
์บ์‹œ ๋ฌดํšจํ™” ๋นˆ๋„ ๊ฐ์†Œ

3.2. CI ์ตœ์ ํ™”

์ตœ์ ํ™” ์ „๋žต: 1. ๋ณ‘๋ ฌ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ Œ๋”๋ง 2. ์ฆ๋ถ„ ์—…๋ฐ์ดํŠธ ์ง€์› 3. ์บ์‹œ ํ™œ์šฉ
Plain Text
๋ณต์‚ฌ

4. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ

4.1. ๋ณ€๊ฒฝ ์ถ”์ 

1.
๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ณ€๊ฒฝ ์ด๋ ฅ
โ€ข
์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋กœ ์™„๋ฒฝํ•œ ๊ฐ์‚ฌ ์ถ”์ 
โ€ข
๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ๋ช…ํ™•ํ•œ ๊ฐ€์‹œ์„ฑ
2.
์ฐจ์ด์  ๋ถ„์„
๋ณ€๊ฒฝ ์ „/ํ›„ ๋น„๊ต: - ๋ฆฌ์†Œ์Šค ๊ตฌ์„ฑ ๋ณ€๊ฒฝ - ์„ค์ • ๊ฐ’ ๋ณ€๊ฒฝ - ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
Plain Text
๋ณต์‚ฌ

4.2. ๋กค๋ฐฑ ์ „๋žต

1.
์ฆ‰๊ฐ์  ๋กค๋ฐฑ
โ€ข
์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๊ฐ„๋‹จํžˆ ๋˜๋Œ๋ฆฌ๊ธฐ
โ€ข
๋งค๋‹ˆํŽ˜์ŠคํŠธ ์žฌ์ƒ์„ฑ ๋ถˆํ•„์š”
2.
๋ถ€๋ถ„ ๋กค๋ฐฑ
โ€ข
ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ์„ ํƒ์  ๋กค๋ฐฑ
โ€ข
์˜ํ–ฅ ๋ฒ”์œ„ ์ตœ์†Œํ™”

5. ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ

5.1. ์ €์žฅ์†Œ ๊ตฌ์กฐ

/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ helm/ โ”‚ โ””โ”€โ”€ kustomize/ โ”œโ”€โ”€ .github/workflows/ โ”‚ โ”œโ”€โ”€ render-dev.yaml โ”‚ โ”œโ”€โ”€ render-staging.yaml โ”‚ โ””โ”€โ”€ render-prod.yaml โ””โ”€โ”€ docs/ โ””โ”€โ”€ deployment-guides/
Plain Text
๋ณต์‚ฌ

5.2. ๋ฐฐํฌ ์ „๋žต

1.
๋‹จ๊ณ„์  ๋ฐฐํฌ
โ€ข
๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ž๋™ ๋ฐฐํฌ
โ€ข
์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ ๊ฒ€์ฆ
โ€ข
ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ์Šน์ธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ
2.
๊ธด๊ธ‰ ํŒจ์น˜ ์ ˆ์ฐจ
โ€ข
ํ•ซํ”ฝ์Šค ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
โ€ข
์‹ ์†ํ•œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค
โ€ข
์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ์‹คํ–‰
์ด๋Ÿฌํ•œ ์ƒ์„ธํ•œ ๊ตฌํ˜„๊ณผ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด Rendered Manifests ํŒจํ„ด์€ ํฐ ๊ทœ๋ชจ์˜ Kubernetes ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ GitOps ์‹คํ–‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.