๐ŸŒฑ ์ธํ”„๋Ÿฐ/โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ)

(11) ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ๋“ค

mallin 2025. 6. 11. 13:41

โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ) - Spring 1, 2 ์„ ๋“ฃ๊ณ  ์ž‘์„ฑํ•˜๋Š” ๋ณต์Šต ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

 

(1) CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ

1-1. ๊ด€๋ฆฌ ๋‹ด๋‹น

  • ๋นŒ๋“œ / ๋ฐฐํฌ
  • (AS-IS) 1. ์†Œ์Šค ๋นŒ๋“œ → 2. ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ → 3. ๋ฐฐํฌ
    • ๊ฐ๊ฐ ๋‹ด๋‹นํ•˜๋Š” ๋‹ด๋‹น์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค
    • ๊ด€๋ฆฌ ๋‹ด๋‹น์ž๋ณ„๋กœ ๋‚˜๋ˆ„๋Š”๊ฒŒ ์—…๋ฌด ๋ถ„์žฅ์ด๋‚˜ ๊ด€๋ฆฌ ์ฑ…์ž„์—์„œ ๋” ์ข‹์Œ
  • (TO-BE) ์  ํ‚จ์Šค ํŒŒ์ดํ”„๋ผ์ธ (์†Œ์Šค ๋นŒ๋“œ → ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ → ๋ฐฐํฌ)

→ ๊ด€๋ฆฌ๋‹ด๋‹น์— ๋”ฐ๋ผ ์—…๋ฌด ๋ถ„์žฅ, ๊ด€๋ฆฌ ์ฑ…์ž„์„ ๊ณ ๋ คํ•ด์„œ ์„ ํƒ (๊ด€๋ฆฌ vs ๊ธฐ๋Šฅ)

 

 

1-2. ์šด์˜ ์ •์ฑ…

์  ํ‚จ์Šค ๋นŒ๋“œ (์†Œ์Šค, ์ปจํ…Œ์ด๋„ˆ) → ArgoCD ๋ฐฐํฌ (kubectl, HELM, Kustomize) → ์ธํ”„๋ผ ํ™˜๊ฒฝ

๋ฐฐํฌ์™€ ์ธํ”„๋ผ ํ™˜๊ฒฝ์˜ ๊ด€๊ณ„

  • 1:N ์œผ๋กœ ๊ตฌ์ถ•
    • ๐Ÿ‘ ์žฅ์  : ํ•˜๋‚˜๋งŒ ๊ด€๋ฆฌ
    • ๐Ÿ‘Ž ๋‹จ์  : ์žฅ์• ์‹œ ์˜ํ–ฅ๋„ ๋†’์Œ
  • 1:1 ์œผ๋กœ ๊ตฌ์ถ•
    • ์ด ๋ฐฉ์‹์„ ๋” ๋งŽ์ด ์‚ฌ์šฉ
    • ๐Ÿ‘ ์žฅ์  : ์žฅ์• ์‹œ ์˜ํ–ฅ๋„ ์—†์Œ
    • ๐Ÿ‘Ž ๋‹จ์  : ์ด์ค‘ ๊ด€๋ฆฌ ํ•„์š”

→ ์šด์˜ ์ •์ฑ…์— ๋”ฐ๋ผ ๊ด€๋ฆฌ ํŽธ์˜, ์žฅ์•  ์˜ํ–ฅ๋„๋ฅผ ๊ณ ๋ คํ•ด ์„ ํƒ (๋‹จ์ผ vs ๋ถ„๋ฆฌ)

 

 

1-3. ์ œํ’ˆ ์„ ์ •

  CI/CD Tool CI Tool CD Tool 
์˜จ๋ผ์ธ GitHub Actions Travis CI, circleci  
์˜คํ”„๋ผ์ธ Jenkins,
JenkinsX, TEKTON (์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ์ตœ์ ํ™”)
GitLab argo, Spinnaker

 

→ ์ œํ’ˆ ์„ ์ •์— ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ, ๋ ˆํผ๋Ÿฐ์Šค, ์œ ์ง€๋ณด์ˆ˜ ์—…์ฒด๋ฅผ ๊ณ ๋ คํ•ด ์„ ํƒ

 

1-4. Docker ๋Œ€์ฒด

๋‹จ์  : ๋ฌด๊ฑฐ์›€, Daemon ํ•„์š”

 

(1) buildah

  • ๋นŒ๋“œ
    • ์†Œ์Šค ๋นŒ๋“œ (gradle)
    • ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ (buildah)
      • dockerhub → buildah (podman) : image pull, login
      • buildah → dockerhub (skopeo) : image push
  • ๋ฐฐํฌ (argocd)
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค

(2) Kaniko

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ๋งŒ ๋Œ์•„๊ฐ€๋Š” ์ œํ’ˆ
  • ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค

→ Docker ๋ณด๋‹ค ์ž์›์‚ฌ์šฉ๋ฅ ์ด ๋‚ฎ๋‹ค


(2) ๋ฐฐํฌ ์ „๋žต์„ ์„ธ์šธ ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ

 

  Recreate RollingUpdate Blue/Green Canary
๋ฐฐํฌ ๋ฐฉ์‹ • v1 ์ด ์žˆ๋Š” ์ƒํƒœ์—์„œ v2 ๋กœ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๊ธฐ์กด Pod ๋ฅผ ์‚ญ์ œ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šดํƒ€์ž„ ๋ฐœ์ƒ
• v2 ๋ฒ„์ „์˜ ์ƒˆ๋กœ์šด Pod ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ Service ์™€ ์—ฐ๊ฒฐ๋˜๋ฉด Service ๊ฐ€ ๋‹ค์‹œ ํ™œ์„ฑํ™”
• v1 ์ด ์„œ๋น„์Šค๋˜๋Š” ์ƒํƒœ์—์„œ v2๋ฅผ ๋„์šด๋‹ค
• v1, v2 Pod ๋™์‹œ ํ˜ธ์ถœ ๋ฐœ์ƒ
• ๋ฐฐํฌํ•  v2 Deployment ๋ž‘ Pod ๋ฅผ ๋ชจ๋‘ ์„ธํŒ…
• Service ์˜ Selector ๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด
• Ingress Controller ๋ž‘ Ingress ์‚ฌ์šฉ
• Ingress ์—์„œ ํŠธ๋ž˜ํ”ฝ ์–‘ ์กฐ์ ˆ ๊ฐ€๋Šฅ
• ๊ทธ ์™ธ์—๋Š” Blue/Green ๊ณผ ๋™์ผ
๋ฐฐํฌ ์ž‘์—… 1. Deployment ์—…๋ฐ์ดํŠธ 1. Deployment ์—…๋ฐ์ดํŠธ 1. v2 Deployment ์ƒ์„ฑ
2. Service Selector ๋ณ€๊ฒฝ
3. v1 Deployment ์‚ญ์ œ
1. v2 Deployment/Ingress/Service ์ƒ์„ฑ
2. v1 / v2 Ingress ๊ฐ€์ค‘์น˜ ๋ณ€๊ฒฝ
3. v1 Deployment/Ingress/Service ์‚ญ์ œ
์œ ์ฆˆ ์ผ€์ด์Šค ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์‹œ
1. ์„œ๋น„์Šค ์ค‘๋‹จ ๊ณต์ง€
2. Deployment Replica 0 ์œผ๋กœ ๋ณ€๊ฒฝ
3. DB ์ž‘์—…
4. Deployment ํƒœ๊ทธ ๋ณ€๊ฒฝ ๋ฐ Replica 2๋กœ ์ˆ˜์ •
์šด์˜์—์„œ๋งŒ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํŠน์ • ํ—ค๋” ๊ฐ’์— ํ•œํ•ด์„œ๋งŒ v2๋กœ ํŠธ๋ž˜ํ”ฝ ์œ ์ž…
(Source IP, User, Language)
ํŠน์ง• • ์ž๋™ ๋ฐฐํฌ (์ •์ง€, ๋กค๋ฐฑ ๊ฐ€๋Šฅ)
• ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๋ถˆ๊ฐ€
• ์ž๋™ ๋ฐฐํฌ (์ •์ง€, ๋กค๋ฐฑ ๊ฐ€๋Šฅ)
• ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๋ถˆ๊ฐ€ • ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์Œ
• ์ˆ˜๋™ ๋ฐฐํฌ ์‹œ ๋กค๋ฐฑ์ด ๋น ๋ฆ„
• Script ๋ฅผ ํ†ตํ•ด ์ž๋™ ๋ฐฐํฌ ๊ฐ€๋Šฅ
• v2์— ๊ณผ๋„ํ•œ ํŠธ๋ž˜ํ”ฝ ์œ ์ž…์‹œ ๋ฌธ์ œ ๋ฐœ์ƒ
• ์ฝœ๋“œ ์Šคํƒ€ํŠธ ๋ฐฉ์ง€, ๋‘ ๋ฒ„์ „ ๋น„๊ต ๊ฐ€๋Šฅ
• A/B ํ…Œ์ŠคํŠธ : ๋ฐฐํฌ ์ „๋žต (x), Canary ๋ฐฐํฌ ์ƒํ™ฉ์—์„œ v1๊ณผ v2๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋ก 
๋ฐฐํฌ ํˆด kubectl, HELM, Kustomize   Jenkins Script + kubectl, argocd argocd, nginx, istio

(3) ๋‹จ๊ณ„๋ณ„๋กœ ๊ตฌ์ถ•ํ•ด๋ณด๋Š” ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ

Level 1. Jenkins ๊ธฐ๋ณธ ๊ตฌ์„ฑ

 

  • GitHub ์—์„œ ๋ฆด๋ฆฌ์ฆˆ ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ (Yaml, Dockerfile)
  • ์‹คํ–‰์ˆœ์„œ : ์†Œ์Šค ๋นŒ๋“œ → ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ → ๋ฐฐํฌ
  • Jenkins ๋ฅผ ํ†ตํ•ด ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

 

 

 

 

 

Level 2. Jenkins Pipeline ์‚ฌ์šฉ

 

  • ์†Œ์Šค ๋นŒ๋“œ → ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ → ๋ฐฐํฌ๊ฐ€ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐ
  • ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค
  • ์‹œ๊ฐ์ ์ธ Stage View ์ œ๊ณต
  • Jekinsfile ์„ ๋ฆด๋ฆฌ์ฆˆ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • Script ๋กœ Jenkins ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ
  • ํ•˜์ง€๋งŒ, ์ฒ˜์Œ ์ž‘์„ฑํ•œ๋‹ค๋ฉด Script ์ž‘์„ฑํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค

 

 

 

 

 

 

 

Level 3. Kustomize, Helm ๋ฐฐํฌ

 

  • Level 2์™€ ๋™์ผํ•œ ๊ตฌ์„ฑ
  • ๋ฐฐํฌ์˜ kubectl → Kustomize ๋กœ ๋ณ€๊ฒฝ
  • ๋ฆด๋ฆฌ์ฆˆ์˜ Yaml → Kustomize, HELM Package ๋กœ ๋ณ€๊ฒฝ
  • Package ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Yaml ํŒŒ์ผ์„ ๋™์  ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[Yaml ํŒŒ์ผ ๋™์  ๊ตฌ์„ฑ]

  • A App ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ Service Yaml, Pod Yaml, CM Yaml ์„ ์‚ฌ์šฉ
  • ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด B App, C App, D App ๋„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ
  • ์ด๋Ÿฐ ๊ฒฝ์šฐ A App ์˜ Yaml ์„ ๋ณต์‚ฌํ•ด์„œ 1. ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ 2. env ์ˆ˜์ •
  • Script ๋Š” ๋ณต์‚ฌ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š˜๋ฆฌ๋Š” ์ž‘์—…์€ ์‰ฝ๋‹ค
  • App ์„ ๋Š˜๋ฆฌ๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ ์ผ์ผํžˆ ๋ณต์‚ฌํ•ด์„œ ์ˆ˜์ •ํ•˜๋Š” ๊ฑด ๊ท€์ฐฎ๋‹ค
  • ์„œ๋น„์Šค์˜ ์˜ต์…˜ ํ•˜๋‚˜๋งŒ ๋ณ€๊ฒฝํ•ด๋„ ์ „์ฒด ์„œ๋น„์Šค์˜ ์˜ต์…˜๋„ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•œ๋‹ค

→ ์ด๋Ÿฐ ๊ฒƒ๋“ค ๋•Œ๋ฌธ์— HELM ์ด ๋‚˜์˜ค๊ฒŒ ๋จ

 

[HELM ๋™์ž‘ ๋ฐฉ์‹]

  1. HELM ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๊ณ  {๊ฐ’} ์œผ๋กœ ๋šซ์–ด๋‘”๋‹ค
  2. Helm ๋ฐฐํฌ ๋ช…๋ น์„ ํ•  ๋•Œ ๊ฐ’์„ ๋„ฃ์–ด์„œ ๋ณด๋‚ธ๋‹ค
  3. ๋ฐฐํฌ ๋ช…๋ น ์‹œ ๋„ฃ์€ ๊ฐ’์— ๋”ฐ๋ผ์„œ Script ๊ฐ€ ์ƒ์„ฑ

 

Level 4. ArgoCD ๋ฐฐํฌ ๋ถ„๋ฆฌ

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ธํ”„๋ผ ํ™˜๊ฒฝ์— ArgoCD ์„ค์น˜
  • ๋‚ด๋ถ€์ ์œผ๋ก  HELM ํŒจํ‚ค์ง€ ์‚ฌ์šฉ
  • GitHub ์—์„œ HELM ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฐฐํฌ
  • ๋ฐฐํฌ ์ˆœ์„œ
    1. ์  ํ‚จ์Šค ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ (์†Œ์Šค/์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ)
    2. ๋ฆด๋ฆฌ์ฆˆ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š”๊ฒŒ ๋ฐฐํฌ ํ–‰์œ„
      • ์ฒซ ๋ฐฐํฌ๊ฐ€ ๋œ ์ดํ›„ ArgoCD ๊ฐ€ GitHub ์— ์žˆ๋Š” ํ˜•์ƒ๊ด€๋ฆฌ ํŒŒ์ผ์ด๋ž‘ ์‹ค์ œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋ฐฐํฌํ•œ Yaml ํŒŒ์ผ๋“ค์— ๋Œ€ํ•ด์„œ ๋™๊ธฐํ™”
      • ๊นƒํ—ˆ๋ธŒ ํŒจํ‚ค์ง€ ์ˆ˜์ • → ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ
      • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค ์˜ต์…˜ ๋ณ€๊ฒฝ → ๊นƒํ—ˆ๋ธŒ ๋‚ด์šฉ ์—…๋ฐ์ดํŠธ
      • ๊นƒํ—ˆ๋ธŒ์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‚ฌ์ด์—์„œ Sync ๋ฅผ ๋งž์ถฐ์ค€๋‹ค
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค UI ์ œ๊ณต
  • ๋ฐฐํฌ ๊ธฐ๋Šฅ ์ œ๊ณต : Blue/Green, Canary

 

 

 

 

 

 

 

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ URL : https://inf.run/k7mF