Pod

Kubernetes์˜ ๊ฐ€์žฅ ์ž‘์€ ๋ฐฐํฌ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ Container๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ™์€ Pod์˜ Container๋Š” Network์™€ Volume์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Probe๋Š” Container๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€, Traffic์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€, ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•œ์ง€๋ฅผ ๊ฐ๊ฐ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • startupProbe: ์ดˆ๊ธฐํ™”๊ฐ€ ๋๋‚ฌ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณตํ•˜๊ธฐ ์ „์—๋Š” ๋‹ค๋ฅธ Probe๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • readinessProbe: ์ง€๊ธˆ Traffic์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด Service์—์„œ ์ œ์™ธํ•˜์ง€๋งŒ ์žฌ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • livenessProbe: ์žฌ์‹œ์ž‘ํ•ด์•ผ๋งŒ ๋ณต๊ตฌ๋˜๋Š” ๊ณ ์žฅ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด Container๋ฅผ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
containers:
  - name: app
    image: example/app
    startupProbe:
      httpGet:
        path: /health/startup
        port: 8080
      periodSeconds: 5
      failureThreshold: 30
    readinessProbe:
      httpGet:
        path: /health/ready
        port: 8080
    livenessProbe:
      httpGet:
        path: /health/live
        port: 8080
  • Startup์˜ ํ—ˆ์šฉ ์‹œ๊ฐ„์€ ์ตœ์•…์˜ ์ •์ƒ ์ดˆ๊ธฐํ™” ์‹œ๊ฐ„๋ณด๋‹ค ๊ธธ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Readiness๋Š” ํ•ด๋‹น Pod๋กœ Traffic์„ ๋ณด๋‚ด์ง€ ์•Š๋Š” ํŽธ์ด ๋‚˜์„ ๋•Œ๋งŒ ์‹คํŒจ์‹œํ‚ต๋‹ˆ๋‹ค.
  • Liveness์— DB๋‚˜ ์™ธ๋ถ€ API์ฒ˜๋Ÿผ ์žฌ์‹œ์ž‘์œผ๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ๋ฅผ ๋„ฃ์œผ๋ฉด ์—ฌ๋Ÿฌ Pod๊ฐ€ ํ•จ๊ป˜ ์žฌ์‹œ์ž‘ํ•˜๋ฉฐ ์žฅ์• ๋ฅผ ํ‚ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ReplicaSet

Pod๋ฅผ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜๋งŒํผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

  • ๊ณ„์† ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์—ฌ Pod ๊ฐœ์ˆ˜๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ๋…์œผ๋กœ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๊ณ , ๋ณดํ†ต Deployment๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Deployment

ReplicaSet์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ƒ์œ„ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

  • Pod๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ RollingUpdate ๋ฐฉ์‹์—์„œ๋Š” ์ƒˆ ReplicaSet์„ ๋งŒ๋“ค๊ณ , ์ƒˆ Pod๋ฅผ ๋Š˜๋ฆฌ๋ฉด์„œ ๊ธฐ์กด Pod๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

StatefulSet

Deployment์™€ ๋น„์Šทํ•˜๊ฒŒ Pod๋ฅผ ๊ด€๋ฆฌํ•˜์ง€๋งŒ, ๊ฐ Pod์— ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ด๋ฆ„๊ณผ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. Pod๊ฐ€ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์ ธ๋„ name-0, name-1 ๊ฐ™์€ ์ด๋ฆ„์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ, Pod๋งˆ๋‹ค ์—ญํ• ์ด ๋‹ค๋ฅธ Database๋‚˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ OrderedReady ๋ฐฉ์‹์—์„œ๋Š” Pod๋ฅผ ๋ฒˆํ˜ธ์ˆœ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์—ญ์ˆœ์œผ๋กœ ์ค„์ž…๋‹ˆ๋‹ค. Parallel์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฐ”๋€Œ์ง€ ์•Š๋Š” DNS ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Headless Service๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • volumeClaimTemplates๋กœ Pod๋งˆ๋‹ค PVC๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. StatefulSet์„ ์ค„์ด๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด๋„ PVC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ์ •๋œ ์ด๋ฆ„๊ณผ ์‹คํ–‰ ์ˆœ์„œ๋งŒ์œผ๋กœ ์ž‘์—…์ด ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋ณด์žฅ์ด ํ•„์š”ํ•˜๋ฉด Leader election๊ณผ ์ค‘๋ณต ์‹คํ–‰์„ ๊ฒฌ๋””๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Job

์ผํšŒ์„ฑ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

  • Pod๋ฅผ ๋งŒ๋“ค์–ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์™„๋ฃŒ๋˜๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์‹œ์— ์‹คํ–‰ํ•  Pod ์ˆ˜์™€ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์ž‘์—…์ด ๋‘ ๋ฒˆ ์‹œ์ž‘๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•˜๋ฉด ์ค‘๋ณต ์‹คํ–‰๋˜์–ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

CronJob

Job์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

  • cron ํ‘œํ˜„์‹์œผ๋กœ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋“œ๋ฌผ๊ฒŒ ์‹คํ–‰์ด ๋น ์ง€๊ฑฐ๋‚˜ ๋‘ ๋ฒˆ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ค‘๋ณต ์‹คํ–‰๋˜์–ด๋„ ์•ˆ์ „ํ•œ ์ž‘์—…์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • concurrencyPolicy๋กœ ์ด์ „ ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š์•˜์„ ๋•Œ ์ƒˆ ์ž‘์—…์„ ์‹คํ–‰ํ• ์ง€ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • startingDeadlineSeconds๋กœ ๋Šฆ์–ด์ง„ ์ž‘์—…์„ ์–ธ์ œ๊นŒ์ง€ ์‹คํ–‰ํ• ์ง€ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Schedule ๋ณ€๊ฒฝ์€ ์•ž์œผ๋กœ ์ƒ์„ฑ๋  Job์—๋งŒ ์ ์šฉ๋˜๋ฉฐ, ์ด๋ฏธ ์ƒ์„ฑ๋œ Job์€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Service

Pod๋ฅผ Network์— ๋…ธ์ถœํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

Pod๋Š” ๋‹ค์‹œ ๋งŒ๋“ค์–ด์งˆ ๋•Œ IP๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Service๋Š” ๋ณ€ํ•˜๋Š” Pod๋“ค์„ ํ•˜๋‚˜์˜ ๊ณ ์ •๋œ ์ฃผ์†Œ์™€ DNS ์ด๋ฆ„์œผ๋กœ ๋ฌถ์–ด, ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ๊ฐœ๋ณ„ Pod์˜ ์ฃผ์†Œ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Selector์™€ ์ผ์น˜ํ•˜๋Š” Pod๋Š” Service์˜ Endpoint์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ClusterIP Service๋Š” Cluster ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Node

Cluster๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌผ๋ฆฌ ์„œ๋ฒ„ ๋˜๋Š” VM์ž…๋‹ˆ๋‹ค.

Pod๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ๊ณณ์ด๋ฉฐ, kubelet๊ณผ Container runtime์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Network ๊ตฌ์„ฑ์— ๋”ฐ๋ผ kube-proxy ๋˜๋Š” ์ด๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๋„๊ตฌ๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Control plane Node๋Š” Cluster๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , Worker Node๋Š” ์ฃผ๋กœ Application์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋‘˜์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ Node๊ฐ€ ์•„๋‹ˆ๋ผ, ์„ค์น˜๋œ Component์™€ Scheduling ์„ค์ •์— ๋”ฐ๋ผ ๋‚˜๋‰˜๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค.

Service Mesh

Service Mesh๋Š” ๊ฐ Service ์•ž์˜ Proxy๊ฐ€ Service ๊ฐ„ Traffic์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. Application๋งˆ๋‹ค ๊ฐ™์€ ํ†ต์‹  ๊ธฐ๋Šฅ์„ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ , Cluster ์ „์ฒด์— ์ผ๊ด€๋œ Trafficยท๋ณด์•ˆ ์ •์ฑ…๊ณผ ๊ด€์ธก ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์—ญํ• 
L7 Traffic ๊ด€๋ฆฌ์š”์ฒญ ๋‹จ์œ„ Load balancing, Retry, Timeout
mTLSService ๊ฐ„ ์ธ์ฆ๊ณผ ํ†ต์‹  ์•”ํ˜ธํ™”
๊ด€์ธกMetric, Trace, Log ์ˆ˜์ง‘
์ ‘๊ทผ ์ œ์–ดService ๊ฐ„ ํ˜ธ์ถœ ๊ถŒํ•œ ๊ด€๋ฆฌ

gRPC Load balancing์€ Service Mesh๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Kubernetes Service๋Š” ๋ณดํ†ต IP ์ฃผ์†Œ์™€ Port๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ์„ Pod์— ๋‚˜๋ˆ  ์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ gRPC๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” HTTP/2๋Š” ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋กœ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๊ณ„์† ๋ณด๋‚ด๋ฏ€๋กœ, ์ฒ˜์Œ ์„ ํƒ๋œ Pod์— ์š”์ฒญ์ด ๋ชฐ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Service Mesh๋Š” gRPC ์š”์ฒญ์„ ์ดํ•ดํ•˜๊ณ  ์š”์ฒญ ๋‹จ์œ„๋กœ ์—ฌ๋Ÿฌ Pod์— ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ gRPC ๋ถ„์‚ฐ๋งŒ ํ•„์š”ํ•˜๋‹ค๋ฉด Headless Service์™€ Client-side load balancing ๋˜๋Š” L7 Proxy๋กœ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ Service์— mTLS, Traffic ์ •์ฑ…, ๊ด€์ธก, ์ ‘๊ทผ ์ œ์–ด๊นŒ์ง€ ํ•จ๊ป˜ ์ ์šฉํ•  ๋•Œ Service Mesh์˜ ๊ฐ€์น˜๊ฐ€ ์ปค์ง‘๋‹ˆ๋‹ค. ๊ทธ ๋Œ€์‹  ์šด์˜ํ•  Component์™€ Resource ์‚ฌ์šฉ๋Ÿ‰๋„ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์œผ๋กœ Istio์™€ Linkerd๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ