๐ŸšขKubernetes(k8s)๋ž€

๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ํ•„์š”์„ฑ

โœ… ๊ธฐ์กด ์ธํ”„๋ผ์˜ ํ•œ๊ณ„

  • ๊ณผ๊ฑฐ์—๋Š” ์„œ๋ฒ„ 1๋Œ€์— ํ•˜๋‚˜์˜ ์•ฑ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ์‹ โ†’ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„
  • ๊ฐ€์ƒํ™”(VM)๋Š” ๊ฐœ์„ ์ฑ…์ด์—ˆ์ง€๋งŒ ๋А๋ฆฌ๊ณ  ๋ฌด๊ฒ๋‹ค

โœ… ์ปจํ…Œ์ด๋„ˆ์˜ ๋“ฑ์žฅ

  • Docker๋ฅผ ์‚ฌ์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ(๊ผญ Docker๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„..) ๊ธฐ์ˆ ์€ ๊ฒฝ๋Ÿ‰ํ™”๋œ ๊ฒฉ๋ฆฌ ์‹คํ–‰ํ™˜๊ฒฝ ์ œ๊ณต
  • ๋ฌธ์ œ: ์ˆ˜๋ฐฑ~์ˆ˜์ฒœ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌ, ์Šค์ผ€์ค„๋ง, ๋ชจ๋‹ˆํ„ฐ๋ง๋ฅผ ์‚ฌ๋žŒ์ด ์ง์ ‘ ํ•œ๋‹ค๋Š”๊ฒƒ์€ ๋งŽ์ด ์–ด๋ ต๋‹ค.

โœ… Google ๋‚ด๋ถ€์˜ Borg ์‹œ์Šคํ…œ์—์„œ ์ฐฉ์•ˆ

  • ๊ตฌ๊ธ€์ด ์ž์‚ฌ ์„œ๋น„์Šค์—์„œ 10๋…„ ๋„˜๊ฒŒ ์จ์˜จ ๋‚ด๋ถ€ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ โ€œBorgโ€์˜ ์•„์ด๋””์–ด๋ฅผ ์˜คํ”ˆ์†Œ์Šค๋กœ ํ’€์–ด๋‚ธ ๊ฒƒ์ด Kubernetes(์ค„์—ฌ์„œ k8s)์ด๋‹ค.

๊ทธ๋ž˜์„œ k8s๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ๊ฐ€?

  • ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌ, ์Šค์ผ€์ผ๋ง, ๋ณต๊ตฌ, ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ด๋‹ค.

k8s์˜ ํ•ต์‹ฌ ๊ฐœ๋…

๊ฐœ๋… ์„ค๋ช…
Pod ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐ€์žฅ ์ž‘์€ ๋ฐฐํฌ ๋‹จ์œ„. ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฌถ์Œ (๋ณดํ†ต 1๊ฐœ)
Node ๋ฌผ๋ฆฌ์ /๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์›Œ์ปค ๋…ธ๋“œ
Cluster ์—ฌ๋Ÿฌ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ
Deployment ์„ ์–ธ์  ๋ฐฉ์‹์œผ๋กœ Pod ๋ฐฐํฌ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ
Service Pod์— ๊ณ ์ •๋œ ์ ‘๊ทผ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณต (Load Balancer, ClusterIP ๋“ฑ)
Namespace ๋…ผ๋ฆฌ์  ๊ทธ๋ฃนํ™” ๋‹จ์œ„. ์—ฌ๋Ÿฌ ํŒ€์ด ๊ณต์œ  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฒฉ๋ฆฌ ๋ชฉ์ 
ConfigMap / Secret ์„ค์ • ๋ฐ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ์™ธ๋ถ€์—์„œ ์ฃผ์ž… ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
Volume / PV / PVC ์Šคํ† ๋ฆฌ์ง€ ์ถ”์ƒํ™” ๋ฐ ์—ฐ๊ฒฐ

k8s์˜ ๊ตฌ์„ฑ


                 +-------------------+
                 |     Master Node   |
                 |-------------------|
                 | - API Server      |
                 | - Scheduler       |
                 | - Controller Mgr  |
                 | - etcd (DB)       |
                 +---------+---------+
	                       |
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ†“                         โ†“
      +-------------+          +---------------+
      |  Worker Node|          |  Worker Node  |
      |-------------|          |---------------|
      | kubelet     |          | kubelet       |
      | kube-proxy  |          | kube-proxy    |
      | containerd  |          | containerd    |
      +-------------+          +---------------+
             โ†“                         โ†“
           [Pod: ์ปจํ…Œ์ด๋„ˆ + ๋„คํŠธ์›Œํฌ + ๋ณผ๋ฅจ]
๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
API Server ๋ชจ๋“  ๋ช…๋ น์˜ ์ž…๊ตฌ (RESTful API)
etcd ๋ถ„์‚ฐ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ, ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ์ €์žฅ
Scheduler ์ƒˆ๋กœ ์ƒ์„ฑ๋œ Pod์„ ์–ด๋–ค Node์— ๋ฐฐ์น˜ํ• ์ง€ ๊ฒฐ์ •
Controller Manager ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ํ•„์š”ํ•œ ์กฐ์น˜๋ฅผ ์ˆ˜ํ–‰ (๋ณต์ œ, ์ž๋™ ๋ณต๊ตฌ ๋“ฑ)
kubelet Node ๋‚ด ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ๋ณด๊ณ  ๋ฐ ์œ ์ง€
kube-proxy ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์˜ฌ๋ฐ”๋ฅธ Pod์œผ๋กœ ๋ผ์šฐํŒ…
Container Runtime ex) containerd, cri-o (Docker๋Š” ๋” ์ด์ƒ ๊ธฐ๋ณธ ์•„๋‹˜)

k8s์™€ ArgoCD


k8s๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ (์–ด๋””์—, ์–ด๋– ๊ฒŒ ๋ฐฐํฌํ• ์ง€ ๊ฒฐ์ • )์ด๋ผ๋ฉด, argoCD๋Š” GitOps๊ธฐ๋ฐ˜์˜ Continuous Delivery ๋„๊ตฌ (๋ฌด์—‡์„, ์–ธ์ œ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌํ• ์ง€ ๊ด€๋ฆฌ) ์ด๋‹ค.

k8s๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€๊ฐ€?

SSOT(Single Source of Truth) - ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›

  • k8s์˜ ๋ชจ๋“  ๋ฐฐํฌ๋Š” yamlํŒŒ์ผ์„ ํ†ตํ•ด ์ด๋ค„์ง„๋‹ค. โ†’์ด๋•Œ, ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ๊ฐ์ž์˜ PC์—์„œ yamlํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด, ๋งŽ์€ ๋…ธ๋ ฅ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, GitOps๋ฐฉ๋ฒ•๋ก ์— ๋”ฐ๋ผ, ๋ฐฐํฌ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ Git์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š”๊ฒƒ์ด๋‹ค.

์ฆ‰, ArgoCD๋Š” Kubernetes๋ฅผ ์œ„ํ•œ GitOps ์ž๋™ ๋ฐฐํฌ ๊ณ„์ธต์ด๋‹ค.

Git Repository (Manifest ์ €์žฅ) โ† (๊ฐ์‹œ) โ† Argo CD โ†’ (๋ฐ˜์˜) โ†’ Kubernetes Cluster


Argo CD๊ฐ€ Kubernetes ๋ฐฐํฌ ์ „๋žต์— ์ฃผ๋Š” ๋ณ€ํ™”

ํ•ญ๋ชฉ ๊ธฐ์กด ๋ฐฉ์‹ (kubectl, Jenkins ๋“ฑ) Argo CD ๋ฐฉ์‹
๋ฐฐํฌ ์ฃผ์ฒด ์šด์˜์ž ๋˜๋Š” ์ž๋™ ์Šคํฌ๋ฆฝํŠธ Git ์ƒํƒœ๊ฐ€ ๋ฐฐํฌ ๊ธฐ์ค€
์ด๋ ฅ ๊ด€๋ฆฌ CI/CD ๋„๊ตฌ์˜ ๋กœ๊ทธ ๋˜๋Š” ์ˆ˜๋™ ๊ธฐ๋ก Git commit log
๋กค๋ฐฑ ์ˆ˜๋™ ์‹คํ–‰ Git commit revert + sync
๋‹ค์ค‘ ํ™˜๊ฒฝ ๊ด€๋ฆฌ (dev/stage/prod) ์Šคํฌ๋ฆฝํŠธ ๋ณต์žก๋„ ์ฆ๊ฐ€ Git repo ๋ถ„๋ฆฌ or overlay๋กœ ๋‹จ์ˆœํ™”
๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ CI ์Šคํฌ๋ฆฝํŠธ ๋ณต์žกํ•จ Argo CD์˜ multi-cluster ์ง€์›

์š”์•ฝ

  1. Argo CD๋Š” Kubernetes์˜ ๋ฐฐํฌ ์ž๋™ํ™” ๋‹ด๋‹น
  2. Kubernetes๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ , Argo CD๋Š” ๊ทธ๊ฒƒ์„ ๋ฐฐํฌ/๊ด€๋ฆฌํ•จ
  3. Git์„ ์†Œ์Šค ์˜ค๋ธŒ ํŠธ๋ฃจ์Šค๋กœ ์‚ผ๊ณ , Argo CD๋Š” ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  Kubernetes์™€ ์‹ฑํฌ ๋งž์ถค
  4. ์‹ค์‹œ๊ฐ„ ๋ฐฐํฌ ์ด๋ ฅ ์ถ”์ , ์ž๋™ ๋ณต๊ตฌ, ๋กค๋ฐฑ, ๋ฉ€ํ‹ฐํด๋Ÿฌ์Šคํ„ฐ ์ง€์› ๋“ฑ GitOps ํ•ต์‹ฌ ๋„๊ตฌ
  5. Kubernetes๋ฅผ ์“ฐ๋Š” ์กฐ์ง์ด๋ผ๋ฉด Argo CD๋Š” ํ•„์ˆ˜์— ๊ฐ€๊นŒ์›€ (Jenkins๋Š” CI๋กœ๋งŒ ๋‚จ๊ฒŒ ๋จ)