โ ์ฟ ๋ฒ๋คํฐ์ค ์ด๋๋ ํด๋์ค (์ง์ํธ) - 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 ๋์ ๋ฐฉ์]
- HELM ํ ํ๋ฆฟ์ ๋ง๋ค๊ณ {๊ฐ} ์ผ๋ก ๋ซ์ด๋๋ค
- Helm ๋ฐฐํฌ ๋ช ๋ น์ ํ ๋ ๊ฐ์ ๋ฃ์ด์ ๋ณด๋ธ๋ค
- ๋ฐฐํฌ ๋ช ๋ น ์ ๋ฃ์ ๊ฐ์ ๋ฐ๋ผ์ Script ๊ฐ ์์ฑ
Level 4. ArgoCD ๋ฐฐํฌ ๋ถ๋ฆฌ
- ์ฟ ๋ฒ๋คํฐ์ค ์ธํ๋ผ ํ๊ฒฝ์ ArgoCD ์ค์น
- ๋ด๋ถ์ ์ผ๋ก HELM ํจํค์ง ์ฌ์ฉ
- GitHub ์์ HELM ํจํค์ง๋ฅผ ๊ฐ์ ธ์์ ๋ฐฐํฌ
- ๋ฐฐํฌ ์์
- ์ ํจ์ค ํ์ดํ๋ผ์ธ ์คํ (์์ค/์ปจํ ์ด๋ ๋น๋)
- ๋ฆด๋ฆฌ์ฆ ํ์ผ์ ์์ ํ๋๊ฒ ๋ฐฐํฌ ํ์
- ์ฒซ ๋ฐฐํฌ๊ฐ ๋ ์ดํ ArgoCD ๊ฐ GitHub ์ ์๋ ํ์๊ด๋ฆฌ ํ์ผ์ด๋ ์ค์ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฐํฌํ Yaml ํ์ผ๋ค์ ๋ํด์ ๋๊ธฐํ
- ๊นํ๋ธ ํจํค์ง ์์ → ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค ๋ณ๊ฒฝ
- ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค ์ต์ ๋ณ๊ฒฝ → ๊นํ๋ธ ๋ด์ฉ ์ ๋ฐ์ดํธ
- ๊นํ๋ธ์ ์ฟ ๋ฒ๋คํฐ์ค ์ฌ์ด์์ Sync ๋ฅผ ๋ง์ถฐ์ค๋ค
- ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค UI ์ ๊ณต
- ๋ฐฐํฌ ๊ธฐ๋ฅ ์ ๊ณต : Blue/Green, Canary
์ด๋ฏธ์ง ์ถ์ฒ URL : https://inf.run/k7mF
'๐ฑ ์ธํ๋ฐ > โ ์ฟ ๋ฒ๋คํฐ์ค ์ด๋๋ ํด๋์ค (์ง์ํธ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
(13) Helm ๊ณผ Kustomize - 1 (Helm vs Kustomize, Helm ๋ฐฐํฌ) (1) | 2025.06.15 |
---|---|
(12) Jenkins Pipeline (๊ธฐ์ด๋ถํฐ Blue/Green ๊น์ง) (1) | 2025.06.14 |
(10) ์์ฝ๊ฒ ๋ฐ๋ธ์ต์ค ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ (2) | 2025.06.10 |
(9) ๋ฐ๋ธ์ต์ค ํ๋ฐฉ ์ ๋ฆฌ (8) | 2025.06.09 |
[๋ฏธ์ 4] Application ๊ธฐ๋ฅ์ผ๋ก ์ดํดํ๊ธฐ - PVC/PV, Deployment, Service, HPA (0) | 2025.06.08 |