๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ปTech/๐Ÿณdocker, kubernetes

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐœ๋…

by _viper_ 2024. 4. 7.
๋ฐ˜์‘ํ˜•

Kubernetes Concept

Kubernetes

  • ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ, ํ™•์žฅ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ
  • ์‚ฌ์šฉ ์ด์œ 
    • ์„œ๋ฒ„ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ๊ธฐ์—…๋“ค์€ ํฐ ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ
    • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ์„œ๋ฒ„ ์ž์›์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

VM vs Container

  • VM ๊ฐ€์ƒํ™”๋Š” ๋ณ„๋„์˜ Guest OS๋ฅผ ๊ฐ€์ง€๊ณ  ์‹คํ–‰ํ•จ
  • ์ปจํ…Œ์ด๋„ˆ๋Š” Host OS์˜ ์ปค๋„์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ๊ณ  VM๋ณด๋‹ค ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณต

 

Container Runtime

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด (Docker, containerd, CRI-O)
  • k8s์—์„œ๋Š” v1.23๊นŒ์ง€๋งŒ Docker๋ฅผ ์ง€์›ํ•˜๊ณ  ๊ทธ ์ดํ›„ ๋ฒ„์ „์—์„œ deprecated, ๋„์ปค๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ–์€ containerd๋ฅผ ์‚ฌ์šฉ

 

Kubernetes ์šฉ์–ด

  • Node: k8s์˜ ์›Œ์ปค ์—ญํ• 
  • Pod: k8s์˜ ์ตœ์†Œ ๋ฐฐํฌ ๋‹จ์œ„๋กœ์„œ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ(๋„์ปค ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ)๋ฅผ ํฌํ•จํ•˜๊ณ  ์ด๋“ค์„ ๊ด€๋ฆฌ
  • Service: ์™ธ๋ถ€์—์„œ pod์— ์ ‘๊ทผ์„ ์œ„ํ•œ ์—ฐ๊ฒฐ
  • Namespace: k8s์—์„œ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์˜ ๊ฒฉ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ถ”์ƒ์  ๊ฐœ๋…
  • ResourceQuota: ๊ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ „์ฒด ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œ
  • LimitRange: ์ปจํ…Œ์ด๋„ˆ๋‚˜ ํŒŒ๋“œ์˜ ๋ฆฌ์†Œ์Šค ์ œํ•œ
  • ConfigMap: ์„ค์ • ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๊ณ  Pod์— ์ „๋‹ฌ
  • Secrets: ์•”ํ˜ธ,ํ† ํฐ๊ณผ ๊ฐ™์€ ์ค‘์š” ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ
  • Controller: ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ํŒŒ๋“œ์˜ ์ƒ์„ฑ ๋˜๋Š” ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜๋Š” ์ปจํŠธ๋กค ๋ฃจํ”„
    • Replication Controller(Deprecated), ReplicatSet: ํŒŒ๋“œ๊ฐ€ ์ฃฝ์œผ๋ฉด ๊ฐ์ง€ํ•ด์„œ ๋ณต๊ตฌ, ์Šค์ผ€์ผ ์ธ-์•„์›ƒ, ์‹คํ–‰ํ•  ํŒŒ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ์ง€์ •ํ•œ ๊ฐœ์ˆ˜๋งŒํผ ํŒŒ๋“œ๊ฐ€ ์œ ์ง€๋˜๋„๋ก ๊ด€๋ฆฌ
    • Deployment: ๋ฐฐํฌ ํ›„์— ํŒŒ๋“œ๋ฅผ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ, ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ์‰ฝ๊ฒŒ ๋กค๋ฐฑ
    • DaemonSet: ํ•œ ๋…ธ๋“œ์˜ ํŒŒ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์œ ์ง€ (Prometheus - ์„ฑ๋Šฅ ์ˆ˜์ง‘, fluentd - ๋กœ๊ทธ ์ˆ˜์ง‘, GlusterFS - ์Šคํ† ๋ฆฌ์ง€ ๊ตฌ์„ฑ)
    • CronJob: Job์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ (Job์€ ํŠน์ • ์ž‘์—…๋งŒ ์‹คํ–‰ ํ›„ ์ข…๋ฃŒ)

Architecture

Kubernetes Architecture

  • Control Plane (master)
    • API ์„œ๋ฒ„ (kube-api-server): ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์˜ ์ค‘์‹ฌ ์—ญํ• 
    • ์Šค์ผ€์ค„๋Ÿฌ (kube-scheduler): ํŒŒ๋“œ(Pod)๋ฅผ ๋…ธ๋“œ์— ํ• ๋‹นํ•˜๋Š” ์—ญํ• 
    • ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ € (kube-controller-manager): ๋‹ค์–‘ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰. ์ด๋“ค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ณต์ œ ์ปจํŠธ๋กค๋Ÿฌ, ์—”๋“œํฌ์ธํŠธ ์ปจํŠธ๋กค๋Ÿฌ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ์„ ํฌํ•จ
    • etcd: ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ
  • Node (worker)
    • container runtime: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ (docker, containerd, cri-o)
    • kubelet: api-server์— ์˜ํ•ด ํ• ๋‹น๋œ ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 
    • kube-proxy: ๊ฐ ๋…ธ๋“œ์˜ ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ํŒŒ๋“œ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ด€๋ฆฌ

 

Kubernetes Cluster Architecture

  • Networking
    • Pod Network 
      • Pause Container: ํŒŒ๋“œ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ๊ด€๋ฆฌ
      • CNI Plugin: ๋…ธ๋“œ ๋‚ด,์™ธ ํŒŒ๋“œ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ด€๋ฆฌ
        • CNI(Container Network Interface)๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 
          • Calico, Weavenet, Flannel
        • kubenet ์ด๋ผ๋Š” ์ž์ฒด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ธ ๋‹จ์ ์œผ๋กœ, 3rd-party ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉ
    • Service Network
      • ์„œ๋น„์Šค๋ฅผ ํŒŒ๋“œ๋‚˜ CNI์— ์—ฐ๊ฒฐํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ๋กœ ํ†ต์‹ 
  • Storage
    • hostPath๋กœ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์™ธ๋ถ€ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๋‚ด๋ถ€ ํด๋Ÿฌ์Šคํ„ฐ์— 3rd-party ์Šคํ† ๋ฆฌ์ง€ ์†”๋ฃจ์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Logging
    • Core Pipeline
      • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ž์ฒด ๊ธฐ๋Šฅ(CLI)์œผ๋กœ ๋กœ๊น…
      • metric-server๋กœ ๊ฐ ๋…ธ๋“œ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์ •๋ณด๊ฐ€ ์ˆ˜์ง‘
        • kubectl top, kubectl log CLI ๋ช…๋ น์„ ํ†ตํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง
    • Service Pipeline
      • ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์„œ ๊ตฌ์„ฑ
        • ๋ชจ๋‹ˆํ„ฐ๋ง ๊ด€๋ จ๋œ ํŒŒ๋“œ๋“ค์ด ์ƒ์„ฑ๋จ > ํŒŒ๋“œ๋“ค์ด ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์—์„œ ์„œ๋ฒ„๋กœ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ > ํ•ด๋‹น ์ •๋ณด๋“ค์„ UI๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต

Object

Pod

  • ํŒŒ๋“œ๋Š” k8s์˜ ์ตœ์†Œ ๋ฐฐํฌ ๋‹จ์œ„๋กœ์„œ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ(๋„์ปค ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ)๋ฅผ ํฌํ•จํ•˜๊ณ  ์ด๋“ค์„ ๊ด€๋ฆฌ
  • ํŒŒ๋“œ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ํฌํŠธ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Œ
  • ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ip๋Š” ์ž๋™ ํ• ๋‹น๋˜๊ณ  ํœ˜๋ฐœ์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง (ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
  • Label
    • key-value ํ˜•ํƒœ๋กœ ํŒŒ๋“œ ์‚ฌ์šฉ ๋ชฉ์ ์„ ๊ตฌ๋ถ„ํ•˜๊ณ  ํŒŒ๋“œ์˜ ๋ผ๋ฒจ์„ ์„œ๋น„์Šค์—์„œ selector๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
  • Node Schedule
    • ํŒŒ๋“œ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์„ ํƒ (nodeSelector ๋ช…์‹œ)
    • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ง€์ • (request,limit ๋ฉ”๋ชจ๋ฆฌ ์ง€์ • ๊ฐ€๋Šฅ)

Service

  • ์„œ๋น„์Šค๋Š” pod์— ์ ‘๊ทผ์„ ์œ„ํ•œ ์—ฐ๊ฒฐ์„ ์ œ๊ณต
  •  ClusterIP
    • ํŒŒ๋“œ๋Š” ์„ฑ๋Šฅ์ด๋‚˜ ์‹œ์Šคํ…œ ์žฅ์• ๋กœ ์žฌ์ƒ์„ฑ๋˜๋ฉด ํŒŒ๋“œ์˜ ip๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์‹ ๋ขฐ์„ฑ์ด ๋–จ์–ด์ง
      • ์„œ๋น„์Šค์˜ ip๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๋ฉด ํŒŒ๋“œ์— ํ•ญ์ƒ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
    • Service Type์˜ Default ์„ค์ •
    • ์„œ๋น„์Šค์— ์—ฌ๋Ÿฌ ํŒŒ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ์„ ํ•ด์คŒ
    • ์™ธ๋ถ€ ์ ‘๊ทผ ๋ถˆ๊ฐ€, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์šด์˜์ž, ๋‚ด๋ถ€ ๋Œ€์‹œ๋ณด๋“œ ์šฉ๋„
  • NodePort
    • ๋ชจ๋“  ๋…ธ๋“œ์— ๊ฐ™์€ ์„œ๋น„์Šค ํฌํŠธ๊ฐ€ ํ• ๋‹น (port: 30000~32767)
    • ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ํฌํŠธ๋กœ ์ ‘์†์‹œ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ > ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํŒŒ๋“œ์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌ
    • ๋‚ด๋ถ€๋ง ์—ฐ๊ฒฐ, ๋ฐ๋ชจ๋‚˜ ์ž„์‹œ ์—ฐ๊ฒฐ ์šฉ๋„
  • LoadBalancer
    • ๋กœ๋“œ๋ฐธ๋Ÿฐ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ (๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ํ•„์š”)
    • ์™ธ๋ถ€ ์‹œ์Šคํ…œ ๋…ธ์ถœ ์šฉ๋„

 

Volume

  • emptyDir
    • pod์•ˆ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ํŒŒ๋“œ ์‚ญ์ œ์‹œ ๋ณผ๋ฅจ ์—†์–ด์ง
  • hostPath
    • ๊ฐ ๋…ธ๋“œ์˜ path๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ์‚ฌ์šฉ, ํŒŒ๋“œ๋“ค์ด ๋…ธ๋“œ ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ๋“œ๊ฐ€ ์‚ญ์ œ๋ผ๋„ ๋ณผ๋ฅจ ์œ ์ง€
    • ํŒŒ๋“œ๊ฐ€ ์žฌ์ƒ์„ฑ๋  ๋•Œ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ƒ๊ธฐ๋ฉด ๋ฌธ์ œ
    • ํŒŒ๋“œ ์ž์‹ ์ด ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ
    • ํŒŒ๋“œ ์ƒ์„ฑ ์ „ ๋…ธ๋“œ์— ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ์žˆ์–ด์•ผ ํ•จ
  • PVC/PV
    • User(์„œ๋น„์Šค๋‹ด๋‹น์ž), Admin(์šด์˜์ž) ์˜์—ญ์„ ๋‚˜๋ˆ„๊ณ 
    • Admin์€ ๊ฐ๊ฐ์˜ pv(nfs,git..) ์ •์˜
    • User๋Š” pv๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด pvc๋ฅผ ์ƒ์„ฑ
    • k8s๊ฐ€ pvc์— ์ ํ•ฉํ•œ pv๋ฅผ ์—ฐ๊ฒฐ ํ•ด์คŒ
    • ํŒŒ๋“œ ์ƒ์„ฑ์‹œ pvc๋ฅผ ์‚ฌ์šฉ
  • Dynamic Provisioning
    • StorageClass์™€ ํ”„๋กœ๋น„์ €๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ PV๋ฅผ ์ƒ์„ฑํ•ด์„œ PVC์™€ Bound ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

 

ConfigMap, Secret

  • ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋Š” ์„ค์ • ๊ฐ’๋“ค์„ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌ
  • secret์˜ value๋Š” Base64๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ ๊ฐ’์„ ๋„ฃ์–ด์•ผ ํ•จ
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
    • Env (Literal) - ์„ค์ •์— ์ƒ์ˆ˜ ๊ฐ’์„ ์ •์˜
    • Env (File) - ์„ค์ •์— File์„ ๋งคํ•‘, ํŒŒ์ผ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํŒŒ๋“œ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ
    • Volume Mount (File) - ์„ค์ •์— ๋งˆ์šดํŠธ ์ •๋ณด ๋“ฑ๋ก, ํŒŒ์ผ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํŒŒ๋“œ์— ๋ฐ˜์˜๋จ
    • ์ ์šฉ ํ›„ ํ™•์ธ์€ ์ปจํ…Œ์ด๋„ˆ ์ ‘์† ํ›„ env ๋ช…๋ น์–ด ์‹คํ–‰

 

Ingress

  • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ณ , ๋„๋ฉ”์ธ ๋˜๋Š” ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…
  • L4/L7์˜ ์—ญํ• ์„ Ingress๊ฐ€ ๋Œ€์‹  ํ•ด์คŒ
  • Ingress๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Service LoadBalancer ์™€ Canary Upgrade ๊ฐ€๋Šฅ
  • Ingress Controller (NGINX, Kong) ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜๊ฐ€ ํ•„์š”

Controller

Replication Controller(Deprecated), ReplicaSet

  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์ง€์ •๋œ ๋ณต์ œ ์ˆ˜์˜ ํŒŒ๋“œ๋ฅผ ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 
  • Template
    • ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ํŒŒ๋“œ์˜ ๋‚ด์šฉ์„ ์ •์˜
    • ํŒŒ๋“œ๊ฐ€ ๋‹ค์šด๋˜๋ฉด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์žฌ์ƒ์„ฑ
  • Replicas
    • replicas ๊ฐ’ ๋งŒํผ ํŒŒ๋“œ ์ˆ˜๋ฅผ ๊ด€๋ฆฌ
  • Selector 
    • Replication Controller์˜ selector๋Š” ํ‚ค์™€ ๋ผ๋ฒจ์ด ๊ฐ™์€ ํŒŒ๋“œ๋“ค๋งŒ ์—ฐ๊ฒฐ์„ ํ•ด์คŒ
    • ReplicaSet์˜ selector
      • matchLabels - Replication Controller์˜ selector์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ
      • matchExpressions - ๋ฐธ๋ฅ˜๋ฅผ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์œผ๋กœ ํŒŒ๋“œ๋“ค์„ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ

 

Deployment

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ์™€ ์—…๋ฐ์ดํŠธ๋ฅผ deployment๋กœ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅ
  • ์—…๋ฐ์ดํŠธ ๋ฐฉ์•ˆ
    • ReCreate
      • ์—…๋ฐ์ดํŠธ์‹œ deployment๋Š” ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ๋‹ค์šด ํƒ€์ž„์ด ๋ฐœ์ƒ
    • Rolling Update (default)
      • ์—…๋ฐ์ดํŠธ์‹œ deployment๋Š” 1๋Œ€์˜ ์ถ”๊ฐ€ ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „ ๋ฒ„์ „์˜ ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹
      • ์ถ”๊ฐ€์ ์ธ ์ž์›์€ ํ•„์š”ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๋‹ค์šด ํƒ€์ž„์ด ์—†์Œ
    • Blue/Green
      • deployment ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ๊ณ  ๊ธฐ์กด ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ƒˆ ๋ฒ„์ „์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌ์„ฑ ํ›„ ์…€๋ ‰ํ„ฐ์˜ ๋ผ๋ฒจ๋งŒ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ
      • ์ž์› ์‚ฌ์šฉ๋Ÿ‰์ด ๊ธฐ์กด 2๋ฐฐ, ์„œ๋น„์Šค ๋‹ค์šด ํƒ€์ž„์ด ์—†์Œ
    • Canary
      • ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ ์ž…๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ URL ๊ฒฝ๋กœ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ์„ ํ•ด์ฃผ๋Š” ์—ญํ• 

 

SatefulSet

  • Stateless Application 
    • ๋ฐฐํฌ๋œ ์—ฌ๋Ÿฌ ์•ฑ์ด ๋ชจ๋‘ ๋™์ผ ์—ญํ• ์„ ์ˆ˜ํ–‰
    • Web Server (Apache, NGINX, IIS)
    • ReplicatSet (Controller)
      • ๊ณต์šฉ ๋ณผ๋ฅจ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Stateful Application
    • ๊ฐ๊ฐ์˜ ์•ฑ๋งˆ๋‹ค ์ž์‹ ์˜ ์—ญํ• ์ด ์žˆ์Œ (mongoDB - Primary, Secondary, Arbiter)
    • Database (mongoDB, MariaDB, redis)
    • StatefulSet (Controller)
      • ํŒŒ๋“œ๋งˆ๋‹ค ์—ญํ• ์ด ๋‹ค๋ฅด๊ธฐ์— ๊ฐœ๋ณ„ ๋ณผ๋ฅจ์œผ๋กœ ๊ตฌ์„ฑ

 

Autoscaler

  • HPA (Horizontal Pod Autoscaler)
    • ํŒŒ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฆ๊ฐ€ํ•ด์ฃผ๋Š” ์„ค์ •
    • HPA๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ > HPA๋Š” ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ๊ฐ์‹œ > ์œ„ํ—˜ ์ƒํƒœ ๊ฐ์ง€ > ์ปจํŠธ๋กค๋Ÿฌ์˜ reaplicas ์ˆ˜๋ฅผ ์ฆ๊ฐ€ > ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํŒŒ๋“œ๋ฅผ ์ถ”๊ฐ€ ์ƒ์„ฑ (์Šค์ผ€์ผ ์•„์›ƒ)
    • ๊ธฐ๋™์ด ๋น ๋ฅด๊ฒŒ ๋˜๋Š” App, Stateless App์—์„œ ์‚ฌ์šฉ ๊ถŒ์žฅ
  • VPA (Vertical Pod Autoscaler)
    • ํŒŒ๋“œ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฆ๊ฐ€ํ•ด์ฃผ๋Š” ์„ค์ •
    • VPA๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ > VPA๋Š” ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ๊ฐ์‹œ > VPA๊ฐ€ ์œ„ํ—˜ ์ƒํƒœ๋ฅผ ๊ฐ์ง€ > ํŒŒ๋“œ๋ฅผ ์žฌ๊ธฐ๋™ํ•˜๋ฉด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์Šค์ผ€์ผ ์—…
    • Statelful App์—์„œ ์‚ฌ์šฉ ๊ถŒ์žฅ
    • ํ•œ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ VPA, HPA๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • CA (Cluster Autoscaler)
    • ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ์„ค์ •
    • ์›Œ์ปค ๋…ธ๋“œ์— ์ž์› ๋ชจ๋‘ ์†Œ์ง„ > ์Šค์ผ€์ค„๋Ÿฌ๋Š” CA์—๊ฒŒ ๋…ธ๋“œ ์ƒ์„ฑ์„ ์š”์ฒญ > ์‚ฌ์ „์— CA๋ฅผ ํŠน์ • ํด๋ผ์šฐ๋“œ ํ”„๋กœ๋ฐ”์ด๋”(GCP, AWS, Azure)์™€ ์—ฐ๊ฒฐํ–ˆ๋‹ค๋ฉด > ํ”„๋กœ๋ฐ”์ด๋”์˜ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ๋ฐฐ์น˜

Pod

Lifecycle

๐Ÿ”— ์ฐธ๊ณ  URL

 

ReadnessProbe, LivenessProbe

  •  ReadnessProbe
    • ํŒŒ๋“œ๊ฐ€ ์žฌ์ƒ์„ฑ ๋˜๋ฉด์„œ, ์ปจํ…Œ์ด๋„ˆ์˜ App์ด ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™์ด ์™„๋ฃŒ๋˜์–ด์•ผ ํŒŒ๋“œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉ
    • Exec (commnad) ์˜ต์…˜์œผ๋กœ ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌ
  • LivenessProbe
    • ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ LivenessProbe ์˜ต์…˜์„ ์ ์šฉํ•˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ์˜ App์˜ ์žฅ์•  ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ํŒŒ๋“œ๋ฅผ ์žฌ๊ธฐ๋™ํ•˜์—ฌ ์ง€์†์  ์—๋Ÿฌ ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€
    • httpGet์œผ๋กœ response status๊ฐ€ 200์ด ์•„๋‹ ๊ฒฝ์šฐ ํŒŒ๋“œ๋ฅผ ์žฌ๊ธฐ๋™

 

QoS Classes (Quality of Service)

  • k8s์—์„œ๋Š” ์ž์›์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ App์— ์ค‘์š”๋„์— ๋”ฐ๋ผ ํŒŒ๋“œ๋ฅผ ๋‹ค์šด์‹œ์ผœ ์ž์›์„ ํ™•๋ณด
  • Qos๋Š” containers์˜ resources(request,limit) ์†์„ฑ์œผ๋กœ ํŒŒ๋“œ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๊ฒฐ์ • ๋จ
    • ์šฐ์„ ์ˆœ์œ„: Guaranteed > Burstable > BestEffort
  • Guaranteed
    • ํŒŒ๋“œ์— ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ์ปจํ…Œ์ด๋„ˆ์— request, limit ์„ค์ •์ด ์žˆ์–ด์•ผ ํ•จ
    • request, limit์—๋Š” mem,cpu ๋ชจ๋‘ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
    • ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— mem,cpu์˜ request, limit์˜ ๊ฐ’์ด ๊ฐ™์•„์•ผ ํ•จ
  • Burstable
    • ์ปจํ…Œ์ด๋„ˆ์— request,limit ์„ค์ •์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ 
  • BestEffort
    • ํŒŒ๋“œ์— ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—๋„ request, limit ์„ค์ •์ด ์—†์–ด์•ผ ํ•จ

 

Node Scheduling

  • ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์•„๋ž˜์˜ ํŒŒ๋“œ ์„ค์ •๋“ค๋กœ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์˜ ํŒŒ๋“œ ๋ฐฐ์น˜๊ฐ€ ๊ฐ€๋Šฅ
  •  NodeName
    • ์Šค์ผ€์ค„๋Ÿฌ์™€๋Š” ์ƒ๊ด€ ์—†์ด ํŒŒ๋“œ์— ์ง€์ •ํ•œ ๋…ธ๋“œ๋กœ๋งŒ ํ• ๋‹น
    • ๋…ธ๋“œ ๋„ค์ž„์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์„ค์ •
  • NodeSelector
    • ํŒŒ๋“œ์— key-value ๋ผ๋ฒจ์„ ์ •์˜ํ•˜์—ฌ, ๋ผ๋ฒจ๊ณผ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ์— ํ• ๋‹น
    • key-value๊ฐ€ ๋งค์นญ์ด ๋˜์–ด์•ผ๋งŒ ๋…ธ๋“œ์— ํ• ๋‹น, ๋งค์นญ๋˜๋Š” ๋ผ๋ฒจ์ด ์—†์œผ๋ฉด ํŒŒ๋“œ๋Š” ๋…ธ๋“œ ํ• ๋‹น์ด ๋˜์ง€ ์•Š์•„ ์—๋Ÿฌ ๋ฐœ์ƒ
  • NodeAffinity
    • ํŒŒ๋“œ์— key๋งŒ ์„ค์ •ํ•ด๋„ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•ด๋‹น key๊ฐ€ ์ผ์น˜ํ•˜๋Š” (์ž์›์ด ๋งŽ์€) ๋…ธ๋“œ๋กœ ํ• ๋‹น
    • ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋”๋ผ๋„, ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํŒ๋‹จํ•˜์—ฌ (์ž์›์ด ๋งŽ์€) ๋…ธ๋“œ๋กœ ํ• ๋‹น
  • Pod Affinity
    • web, server ํŒŒ๋“œ๊ฐ€ hostpath์— pv๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํŒŒ๋“œ๋“ค์„ ๊ฐ™์€ ๋…ธ๋“œ๋กœ ํ• ๋‹น ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
  • Pod Anti-Affinity
    • master, slave ๊ตฌ์กฐ๋กœ ๊ฐ™์€ ๋…ธ๋“œ์— ํŒŒ๋“œ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
  • Toleration / Taint
    • GPU ๋…ธ๋“œ์— Taint๋ฅผ ์„ค์ •ํ•˜๋ฉด Toleration์ด ์žˆ๋Š” ํŒŒ๋“œ๋งŒ ํ•ด๋‹น ๋…ธ๋“œ์— ํ• ๋‹น ๋จ