๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Back
NestJs
50-kubernetes-helm

1. Kubernetes

1.1 Kubernetes๋ž€?

Kubernetes๋Š” Google์—์„œ ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ Orchestration ์‹œ์Šคํ…œ์ด๋‹ค. ๋งŽ์€ ํšŒ์‚ฌ๋“ค์ด ๊ธฐ์—ฌํ•˜๊ณ  ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก CNCF์— ๊ธฐ๋ถ€ ๋˜์—ˆ๊ณ , ํ˜„์žฌ ์ „์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Orchestration ๊ธฐ์ˆ ์ด๋‹ค

  • ์ž๋™ ๋ฐฐํฌ ๋ฐ ์Šค์ผ€์ผ๋ง : ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ž๋™์œผ๋กœ ์—…์Šค์ผ€์ผ๋ง ๋˜๋Š” ๋‹ค์šด์Šค์ผ€์ผ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๊ฐ€์น˜์œ  (self-healing) : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ˜์‘์ด ์—†์–ด์ง€๋ฉด ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ต์ฒดํ•œ๋‹ค.
  • Load Balancing : ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์— ํŠธ๋ž˜ํ”ฝ์„ ์ž๋™์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค.
  • Service Discovery : ๋ณต์žกํ•œ ์ ˆ์ฐจ ์—†์ด ์ž๋™์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ„ ํ†ต์‹ ์„ ์ œ๊ณตํ•œ๋‹ค.
  • Resource Management : CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ๋ถ„ํ•˜์—ฌ ํ•˜๋“œ์›จ์–ด ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
  • Rolling Update / Rollback : ๋‹ค์šดํƒ€์ž„ ์—†์ด ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์†์‰ฝ๊ฒŒ ๋กค๋ฐฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค

1.2 Kubernetes Node

nestjs-fastcam-kubernetes_50-1

Kubernetes๊ฐ€ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ปดํ“จํ„ฐ ์ž์›์„ Node๋ผ๊ณ  ๋ช…์นญํ•œ๋‹ค.

Node์˜ ์ข…๋ฅ˜

  • Master Node (Control Plane Node) : API Server, Scheduler, Controller, Manager ๋“ฑ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์œผ๋ฉฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ ํ„ฐ ์ „์ฒด๋ฅผ ํ†ต์ œํ•œ๋‹ค. Master Node์—๋Š” Pod๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Worker Node : ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ์‹คํ–‰๋˜๋Š” Node์ด๋‹ค

Worker Node์˜ ๊ตฌ์„ฑ

  • Kubelet : Master Node์™€ ํ†ต์‹ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ •ํ™•ํ•œ ์ŠคํŽ™์œผ๋กœ Pod๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  Pod๋“ค์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ํŠธ๋กคํ•œ๋‹ค.
  • Container Runtime : Docker, ContainerD๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋Ÿฐํƒ€์ž„์ด๋‹ค.
  • Kube Proxy : ๊ฐ ๋…ธ๋“œ์˜ ๋„คํŠธ์›Œํฌ ๋ฃฐ์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค
  • Pod :์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ด๋‹ค. ํ•˜๋‚˜์˜ Pod์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ณดํ†ต ํ•˜๋‚˜์˜ Po ๋งŒ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

1.3 Kubernetes Pod

nestjs-fastcam-kubernetes_50-2

  • Kubernetes Node์—๋Š” Pod๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Pod๋Š” Kubernetes์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„์ด๋‹ค.

1.4 Multiple Kubernetes Pod

nestjs-fastcam-kubernetes_50-3

  • ๋ฆฌ์†Œ์Šค๋งŒ ํ—ˆ๋ฝํ•œ๋‹ค๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ Pod๋ฅผ Node์—์„œ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์‹ค์ œ ๋ชฉ์ )
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ Node์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋˜๋Š” ์„ค์ •์„ ํ†ตํ•ด ํŠน์ • Node์—๋งŒ Pod๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

1.5 Multiple Containers in Pod

nestjs-fastcam-kubernetes_50-4

  • Pod ํ•˜๋‚˜์—๋Š” ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๊ฒŒ ์ผ๋ฐ˜์ ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ฐ€์ ‘ํ•œ ํ†ต์‹ ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ Pod์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

nestjs-fastcam-kubernetes_50-5

  • A Pod์˜ ๋ณด์กฐ ์—ญํ• ์„ ํ•˜๋Š” B Pod๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด A Pod๊ฐ€ ์ƒ์„ฑ ๋ ๋•Œ๋งˆ๋‹ค B Pod๋ฅผ ํ•ญ์ƒ ํ•จ๊ป˜ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.
  • ๋งค๋ฒˆ ๋‘๊ฐœ์˜ Pod๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‚ญ์ œํ•˜๋ ค๋ฉด ๋งค์šฐ ๋ฒˆ๊ฑฐ๋Ÿฝ๊ณ  Pod๊ฐ„์˜ ํ†ต์‹ ๋„ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ Pod์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค

1.6 ReplicaSet

ReplicaSet์€ Kubernetes ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ์˜ ํ•ต์‹ฌ์œผ๋กœ ๋ช…์‹œ๋œ Pod ๊ฐฏ์ˆ˜๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • High Availability : ํ•œ๊ตญ์–ด๋กœ ํ”ํžˆ โ€œ๊ณ ๊ฐ€์šฉ์„ฑโ€์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ•œ๋‹ค.
    • ๋˜‘๊ฐ™์€ Pod๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋ณต์ œํ•ด์„œ ์–ด๋А ํ•œ Pod๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ ์ฃฝ๋”๋ผ๋„,
      • ๋‹ค๋ฅธ Pod๊ฐ€ ์—ญํ• ์„ ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š”๊ฑธ ์ด์•ผ๊ธฐํ•œ๋‹ค.
    • Kubernetes์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ณตํ•™์ ์ธ ๊ฐœ๋… ์ด๋‹ค.
  • Load Balancing :
    • ์—ฌ๋Ÿฌ๊ฐœ์˜ Pod๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๊ณ ์žˆ๋Š” Pod๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋‹ค.
    • Kubernetes๋Š” ์ž๋™์œผ๋กœ Load Balancing์„ ํ•ด์ค€๋‹ค
  • Scaling : ์„ค์ •ํ•œ Pod์˜ ๊ฐฏ์ˆ˜๋งŒํผ ์ž๋™์œผ๋กœ Pod ๊ฐฏ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ์ค„์–ด๋“ค๋„๋ก ํ•ด์ค€๋‹ค.
    • ReplicaSet์€ ํ•˜๋‚˜์˜ `Node์— ๊ท€์†๋˜์ง€ ๊ณ  ์—ฌ๋Ÿฌ Node์— ๊ฑธ์ณ ์„ค์ • ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Label Selector : ๋ ˆ์ด๋ธ” ์ •์˜์— ๋”ฐ๋ผ ReplicaSet ์ •์˜์— ์ž…๋ ฅํ•ด๋‘์ง€ ์•Š์€ Pod๋“ค๋„ ReplicaSet์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

nestjs-fastcam-kubernetes_50-6

ReplicaSet์€ ๊ฐ™์€ ๋ ˆ์ด๋ธ”์˜ Pod๋“ค์ด ์ •์˜๋œ ๊ฐฏ์ˆ˜๋งŒํผ ํ•ญ์ƒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋„๋กํ•œ๋‹ค.


1.7 Deployment

nestjs-fastcam-kubernetes_50-7

  • Deployment๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ReplicaSet์„ ์ƒ์„ฑํ•œ๋‹ค
  • Deployment๋Š” ReplicaSet์— Rolling Update์™€ Rollback ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋ผ์žˆ๋‹ค

1.8 Rolling Update

nestjs-fastcam-kubernetes_50-8

  • Blue Green Update๋ฅผ ์—…๋ฐ์ดํŠธ ํ• ๋•Œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‘๋ฐฐ๋กœ ํ•„์š”ํ•˜๋‹ค.
  • Rolling Update๋ฅผ ํ•˜๋ฉด ์ตœ์†Œํ•œ์˜ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋กœ ์ „์ฒด ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Blue Green Update๋Š” ๋„คํŠธ์›Œํฌ ์„ค์ •์ด ์กฐ๊ธˆ ์—‡๋‚˜๊ฐ€๋ฉด ์„œ๋น„์Šค์— ๋‹ค์šดํƒ€์ž„์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • Rolling Update๋Š” ์„œ์„œํžˆ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šดํƒ€์ž„์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

nestjs-fastcam-kubernetes_50-9


1.9 Namespaces

nestjs-fastcam-kubernetes_50-10

  • Namespace๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • Namespace๊ฐ€ ๋‹ค๋ฅธ Pod๋ผ๋ฆฌ ํ†ต์‹ ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ kubectl CLI๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ํ˜„์žฌ ์ง€์ •๋ผ์žˆ๋Š” namespace๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰๋œ๋‹ค

1.10 ConfigMaps/Secrets

  • ConfigMap๊ณผ Secret์€ Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋‹ค.
  • Pod์— ConfigMap์ด๋‚˜ Secret์— ์„ค์ •๋œ ๊ฐ’๋“ค์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ฃผ์ž… ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ConfigMap์€ Plain Text๋กœ ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
    • ์ข‹์€ ์˜ˆ์ œ๋กœ๋Š” URL, ํฌํŠธ ์ •๋ณด๋“ฑ์ด ์žˆ๋‹ค.
  • Secret์€ ์•”ํ˜ธํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฐ’๋“ค์„ ์ €์žฅํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ข‹์€ ์˜ˆ์ œ๋กœ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ, API ํ‚ค, ์ธ์ฆ์„œ๋“ฑ์ด ์žˆ๋‹ค

1.11 Readiness Probe / Liveness Probe

nestjs-fastcam-kubernetes_50-11

  • Readiness Probe์™€ Liveliness Probe๋Š” ๋ชจ๋‘ Container์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค

1.12 Readiness Probe / Liveness Probe

Liveness ProbeReadiness Probe
๋ชฉ์ Container๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹คContainer๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
์‹คํŒจ์‹œ ์•ก์…˜Container๋ฅผ ์žฌ์‹œ์ž‘ํ•œ๋‹คPod๋ฅผ ์„œ๋น„์Šค ์—”๋“œํฌ์ธํŠธ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
๋”์ด์ƒ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค (์žฌ์‹œ์ž‘์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค)

1.13 Kubernetes Services

  • Kubernetes Service๋Š” Pod๋“ค์„ ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • Kubernetes Service๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ NodePort, ClusterIP๊ฐ€ ์กด์žฌํ•œ๋‹ค.

1.14 NodePort

nestjs-fastcam-kubernetes_50-12

  • NodePort๋Š” ๋ง ๊ทธ๋Œ€๋กœ โ€œ์™ธ๋ถ€์—์„œโ€ Node์— ์ ‘์† ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํฌํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • 30000๋ฒˆ ํฌํŠธ๋ถ€ํ„ฐ 32767๋ฒˆ ํฌํŠธ๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ Pod๋ฅผ Load Balancing ํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฌ๋Ÿฌ๊ฐœ์˜ Node๋ฅผ ํฌ๊ด„ ํ• ์ˆ˜๋„ ์žˆ๋‹ค.

1.15 ClusterIP

nestjs-fastcam-kubernetes_50-13

  • ClusterIP๋Š” Kubernetes์˜ Pod๋ผ๋ฆฌ ํ†ต์‹  ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋‹ค.
  • Kubernetes์—์„œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ™์€ Pod๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์‹คํ–‰ํ•ด์„œ Horizontal Scaling์„ ํ•˜๊ณ ,
    • ์–ธ์ œ๋‚˜ Pod๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ์ƒˆ๋กœ ์ƒ๊ฒจ์„œ IP ๊ฐ€ ๋ณ€๋™์ ์ด๋‹ˆ ๊ฐ™์€ Pod๋“ค์„ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์ด ํ•„์š”ํ•˜๋‹ค.
    • ClusterIP๊ฐ€ ๋ฐ”๋กœ ์ด ์—ญํ• ์„ ํ•ด์ค€๋‹ค.

1.16 Ingress

nestjs-fastcam-kubernetes_50-14

  • NodePort ๋Œ€์‹  LoadBalancer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์šฐ๋“œ LoadBalancer๋ฅผ ํ”„๋กœ๋น„์ ธ๋‹ ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ œ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก LoadBalancer๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๊ณ ,
    • LoadBalancer ๋ณ„๋กœ ์„ธํŒ…์„ ๋”ฐ๋กœ ํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

nestjs-fastcam-kubernetes_50-15

  • Ingress๋Š” ๋ณต์žกํ•œ Kubernetes์™€ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ํ•œ๋ฒˆ์— ์—ฐ๋™ ํ•ด์ค„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

1.17 Persistent Volue & Claim

nestjs-fastcam-kubernetes_50-15

  • Persistent Volume์€ ํŠน์ • Pod์™€ ๊ด€๊ณ„ ์—†์ด ์ €์žฅ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐ์ •ํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
    • ์›ํ•˜๋Š” ํฌ๊ธฐ๋กœ PV๋ฅผ ๋ฐฐ์ •ํ•ด๋‘๋ฉด Pod์—์„œ PV๊ฐ€ ํ•„ ์š”ํ• ๋•Œ PVC๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ PV๋ฅผ ํ• ๋‹น๋ฐ›๊ฒŒ ๋œ๋‹ค.
  • PVC๋Š” PV๋ฅผ ์ ์œ ํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
    • Pod์—์„œ ํ•„์š”ํ•œ ์ŠคํŽ™์˜ ์ €์žฅ ๊ณต๊ฐ„์„ PVC๋กœ ์ •์˜ํ•˜๋ฉด,
    • Kubernetes์—์„œ ์ž๋™์œผ๋กœ ํ˜„์žฌ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” PV ์ค‘์— ์ ํ•ฉํ•œ ์ €์žฅ์†Œ๋ฅผ ๋ฐฐ์ •ํ•ด์ค€๋‹ค

1.18 Pod Definition

1
apiVersion: v1
2
kind: Pod
3
metadata:
4
name: nginx-pod
5
labels:
6
app: proxy
7
type: back-end
8
9
spec:
10
containers:
11
- name: nginx-container
12
image: nginx:1.14.2
13
ports:
14
- containerPort: 80

1.19 Replicaset

1
apiVersion: apps/v1
2
kind: ReplicaSet
3
metadata:
4
name: nginx-replicaset
5
labels:
6
app: nginx-app
7
type: back-end
8
9
spec:
10
replicas: 3
11
template:
12
metadata:
13
labels:
14
app: nginx-app
15
type: back-end
16
spec:
17
containers:
18
- name: nginx-container
19
image: nginx
20
ports:
21
- containerPort: 80
22
selector:
23
matchLabels:
24
app: nginx-app
25
type: back-end
1
apiVersion: v1
2
kind: Pod
3
metadata:
4
name: nginx-pod
5
labels:
6
app: proxy
7
type: back-end
8
9
spec:
10
containers:
11
- name: nginx-container
12
image: nginx:1.14.2
13
ports:
14
- containerPort: 80

1.20 Deployment

1
apiVersion: apps/v1
2
kind: Deployment
3
metadata:
4
name: nginx-deployment
5
labels:
6
app: nginx-app
7
type: back-end
8
9
spec:
10
replicas: 3
11
template:
12
metadata:
13
labels:
14
app: nginx-app
15
type: back-end
16
spec:
17
containers:
18
- name: nginx-container
19
image: nginx
20
ports:
21
- containerPort: 80
22
selector:
23
matchLabels:
24
app: nginx-app
25
type: back-end

2. Helm

2.1 Helm ์†Œ๊ฐœ

Helm์€ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์™€ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ๋‹ค.

  • Helm ์ฃผ์š” ๋‹จ์œ„๋Š” Chart๋‹ค. Chart๋Š” Kubernetes ๋ฆฌ์†Œ์Šค(YAML ํŒŒ์ผ)์˜ ๋ชจ์Œ์œผ๋กœ, Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ํ•„์š”ํ•œ ๋ชจ ๋“  ์„ค์ •๊ณผ ํ…œํ”Œ๋ฆฟ์„ ํฌํ•จํ•œ๋‹ค.
  • Helm์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ Kubernetes ๋ฐฐํฌ๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Helm์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • Chart ๊ด€๋ฆฌ : Helm์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง€๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์™€ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ„ํŽธํ•œ ๋ฐฐํฌ์™€ ์—…๊ทธ๋ ˆ์ด๋“œ : Helm ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ์ฐจํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์— ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ : Helm์€ ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „์„ ํ†ตํ•ด ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์‰ฝ๊ฒŒ ๋กค๋ฐฑํ•˜๊ฑฐ๋‚˜ ์ตœ์‹  ์ƒํƒœ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. (Kubernetes์˜ ๋ฉ”์ด์ € ์•ฝ์  ์ค‘ ํ•˜๋‚˜)
  • ํ…œํ”Œ๋ฆฟํ™” : YAML ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟํ™”ํ•˜์—ฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ์ฐจํŠธ๋ฅผ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.2 Helm Chart์˜ ๊ตฌ์„ฑ

Chart.yaml

  • ์ฐจํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ด๋‹ค. ์ฐจํŠธ์˜ ์ด๋ฆ„, ๋ฒ„์ „, ์„ค๋ช…, ๊ด€๋ฆฌ์ž, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์ž…๋ ฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
  • ์ฐจํŠธ์˜ ํ•ต์‹ฌ ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฐฐํฌ๋  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฒ„์ „์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค

values.yaml

  • ๊ธฐ๋ณธ ์„ค์ • ๊ฐ’์„ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค.
  • ์ฐจํŠธ์˜ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์—์„œ ์ด ๊ฐ’์„ ์ฐธ์กฐํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ™์€ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€ ์ด์…˜์„ ์‰ฝ๊ฒŒ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์œผ๋กœ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•ต์‹ฌ ์š”์†Œ๋‹ค.

templates ํด๋”

  • ์‹ค์ œ Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋Š” YAML ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ๋“ค์ด ํฌํ•จ๋œ ๊ณต๊ฐ„์ด๋‹ค.
  • Deployment, Service, ConfigMap ๋“ฑ ๋ชจ๋“  Kubernetes ํŒŒ์ผ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
    • values.yaml ํŒŒ์ผ์— ์ •์˜๋œ ๊ฐ’๋“ค์„ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

helpers.tpl

  • ์—ฌ๋Ÿฌ ํ…œํ”Œ๋ฆฟ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์ €์žฅ ํ•ด๋‘๋Š” ํŒŒ์ผ์ด๋‹ค.
  • {{ include "test-function" . }}๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•˜ ์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Charts ํด๋”

  • ์ฐจํŠธ ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๋Š” ๊ณณ์ด๋‹ค

2.3 Charts.yaml

1
apiVersion: v2
2
name: my-chart
3
version: 1.0.0
4
description: A Helm chart for Kubernetes
5
appVersion: 1.0.0

2.4 values.yaml

1
replicaCount: 3
2
image:
3
repository: nginx
4
tag: latest
5
service:
6
type: ClusterIP
7
port: 80

2.5 values.yaml ์‚ฌ์šฉ๋ฒ•

1
apiVersion: apps/v1
2
kind: Deployment
3
metadata:
4
name: {{ .Release.Name }}-app
5
labels:
6
app : {{ .Release.Name }}-app
7
spec:
8
replicas: {{ .Values.replicaCount }}
9
selector:
10
matchLabels:
11
app: {{ .Release.Name }}-app
12
template:
13
metadata:
14
labels:
15
app: {{ .Release.Name }}-app
16
spec:
17
containers:
18
- name: {{ .Release.Name }}-container
19
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
20
ports:
21
- containerPort: {{ .Values.service.port }}
22
env:
23
- name: ENVIRONMENT
24
value: {{ .Values.environment }}
1
replicaCount: 2
2
3
image:
4
repository: nginx
5
tag: latest
6
7
service:
8
port: 80
9
10
environment: 'development'

2.6 Helm CLI ๊ธฐ๋Šฅ - ๋ฐฐํฌ

1
# ๋ฌธ๋ฒ•
2
helm install <release-name> <chart-directory> --values <values-file>
3
4
# ์˜ˆ์ œ
5
helm install my-app ./my-chart
1
NAME: my-app
2
LAST DEPLOYED: Thu Nov 7 12:00:00 2024
3
NAMESPACE: default
4
STATUS: deployed
5
REVISION: 1
6
NOTES:
7
1. Get the application URL by running these commands:
8
export POD_NAME=$(kubectl get pods --namespace default -l "app=my-app" -o jsonpath="{.items[0].metadata.name}")
9
echo "Visit http://127.0.0.1:8080 to use youur application"
10
kubectl port-forward $POD_NAME 8080:80

2.7 Helm CLI ๊ธฐ๋Šฅ - ์—…๋ฐ์ดํŠธ

1
# ๋ฌธ๋ฒ•
2
helm upgrade <release-name> <chart-directory> --set <variables>
3
4
# ์˜ˆ์ œ
5
helm upgrade my-app ./my-chart --set image.tag=2.0.0
1
Release "my-app" has been upgraded. Happy Helming!
2
NAME: my-app
3
LAST DEPLOYED: Thu Nov 7 12:05:00 2024
4
NAMESPACE: default
5
STATUS: deployed
6
REVISION: 2

2.8 Helm CLI ๊ธฐ๋Šฅ - ๋ฆด๋ฆฌ์Šค ํžˆ์Šคํ† ๋ฆฌ ํ™•์ธ

1
# ๋ฌธ๋ฒ•
2
helm history <release-name>
3
4
# ์˜ˆ์ œ
5
helm history my-app
1
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
2
1 Thu Nov 7 12:00:00 2024 deployed my-chart-1.0 1.0 Install complete
3
2 Thu Nov 7 12:05:00 2024 superseded my-chart-1.0 2.0 Upgrade complete
4
3 Thu Nov 7 12:10:00 2024 deployed my-chart-1.0 1.0 Rollback to 1

2.9 Helm CLI ๊ธฐ๋Šฅ - ๋กค๋ฐฑ

1
# ๋ฌธ๋ฒ•
2
helm rellback <release-name> <revision>
3
4
# ์˜ˆ์ œ
5
helm rellback my-app 1
1
Rollback was a success! Happy Helming!

2.10 Helm CLI ๊ธฐ๋Šฅ - ํ˜„์žฌ ๋ฆด๋ฆฌ์ฆˆ ํ™•์ธ

1
# ๋ฌธ๋ฒ•
2
helm status <release-name>
3
4
# ์˜ˆ์ œ
5
helm status my-app
1
NAME: my-app
2
LAST DEPLOYED: Thu Nov 7 12:10:00 2024
3
NAMESPACE: default
4
STATUS: deployed
5
REVISION: 3
6
NOTES:
7
1. Get the application URL by running these commands:
8
export POD_NAME=$(kubectl get pods --namespace default -l "app=my-app" -o jsonpath="{.items[0].metadata.name}")
9
echo "Visit http://127.0.0.1:8080 to use youur application"
10
kubectl port-forward $POD_NAME 8080:80

2.11 ๊ธฐํƒ€ ๊ธฐ๋Šฅ

  • Artifact Hub์— Helm Chart๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Templating์„ ์‚ฌ์šฉํ•ด์„œ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ์ •์˜ ํ•ด๋‘˜ ์ˆ˜ ์žˆ๋‹ค.