Post

Kubernetes๋ž€?

Kubernetes๋ž€?

๐Ÿฅ‘ ๋“ค์–ด๊ฐ€๋ฉฐ

์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์šด์˜ํ•˜๋‹ค ๋ณด๋ฉด ๋‹จ์ˆœํžˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค. ์„œ๋น„์Šค๊ฐ€ ์ฃฝ์—ˆ์„ ๋•Œ ๋‹ค์‹œ ๋„์›Œ์•ผ ํ•˜๊ณ , ํŠธ๋ž˜ํ”ฝ์ด ๋Š˜์–ด๋‚˜๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ๋Š˜๋ ค์•ผ ํ•˜๋ฉฐ, ๋ฐฐํฌ ์ค‘์—๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

Kubernetes๋Š” ์ด๋Ÿฐ ์ปจํ…Œ์ด๋„ˆ ์šด์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Kubernetes๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€, ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€, ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ฌด์—‡์ธ์ง€ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  MSA ํ™˜๊ฒฝ์—์„œ Kubernetes์˜ Service Discovery, Circuit Breaker, Sidecar, Service Mesh๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด์–ด์ง€๋Š”์ง€๋„ ํ•จ๊ป˜ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

์ด์ „์— ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ํ•„์š”ํ–ˆ์„ ๋•Œ๋Š” Kubernetes ๋Œ€์‹  Docker Swarm์„ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ๋‹น์‹œ์—๋Š” Kubernetes๊ฐ€ ๋„ˆ๋ฌด ๋ฌด๊ฒ๊ฒŒ ๋А๊ปด์กŒ๊ณ , ์ž‘์€ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค์—์„œ๋Š” Swarm์ด ํ›จ์”ฌ ๋‹จ์ˆœํ•˜๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฒˆ์—๋Š” Docker Swarm๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ Kubernetes๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๋” ๋„“์€ ๋ฒ”์œ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š”์ง€๋„ ํ•จ๊ป˜ ์‚ดํŽด๋ณด๋ ค ํ•œ๋‹ค.


Kubernetes๋ž€?

Kubernetes๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ, ํ™•์žฅ, ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.

Docker ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด ์ปจํ…Œ์ด๋„ˆ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ์žˆ๋‹ค๋ฉด, Kubernetes๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ์œ„์—์„œ ์ˆ˜๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ์žˆ๋‹ค.

Kubernetes๋Š” ๋ณดํ†ต k8s๋ผ๊ณ  ์ค„์—ฌ ๋ถ€๋ฅธ๋‹ค. Kubernetes์—์„œ K์™€ s ์‚ฌ์ด์— 8๊ฐœ์˜ ๊ธ€์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Kubernetes๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง์ ‘ ์šด์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์œผ๋ฉด ๋ˆ„๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ํ• ๊นŒ?
  • ์„œ๋ฒ„ ํ•œ ๋Œ€์— ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐํ• ๊นŒ?
  • ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋ฐฐํฌํ•  ๋•Œ ๊ธฐ์กด ์š”์ฒญ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ?
  • ํŠน์ • ์„œ๋ฒ„๊ฐ€ ์žฅ์•  ๋‚˜๋ฉด ๊ทธ ์•ˆ์˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ์–ด๋–ป๊ฒŒ ๋ณต๊ตฌํ• ๊นŒ?
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋งŽ์•„์กŒ์„ ๋•Œ ์„ค์ •๊ณผ ๋„คํŠธ์›Œํฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ?

Kubernetes๋Š” ์ด๋Ÿฐ ์šด์˜ ์ž‘์—…์„ ์ž๋™ํ™”ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์„ ์–ธํ•˜๊ณ , Kubernetes๋Š” ์‹ค์ œ ์ƒํƒœ๊ฐ€ ๊ทธ ์„ ์–ธ๊ณผ ๊ฐ™์•„์ง€๋„๋ก ๊ณ„์† ์กฐ์ •ํ•œ๋‹ค.


ํ•ต์‹ฌ ๊ฐœ๋…: Desired State

Kubernetes์˜ ์ค‘์š”ํ•œ ํŠน์ง•์€ Desired State ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด โ€œnginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ 3๊ฐœ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹คโ€๊ณ  ์„ ์–ธํ•˜๋ฉด Kubernetes๋Š” ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ๋‹ค. ์‹ค์ œ๋กœ 2๊ฐœ๋งŒ ๋–  ์žˆ๋‹ค๋ฉด 1๊ฐœ๋ฅผ ๋” ๋„์šฐ๊ณ , 4๊ฐœ๊ฐ€ ๋–  ์žˆ๋‹ค๋ฉด 1๊ฐœ๋ฅผ ์ค„์ธ๋‹ค.

์ฆ‰, Kubernetes๋Š” ๋ช…๋ น์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ๋๋‚˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, ์›ํ•˜๋Š” ์ƒํƒœ์™€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ณ„์† ๋น„๊ตํ•˜๋ฉฐ ๋งž์ถฐ๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.


Kubernetes ๊ตฌ์กฐ

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํฌ๊ฒŒ Control Plane๊ณผ Worker Node๋กœ ๋‚˜๋‰œ๋‹ค.

flowchart TB
    User[User / kubectl] --> APIServer[API Server]
    APIServer --> Scheduler[Scheduler]
    APIServer --> Controller[Controller Manager]
    APIServer --> Etcd[etcd]

    Scheduler --> Node1[Worker Node]
    Scheduler --> Node2[Worker Node]

    Node1 --> Pod1[Pod]
    Node1 --> Pod2[Pod]
    Node2 --> Pod3[Pod]


Control Plane

Control Plane์€ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

ComponentDescription
API ServerKubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ†ต์‹ ํ•˜๋Š” ์ง„์ž…์ 
etcdํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” key-value ์ €์žฅ์†Œ
SchedulerPod๋ฅผ ์–ด๋–ค Node์— ๋ฐฐ์น˜ํ• ์ง€ ๊ฒฐ์ •
Controller Manager์›ํ•˜๋Š” ์ƒํƒœ์™€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์กฐ์ •


Worker Node

Worker Node๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์„œ๋ฒ„๋‹ค.

ComponentDescription
kubeletNode์—์„œ Pod ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—์ด์ „ํŠธ
kube-proxyKubernetes ๋„คํŠธ์›Œํฌ ๊ทœ์น™์„ ๊ด€๋ฆฌ
Container Runtime์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋Ÿฐํƒ€์ž„


์ฃผ์š” ๋ฆฌ์†Œ์Šค

Kubernetes์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

ResourceDescription
PodKubernetes์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋ฐฐํฌ ๋‹จ์œ„
ReplicaSet์ง€์ •ํ•œ ๊ฐœ์ˆ˜๋งŒํผ Pod๊ฐ€ ์œ ์ง€๋˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค
DeploymentPod ๋ฐฐํฌ, ์—…๋ฐ์ดํŠธ, ๋กค๋ฐฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค
ServicePod์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์ •๋œ ๋„คํŠธ์›Œํฌ ์ง„์ž…์ 
Ingressํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€ HTTP/HTTPS ์š”์ฒญ์„ ๋‚ด๋ถ€ Service๋กœ ๋ผ์šฐํŒ…
ConfigMap์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฆฌ์†Œ์Šค
Secret๋น„๋ฐ€๋ฒˆํ˜ธ, ํ† ํฐ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฆฌ์†Œ์Šค
VolumePod๊ฐ€ ์‚ฌ์šฉํ•  ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฆฌ์†Œ์Šค
Namespaceํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋‹จ์œ„


Pod

Pod๋Š” Kubernetes์—์„œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ Pod์—๋Š” ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‘”๋‹ค.

Pod ์•ˆ์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ namespace์™€ volume์„ ๊ณต์œ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ™์€ Pod ์•ˆ์—์„œ๋Š” localhost๋กœ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ™์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest


Sidecar Container

Pod๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ ์˜†์—์„œ ๋ณด์กฐ ์—ญํ• ์„ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ Sidecar Container๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ , sidecar ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋กœ๊ทธ ์ˆ˜์ง‘, ํ”„๋ก์‹œ, ์ธ์ฆ, ์„ค์ • ๋™๊ธฐํ™” ๊ฐ™์€ ์ผ์„ ๋งก์„ ์ˆ˜ ์žˆ๋‹ค. ๋‘ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ™์€ Pod ์•ˆ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ์™€ volume์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์„œ๋กœ ๊ฐ€๊น๊ฒŒ ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Pod
metadata:
  name: app-with-sidecar
spec:
  containers:
    - name: app
      image: my-app:latest
    - name: log-sidecar
      image: fluent-bit:latest

Sidecar ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์ง์ ‘ ๋„ฃ๊ธฐ ์• ๋งคํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. Service Mesh์—์„œ ํ”„๋ก์‹œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ์‹๋„ ๋Œ€ํ‘œ์ ์ธ sidecar ํ™œ์šฉ ์˜ˆ์‹œ๋‹ค.


Deployment

Deployment๋Š” Pod๋ฅผ ์„ ์–ธํ•œ ๊ฐœ์ˆ˜๋งŒํผ ์œ ์ง€ํ•˜๊ณ , ๋ฐฐํฌ์™€ ๋กค๋ฐฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋‹ค.

Pod๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์‹ค์ œ ์šด์˜์—์„œ๋Š” ๋ณดํ†ต Deployment๋ฅผ ํ†ตํ•ด Pod๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.


ReplicaSet

ReplicaSet์€ ํŠน์ • Pod๊ฐ€ ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด replica๋ฅผ 3์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ Pod ํ•˜๋‚˜๊ฐ€ ์ฃฝ์œผ๋ฉด ReplicaSet์ด ์ƒˆ Pod๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค์‹œ 3๊ฐœ๋ฅผ ๋งž์ถ˜๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ReplicaSet์„ ์ง์ ‘ ๋‹ค๋ฃจ๊ธฐ๋ณด๋‹ค๋Š” Deployment๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ReplicaSet์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.


Service

Pod๋Š” ์–ธ์ œ๋“  ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— IP๊ฐ€ ๊ณ ์ •์ ์ด์ง€ ์•Š๋‹ค. Service๋Š” ์ด๋Ÿฐ Pod๋“ค์— ์•ˆ์ •์ ์ธ ์ ‘๊ทผ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Deployment๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Pod๊ฐ€ ๊ต์ฒด๋˜๋”๋ผ๋„ Service ์ด๋ฆ„์€ ์œ ์ง€๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๋งค๋ฒˆ ๋ฐ”๋€Œ๋Š” Pod IP๋ฅผ ์•Œ ํ•„์š” ์—†์ด Service๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค.

Service์—๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ClusterIP, NodePort, LoadBalancer ํƒ€์ž…์ด ์žˆ๋‹ค.

TypeDescription
ClusterIPํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ Service ํƒ€์ž…
NodePort๊ฐ Node์˜ ํŠน์ • port๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ
LoadBalancerํด๋ผ์šฐ๋“œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ Service๋กœ ์ „๋‹ฌ


Ingress

Ingress๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ HTTP/HTTPS ์š”์ฒญ์„ ๋‚ด๋ถ€ Service๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋‹ค.

Service๊ฐ€ Pod ์•ž๋‹จ์˜ ๊ณ ์ • ์ง„์ž…์ ์ด๋ผ๋ฉด, Ingress๋Š” ์—ฌ๋Ÿฌ Service ์•ž์—์„œ ๋„๋ฉ”์ธ์ด๋‚˜ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ๋‹ด๋‹นํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์ฒ˜๋Ÿผ ์š”์ฒญ์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

RequestService
api.example.com/usersuser-service
api.example.com/ordersorder-service

Ingress ์ž์ฒด๋Š” ๊ทœ์น™์ด๊ณ , ์‹ค์ œ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋Š” Nginx Ingress Controller ๊ฐ™์€ Ingress Controller๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.


Network

Kubernetes ๋„คํŠธ์›Œํฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ ์›์น™์„ ๊ฐ€์ง„๋‹ค.

  • Pod๋Š” ๊ณ ์œ ํ•œ IP๋ฅผ ๊ฐ€์ง„๋‹ค.
  • Pod๋ผ๋ฆฌ๋Š” NAT ์—†์ด ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • Node๊ฐ€ ๋‹ฌ๋ผ๋„ Pod๋ผ๋ฆฌ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • Service๋Š” ์—ฌ๋Ÿฌ Pod ์•ž์— ๊ณ ์ •๋œ ์ ‘๊ทผ ์ง€์ ์„ ์ œ๊ณตํ•œ๋‹ค.

Pod๋Š” ์ƒ์„ฑ๋˜๊ณ  ์‚ญ์ œ๋  ๋•Œ๋งˆ๋‹ค IP๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šด์˜์—์„œ๋Š” Pod IP์— ์ง์ ‘ ์˜์กดํ•˜๊ธฐ๋ณด๋‹ค Service, Ingress ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•œ๋‹ค.


Volume

Pod ์•ˆ์˜ ์ปจํ…Œ์ด๋„ˆ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ์‹œ์ ์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žฌ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ Pod๊ฐ€ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Volume์€ Pod์— ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํŒŒ์ผ์„ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋กœ๊ทธ ํŒŒ์ผ์„ Volume์— ์“ฐ๊ณ , sidecar ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ™์€ Volume์„ ์ฝ์–ด์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋‹ค.


Namespace

Namespace๋Š” ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋‹จ์œ„๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด dev, staging, prod์ฒ˜๋Ÿผ ํ™˜๊ฒฝ๋ณ„๋กœ Namespace๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฆฌ์†Œ์Šค๋ผ๋„ Namespace๊ฐ€ ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋กœ ์ทจ๊ธ‰๋œ๋‹ค.


ConfigMap๊ณผ Secret

ConfigMap์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •๊ฐ’์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. Secret์€ ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ† ํฐ, ์ธ์ฆ์„œ์ฒ˜๋Ÿผ ๋ฏผ๊ฐํ•œ ๊ฐ’์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ํ™˜๊ฒฝ๋ณ„ ์„ค์ •๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ ConfigMap๊ณผ Secret์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์•„๋„ ์„ค์ •์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ค‘์š”ํ•˜๋‹ค.


Kubernetes ๋™์ž‘ ํ๋ฆ„

์‚ฌ์šฉ์ž๊ฐ€ kubectl๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋Œ€๋žต ๋‹ค์Œ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ YAML ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ๋‹ค.
  2. kubectl apply ๋ช…๋ น์œผ๋กœ API Server์— ์š”์ฒญํ•œ๋‹ค.
  3. API Server๋Š” ์š”์ฒญ์„ ๊ฒ€์ฆํ•˜๊ณ  etcd์— ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  4. Scheduler๋Š” Pod๋ฅผ ์‹คํ–‰ํ•  Node๋ฅผ ์„ ํƒํ•œ๋‹ค.
  5. ์„ ํƒ๋œ Node์˜ kubelet์ด ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์— Pod ์ƒ์„ฑ์„ ์š”์ฒญํ•œ๋‹ค.
  6. Controller๋Š” ์›ํ•˜๋Š” ์ƒํƒœ์™€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ณ„์† ๋น„๊ตํ•œ๋‹ค.


Pod ์„ค๊ณ„ ์›์น™

Kubernetes์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์„ค๊ณ„ ์›์น™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„๋ฅผ Pod๋กœ ์ž˜ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” 1 Pod = 1 WAS๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•˜๋‚˜๋ฅผ ํ•˜๋‚˜์˜ Pod๋กœ ๋ฐฐํฌํ•˜๊ณ , ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋„์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด Deployment์˜ replica ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๋‹ค.

1
2
3
4
Deployment
 โ”œโ”€โ”€ Pod - Spring Boot App
 โ”œโ”€โ”€ Pod - Spring Boot App
 โ””โ”€โ”€ Pod - Spring Boot App


์—ฌ๋Ÿฌ WAS๋ฅผ ํ•œ Pod์— ๋„ฃ์ง€ ์•Š๋Š” ์ด์œ 

ํ•˜๋‚˜์˜ Pod์— ์—ฌ๋Ÿฌ WAS๋ฅผ ๋„ฃ์œผ๋ฉด ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์šด์˜ ๊ด€์ ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ์•„์ง„๋‹ค.

์ฒซ ๋ฒˆ์งธ๋กœ ๊ฐ™์ด ์ฃฝ๋Š”๋‹ค. Pod๋Š” ํ•˜๋‚˜์˜ ๋ฐฐํฌ ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— Pod์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์•ˆ์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ํ•จ๊ป˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ์„œ๋น„์Šค๋ณ„ ์Šค์ผ€์ผ๋ง์ด ์–ด๋ ค์›Œ์ง„๋‹ค. user-service๋Š” 3๊ฐœ, order-service๋Š” 1๊ฐœ๋งŒ ํ•„์š”ํ•˜๋”๋ผ๋„ ๊ฐ™์€ Pod ์•ˆ์— ์žˆ์œผ๋ฉด ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์„ธ ๋ฒˆ์งธ๋กœ MSA ๊ตฌ์กฐ๊ฐ€ ํ๋ ค์ง„๋‹ค. ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•œ ์ด์œ ๋Š” ๋ฐฐํฌ, ํ™•์žฅ, ์žฅ์•  ๊ฒฉ๋ฆฌ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•จ์ธ๋ฐ ์—ฌ๋Ÿฌ WAS๋ฅผ ํ•œ Pod์— ๋„ฃ์œผ๋ฉด ๋‹ค์‹œ ๋ชจ๋†€๋ฆฌ์‹์— ๊ฐ€๊นŒ์›Œ์ง„๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ™์€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์„œ๋กœ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณ„๋„์˜ Pod๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


Kubernetes์™€ Service Discovery

MSA์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” Netflix Eureka๋‚˜ Consul ๊ฐ™์€ Service Registry๋ฅผ ๋ณ„๋„๋กœ ๋‘๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค.

Service Registry์˜ ์—ญํ• ์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฐพ์•„์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

1
service name -> IP / port

ํ•˜์ง€๋งŒ Kubernetes์—์„œ๋Š” Service์™€ DNS๊ฐ€ ์ด ์—ญํ• ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

1
2
3
4
5
6
7
auth-service
   โ†“
Cluster DNS
   โ†“
Service
   โ†“
Pod๋“ค

Pod IP๋Š” ๊ณ„์† ๋ฐ”๋€” ์ˆ˜ ์žˆ์ง€๋งŒ Service ์ด๋ฆ„์€ ์œ ์ง€๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ๋Š” auth-service, user-service ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

Spring Cloud OpenFeign์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด Eureka ์—†์ด๋„ Kubernetes Service ์ด๋ฆ„์„ ๋Œ€์ƒ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, Kubernetes ํ™˜๊ฒฝ์—์„œ๋Š” Service ์ž์ฒด๊ฐ€ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•œ๋‹ค.


Circuit Breaker

MSA์—์„œ๋Š” ํ•œ ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด user-service๊ฐ€ auth-service๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ auth-service๊ฐ€ ์žฅ์•  ์ƒํƒœ๋ผ๊ณ  ํ•ด๋ณด์ž.

1
user-service -> auth-service

์ด๋•Œ user-service๊ฐ€ ๊ณ„์† auth-service๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‘๋‹ต ์ง€์—ฐ์ด ์Œ“์ด๊ณ , ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณ ๊ฐˆ๋˜๊ณ , ๊ฒฐ๊ตญ user-service๊นŒ์ง€ ์žฅ์• ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์—ฐ์‡„ ์žฅ์• ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ด Circuit Breaker๋‹ค.

Circuit Breaker๋Š” ์žฅ์• ๊ฐ€ ๋‚œ ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ผ์ • ์‹œ๊ฐ„ ์ฐจ๋‹จํ•œ๋‹ค. ์ƒํƒœ๋Š” ๋ณดํ†ต ์„ธ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

StateDescription
Closed์ •์ƒ ํ˜ธ์ถœ ์ƒํƒœ
Open์žฅ์• ๊ฐ€ ๊ฐ์ง€๋˜์–ด ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜๋Š” ์ƒํƒœ
Half-Open์ผ๋ถ€ ์š”์ฒญ๋งŒ ๋ณด๋‚ด ๋ณต๊ตฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ƒํƒœ

Spring Boot์—์„œ๋Š” ๋ณดํ†ต Resilience4j๋ฅผ ์‚ฌ์šฉํ•ด Circuit Breaker, Retry, Timeout ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. Kubernetes๊ฐ€ Pod ๋ณต๊ตฌ์™€ ๋„คํŠธ์›Œํฌ ์ถ”์ƒํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋”๋ผ๋„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜ธ์ถœ ์‹คํŒจ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ง€๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๋‹ค.


Sidecar Proxy์™€ Bridge

Sidecar๋Š” ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜†์— ๋ถ™๋Š” ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ๋‹ค. ๋‹ค๋งŒ sidecar๋ผ๊ณ  ํ•ด์„œ ๋ชจ๋‘ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ Proxy ์—ญํ• ๊ณผ Bridge ์—ญํ• ๋กœ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ๋ถ„Sidecar ProxySidecar Bridge
๋ชฉ์ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์—ฐ๊ฒฐ ๋˜๋Š” ๋ณ€ํ™˜
๊ด€์ interceptadapter
์˜ˆ์‹œEnvoyHTTP-Kafka bridge, HTTP-gRPC bridge
์ฃผ์š” ๊ธฐ๋Šฅretry, timeout, circuit breaker, mTLSํ”„๋กœํ† ์ฝœ ๋ณ€ํ™˜, ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜

Sidecar Proxy๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„ ์ œ์–ดํ•œ๋‹ค. Envoy๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋ฉฐ Service Mesh์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

Sidecar Bridge๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ ๋•๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ HTTP๋กœ ์š”์ฒญํ•˜์ง€๋งŒ sidecar๊ฐ€ Kafka ๋ฉ”์‹œ์ง€๋กœ ๋ณ€ํ™˜ํ•ด ์ „๋‹ฌํ•˜๋Š” ์‹์ด๋‹ค.


Service Mesh

Service Mesh๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ธํ”„๋ผ ๋ ˆ๋ฒจ์—์„œ ์ œ์–ดํ•˜๋Š” ๊ตฌ์กฐ๋‹ค.

๊ธฐ์กด์—๋Š” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ง์ ‘ ๋„คํŠธ์›Œํฌ ๋กœ์ง์„ ๊ฐ€์ ธ์•ผ ํ–ˆ๋‹ค.

1
app -> Feign -> app

Service Mesh์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜†์— sidecar proxy๊ฐ€ ๋ถ™๊ณ , ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์€ proxy๋ฅผ ํ†ตํ•ด ํ๋ฅธ๋‹ค.

1
app -> sidecar -> sidecar -> app

ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋„คํŠธ์›Œํฌ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ฝ”๋“œ ๋ฐ–์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

Service Mesh๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋Œ€ํ‘œ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Retry
  • Timeout
  • Circuit Breaker
  • Tracing
  • mTLS
  • Traffic Routing

Service Mesh๋Š” ๋ณดํ†ต Data Plane๊ณผ Control Plane์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

PlaneDescription
Data Plane์‹ค์ œ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜์—ญ. Envoy ๊ฐ™์€ sidecar proxy๊ฐ€ ๋‹ด๋‹น
Control Planeproxy ์„ค์ •๊ณผ ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ. Istio ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ๋‹ด๋‹น

MSA ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„œ๋น„์Šค ๊ฐ„ ๋„คํŠธ์›Œํฌ ์ •์ฑ…, ๊ด€์ธก์„ฑ, ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋Š˜์–ด๋‚œ๋‹ค. ๋ชจ๋“  ์„œ๋น„์Šค์— retry, timeout, tracing, mTLS๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด ์ค‘๋ณต๋„ ์ปค์ง€๊ณ  ์ •์ฑ… ์ผ๊ด€์„ฑ๋„ ๊นจ์ง€๊ธฐ ์‰ฝ๋‹ค. Service Mesh๋Š” ์ด๋Ÿฐ ๊ณตํ†ต ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ์ธํ”„๋ผ๋กœ ์˜ฎ๊ฒจ ๊ด€๋ฆฌํ•œ๋‹ค.


Sidecarless Service Mesh

๊ธฐ์กด Service Mesh๋Š” Pod๋งˆ๋‹ค sidecar proxy๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด์—ˆ๋‹ค.

1
2
3
Pod
 โ”œโ”€โ”€ app
 โ””โ”€โ”€ sidecar

ํ•˜์ง€๋งŒ sidecar ๋ฐฉ์‹์—๋Š” ๋น„์šฉ๋„ ์žˆ๋‹ค. Pod๋งˆ๋‹ค proxy ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜๊ณ , ํŠธ๋ž˜ํ”ฝ ๊ฒฝ๋กœ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉฐ, ๋””๋ฒ„๊น… ๋‚œ์ด๋„๋„ ์˜ฌ๋ผ๊ฐ„๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด Sidecarless Service Mesh ์ ‘๊ทผ๋„ ๋“ฑ์žฅํ–ˆ๋‹ค.

1
App -> Node / eBPF -> App

๋Œ€ํ‘œ์ ์œผ๋กœ Cilium์ด๋‚˜ Istio Ambient Mesh ๊ฐ™์€ ํ๋ฆ„์ด ์žˆ๋‹ค. sidecar๋ฅผ ๊ฐ Pod์— ๋ถ™์ด๋Š” ๋Œ€์‹  Node ๋ ˆ๋ฒจ์ด๋‚˜ eBPF ๊ธฐ๋ฐ˜ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์ œ์–ดํ•˜๋ ค๋Š” ์ ‘๊ทผ์ด๋‹ค.

์ฒ˜์Œ Kubernetes๋ฅผ ํ•™์Šตํ•˜๋Š” ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐ”๋กœ Service Mesh๋‚˜ Sidecarless Mesh๊นŒ์ง€ ์ ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๋‹ค๋งŒ Kubernetes, MSA, Service Mesh์˜ ํ๋ฆ„์„ ์ดํ•ดํ•  ๋•Œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์šด์˜์—์„œ ์‹œ์ž‘ํ•ด ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ œ์–ด๋กœ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ํ™•์žฅ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.


์ „์ฒด ํ๋ฆ„ ์ •๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€์˜ ํ๋ฆ„์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

StepKeywordDescription
1Docker์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค
2KubernetesPod, Deployment, Service๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์šด์˜ํ•œ๋‹ค
3MSA NetworkService Discovery์™€ Circuit Breaker๊ฐ€ ํ•„์š”ํ•ด์ง„๋‹ค
4Sidecar๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜† ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค
5Service Mesh์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์ธํ”„๋ผ ๋ ˆ๋ฒจ์—์„œ ์ œ์–ดํ•œ๋‹ค
6Sidecarless MesheBPF ๋“ฑ์„ ํ™œ์šฉํ•ด sidecar ์—†์ด ๋ฉ”์‹œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค

ํ˜„์‹ค์ ์œผ๋กœ Spring Boot ๊ธฐ๋ฐ˜ MSA๋ฅผ Kubernetes ์œ„์—์„œ ์šด์˜ํ•œ๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ Service Mesh๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋ณด๋‹ค๋Š” Feign + Kubernetes Service + Resilience4j ์กฐํ•ฉ์œผ๋กœ ์‹œ์ž‘ํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค. ์„œ๋น„์Šค ์ˆ˜๊ฐ€ ๋Š˜๊ณ  observability, ๋ณด์•ˆ, ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์ด ๋ณต์žกํ•ด์งˆ ๋•Œ Istio ๊ฐ™์€ Service Mesh๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.


Docker, Docker Swarm, Kubernetes์˜ ์ฐจ์ด

Docker, Docker Swarm, Kubernetes๋Š” ์„œ๋กœ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์ง€๋งŒ ๋ฐ”๋ผ๋ณด๋Š” ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๋‹ค.

๊ตฌ๋ถ„DockerDocker SwarmKubernetes
๋ชฉ์ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ๊ณผ ์‹คํ–‰Docker ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ
๊ด€๋ฆฌ ๋ฒ”์œ„๋‹จ์ผ ์„œ๋ฒ„ ๋˜๋Š” ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ ์ค‘์‹ฌ์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ์Šคํ† ๋ฆฌ์ง€, ๋ฐฐํฌ ์ •์ฑ… ๊ด€๋ฆฌ
์„ค์ • ๋‚œ์ด๋„๋‚ฎ์Œ๋น„๊ต์  ๋‚ฎ์Œ๋น„๊ต์  ๋†’์Œ
์šด์˜ ๋ณต์žก๋„๋‚ฎ์Œ์ค‘๊ฐ„๋†’์Œ
์ฃผ์š” ๊ธฐ๋Šฅ์ด๋ฏธ์ง€ ๋นŒ๋“œ, ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„œ๋น„์Šค ๋ฐฐํฌ, ์Šค์ผ€์ผ๋ง, ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฐฐํฌ, ํ™•์žฅ, ๋ณต๊ตฌ, ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ, ์„ค์ • ๊ด€๋ฆฌ, ์Šคํ† ๋ฆฌ์ง€, ํ™•์žฅ API


Docker Swarm์„ ์„ ํƒํ–ˆ๋˜ ์ด์œ 

Docker Swarm์€ Docker์— ๋‚ด์žฅ๋œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ์ด๋ผ ์‹œ์ž‘ํ•˜๊ธฐ ์‰ฝ๋‹ค. ๊ธฐ์กด์— Docker์™€ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด Kubernetes๋ณด๋‹ค ์ง„์ž… ์žฅ๋ฒฝ์ด ๋‚ฎ๋‹ค.

์ž‘์€ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค์—์„œ๋Š” Swarm๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ณ , replica ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๊ณ , ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •๋„๋ผ๋ฉด ์„ค์ •์ด ๋‹จ์ˆœํ•œ Swarm์ด ๋” ์‹ค์šฉ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

1
docker service create --name web --replicas 3 -p 80:80 nginx

์œ„ ๋ช…๋ น์ฒ˜๋Ÿผ Docker CLI๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  replica๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‹จ์ˆœํ•จ์ด Swarm์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋‹ค.


์‹ค์ œ๋กœ ์‚ฌ์šฉํ–ˆ๋˜ Swarm ๋ฐฐํฌ ๋ฐฉ์‹

์‹ค์ œ๋กœ Swarm์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋ณต์žกํ•œ ๋ฐฐํฌ ๋„๊ตฌ๋ฅผ ๋ถ™์ด๊ธฐ๋ณด๋‹ค Shell Script๋กœ ๋ฐฐํฌ ํ๋ฆ„์„ ์ž๋™ํ™”ํ•ด์„œ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•˜๋˜ ์ผ์€ ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

  1. .env.stack.dev, .env.stack.prod ๊ฐ™์€ ํ™˜๊ฒฝ๋ณ„ env ํŒŒ์ผ์„ ์ฝ๋Š”๋‹ค.
  2. Docker Swarm์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด docker swarm init์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  3. MDM, Dashboard ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€์™€ migrator ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ๋‹ค.
  4. ํ•„์š”ํ•œ ๊ฒฝ์šฐ registry์— ์ด๋ฏธ์ง€๋ฅผ pushํ•œ๋‹ค.
  5. docker stack deploy๋กœ stack์„ ๋ฐฐํฌํ•œ๋‹ค.
  6. docker stack services, docker stack ps, docker service logs๋กœ ์ƒํƒœ์™€ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•œ๋‹ค.

ํ•ต์‹ฌ ๋ฐฐํฌ ๋ช…๋ น์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋‹จ์ˆœํ–ˆ๋‹ค.

1
docker stack deploy --with-registry-auth -c "$STACK_FILE" "$STACK_NAME"

์„œ๋น„์Šค ๋กœ๊ทธ๋„ stack ์ด๋ฆ„๊ณผ service ์ด๋ฆ„๋งŒ ์กฐํ•ฉํ•ด์„œ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

1
docker service logs -f "${STACK_NAME}_${service}"

์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋ช…ํ™•ํ–ˆ๋‹ค. ๋ณ„๋„์˜ ๋ณต์žกํ•œ ๋ฐฐํฌ ์‹œ์Šคํ…œ ์—†์ด๋„ build, push, deploy, logs ๊ฐ™์€ ์šด์˜ ๋ช…๋ น์„ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. Docker Compose๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด docker-stack.yml๋„ ๋น„๊ต์  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ํ•œ๊ณ„๋„ ์žˆ์—ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์ง€๊ณ  ํ™˜๊ฒฝ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก Shell Script๊ฐ€ ์ ์  ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋ฐฐํฌ ์ „๋žต, ์„ค์ • ๊ด€๋ฆฌ, secret ๊ด€๋ฆฌ, ๊ถŒํ•œ ์ œ์–ด, ์ƒํƒœ ๊ด€์ฐฐ ๊ฐ™์€ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋Š˜์–ด๋‚˜๋ฉด ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณด์™„ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„์ง„๋‹ค.

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


๊ทธ๋Ÿผ์—๋„ Kubernetes๋ฅผ ๋ณด๋Š” ์ด์œ 

Kubernetes๋Š” Swarm๋ณด๋‹ค ๋ฌด๊ฒ๊ณ  ํ•™์Šตํ•  ๊ฐœ๋…๋„ ๋งŽ๋‹ค. Pod, Deployment, Service, Ingress, ConfigMap, Secret, Volume, Namespace ๋“ฑ ์ฒ˜์Œ์—๋Š” ์•Œ์•„์•ผ ํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์•„ ๋ณด์ธ๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ์šด์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก Kubernetes์˜ ์žฅ์ ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.

  • ๋ฐฐํฌ ์ „๋žต๊ณผ ๋กค๋ฐฑ์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Ingress, Service Mesh, HPA ๊ฐ™์€ ์ƒํƒœ๊ณ„ ๋„๊ตฌ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ Managed Kubernetes ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ค์ •, ๋„คํŠธ์›Œํฌ, ์Šคํ† ๋ฆฌ์ง€, ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์ข‹๋‹ค.
  • ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ’๋ถ€ํ•˜๋‹ค.

์ฆ‰, Swarm์€ ๊ฐ€๋ณ๊ณ  ๋‹จ์ˆœํ•œ ์šด์˜์— ๊ฐ•์ ์ด ์žˆ๊ณ , Kubernetes๋Š” ๋ณต์žกํ•œ ์šด์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ๋ฐ ๊ฐ•์ ์ด ์žˆ๋‹ค.


Docker Swarm๊ณผ Kubernetes ์„ ํƒ ๊ธฐ์ค€

๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•ญ์ƒ ๋” ์ข‹๋‹ค๊ณ  ๋ณด๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์„œ๋น„์Šค ๊ทœ๋ชจ, ํŒ€์˜ ์ˆ™๋ จ๋„, ์šด์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์„ ํƒ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

์ƒํ™ฉ๋” ์ ํ•ฉํ•œ ์„ ํƒ
Docker ๊ธฐ๋ฐ˜์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ๋‹คDocker Swarm
์ž‘์€ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค์ด๊ณ  ์šด์˜ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ๋‹คDocker Swarm
ํ•™์Šต ๋น„์šฉ๋ณด๋‹ค ๋‹จ์ˆœํ•œ ๋ฐฐํฌ ๊ฒฝํ—˜์ด ์ค‘์š”ํ•˜๋‹คDocker Swarm
ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ‘œ์ค€์— ๋งž์ถฐ ์šด์˜ํ•˜๊ณ  ์‹ถ๋‹คKubernetes
ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์ž๋™ ํ™•์žฅ, ๋ณต์žกํ•œ ๋ฐฐํฌ ์ „๋žต์ด ํ•„์š”ํ•˜๋‹คKubernetes
์žฅ๊ธฐ์ ์œผ๋กœ ์šด์˜ ์ž๋™ํ™”์™€ ์ƒํƒœ๊ณ„ ํ™•์žฅ์ด ์ค‘์š”ํ•˜๋‹คKubernetes

๋‚˜๋„ ์ฒ˜์Œ์—๋Š” Kubernetes๊ฐ€ ๋ฌด๊ฒ๋‹ค๊ณ  ๋А๊ปด์ ธ Docker Swarm์„ ์„ ํƒํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Kubernetes๋ฅผ ํ•™์Šตํ•˜๋ฉด์„œ ์ด ๋ฌด๊ฑฐ์›€์ด ๋‹จ์ˆœํžˆ ๋ณต์žกํ•จ๋งŒ์€ ์•„๋‹ˆ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์šด์˜์—์„œ ๋งˆ์ฃผ์น˜๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ณ  ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๊ฐœ๋…์ด ์ƒ๊ธด ๊ฒƒ์— ๊ฐ€๊น๋‹ค.


์ •๋ฆฌ

Kubernetes๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ด๋‹ค.

ํ•ต์‹ฌ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์„ ์–ธํ•˜๋ฉด Kubernetes๊ฐ€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ณ„์† ์กฐ์ •ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Control Plane, Worker Node, Pod, Deployment, Service ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ํ•จ๊ป˜ ๋™์ž‘ํ•œ๋‹ค.

MSA ๊ด€์ ์—์„œ๋Š” Service์™€ DNS๊ฐ€ Service Discovery ์—ญํ• ์„ ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ๋Š” Resilience4j ๊ฐ™์€ ๋„๊ตฌ๋กœ Circuit Breaker๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์š”๊ตฌ์‚ฌํ•ญ์ด ๋” ๋ณต์žกํ•ด์ง€๋ฉด Sidecar Proxy์™€ Service Mesh๋ฅผ ํ†ตํ•ด retry, timeout, tracing, mTLS ๊ฐ™์€ ๊ณตํ†ต ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ์ธํ”„๋ผ ๋ ˆ๋ฒจ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Docker Swarm์€ Kubernetes๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋ฐ˜๋ฉด Kubernetes๋Š” ๋” ๋„“์€ ์šด์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ํ”Œ๋žซํผ์— ๊ฐ€๊น๋‹ค. ์ž‘์€ ์„œ๋น„์Šค์—์„œ๋Š” Swarm์ด ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณต์žกํ•œ ๋ฐฐํฌ์™€ ํ™•์žฅ, ํด๋ผ์šฐ๋“œ ์ƒํƒœ๊ณ„ ์—ฐ๋™๊นŒ์ง€ ๊ณ ๋ คํ•œ๋‹ค๋ฉด Kubernetes๋ฅผ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

ํ˜„์‹ค์ ์œผ๋กœ๋Š” Spring Boot + Feign + Kubernetes Service + Resilience4j ์กฐํ•ฉ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ , ์„œ๋น„์Šค ์ˆ˜์™€ ์šด์˜ ๋ณต์žก๋„๊ฐ€ ์ปค์กŒ์„ ๋•Œ Istio๋‚˜ Cilium ๊ฐ™์€ Service Mesh ๊ณ„์—ด์„ ๊ฒ€ํ† ํ•˜๋Š” ํ๋ฆ„์ด ์ ์ ˆํ•ด ๋ณด์ธ๋‹ค.

This post is licensed under CC BY 4.0 by the author.