๐Ÿณ ์ธํ”„๋ผ/Kubernetes

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ํ—ฌ์Šค์ฒดํฌ

๊ณ„๋ž€์†Œ๋…„ 2025. 3. 22. 21:58

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ํ—ฌ์Šค์ฒดํฌ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ํŠธ๋ž˜ํ”ฝ์˜ ๋ถ„๋ฐฐ์™€ ํŒŒ๋“œ์˜ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

์ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์€ ์ฃผ๋กœ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

https://koreatstm.tistory.com/270#%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%97%90%EC%84%9C%20%EC%99%B8%EB%B6%80%20%ED%8A%B8%EB%9E%98%ED%94%BD%EC%9D%84%20%EB%82%B4%EB%B6%80%EB%A1%9C%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94%203%EA%B0%80%EC%A7%80%20%EB%B0%A9%EB%B2%95-1

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค

https://koreatstm.tistory.com/188 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์•ž์„œ, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๊ณผ ๊ทธ์— ๊ด€๋ จํ•œ ๊ฐœ๋…๋“ค์„ ์•Œ์•„๋ณด์ž!! ๊ธฐ๋ณธ๊ฐœ๋… ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ๊ฐœ๋…: ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญ์„ ๋ถ„์‚ฐ์‹œ์ผœ ๋ถ€ํ•˜๋ฅผ

koreatstm.tistory.com

 

 

๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๊ณผ์ •

  • ์„œ๋น„์Šค ์ƒ์„ฑ ์‹œ ์—”๋“œํฌ์ธํŠธ: ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ•ด๋‹น ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€ ๊ฐ€์ƒ IP๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ์ด IP๋กœ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค์— ์ ‘๊ทผ
  • ํŒŒ๋“œ๋กœ ํŒจํ‚ท ์ „์†ก: ์„œ๋น„์Šค์— ๋„๋‹ฌํ•œ ํŒจํ‚ท์€ ์„œ๋น„์Šค ๋’ค์— ์žˆ๋Š” ํŒŒ๋“œ๋กœ ์ „๋‹ฌ๋˜๊ณ  ์„œ๋น„์Šค๋Š” ํ•ด๋‹น ํŒŒ๋“œ๋“ค ์ค‘ ํ•˜๋‚˜๋กœ ํŒจํ‚ท์„ ์ „์†กํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹: ์„œ๋น„์Šค ๋’ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ์„œ๋น„์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐ
  • ํŒจํ‚ท ์ „๋‹ฌ ๋ฐฉ๋ฒ•
    • iptables ๋˜๋Š” IPVS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์™€ ํŒŒ๋“œ ๊ฐ„ ํŒจํ‚ท ์ „๋‹ฌ ๊ทœ์น™์„ ์„ค์ •
    • kube-proxy: ๊ฐ ๋…ธ๋“œ์— ์žˆ๋Š” kube-proxy๋Š” ํŒจํ‚ท์„ ํ•ด๋‹น ํŒŒ๋“œ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจํ‚ท ์ „๋‹ฌ ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝ
      • kube-proxy์˜ ์—ญํ• 
        • kube-proxy๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ kube-api-server์™€ ํ†ต์‹ ํ•˜์—ฌ ์„œ๋น„์Šค์™€ ํŒŒ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
        • ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ iptables ๋˜๋Š” IPVS๋ฅผ ์„ค์ •ํ•˜์—ฌ ํŒจํ‚ท์„ ํŒŒ๋“œ๋กœ ์ „๋‹ฌ
        • ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ์š”์ฒญ์€ iptables๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, kube-proxy๋Š” ์ด๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํŒŒ๋“œ๋กœ ์ „๋‹ฌ

 

ํ•œ์ค„ ์ •๋ฆฌ

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์€ ์„œ๋น„์Šค ๊ฐ์ฒด(ClusterIP, NodePort, LoadBalancer)๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.
    • ๋‹ค๋ฅธ ์„œ๋น„์Šค ๊ฐ์ฒด์ธ externalName์€ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์— ๊ฐ€๊นŒ์›€
      • Load balancing: ์—ฌ๋Ÿฌ ํŒŒ๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์€ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ํŒŒ๋“œ์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ
      • Service Discovery: ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์„œ๋น„์Šค๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ์„œ๋น„์Šค๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด ์„œ๋น„์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์„œ๋น„์Šค๋Š” ํŒŒ๋“œ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„๋ฐฐ
  • kube-proxy๋Š” ํŒจํ‚ท์„ ํŒŒ๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ทœ์น™์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, iptables ๋˜๋Š” IPVS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ—ฌ์Šค์ฒดํฌ

 

ํ—ฌ์Šค์ฒดํฌ๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํŒŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•œ๋‹ค.

 

ํ—ฌ์Šค์ฒดํฌ ๊ตฌ์„ฑ

  • kubelet: ๊ฐ ๋…ธ๋“œ์— ์„ค์น˜๋œ kubelet์ด ํŒŒ๋“œ์™€ ํ†ต์‹ ํ•˜๋ฉฐ ํ•ด๋‹น ํŒŒ๋“œ์˜ ํ—ฌ์Šค์ฒดํฌ๋ฅผ ๋‹ด๋‹น
  • kubelet์€ ํŒŒ๋“œ์—์„œ ์„ค์ •๋œ liveness probe์™€ readiness probe๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธ

 

ํ—ฌ์Šค์ฒดํฌ์˜ ์ข…๋ฅ˜

  1. Liveness Probe
    • ํŒŒ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ 
    • ์„ค์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ ์‘๋‹ต์ด ์—†๊ฑฐ๋‚˜ ์ƒํƒœ๊ฐ€ ๋น„์ •์ƒ์ผ ๊ฒฝ์šฐ, kubelet์€ ํ•ด๋‹น ํŒŒ๋“œ๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ์ •์ƒ ์ƒํƒœ๋กœ ๋ณต๊ตฌ
  2. Readiness Probe:
    • ํŒŒ๋“œ๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ 
    • ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํŠธ๋ž˜ํ”ฝ์ด ํ•ด๋‹น ํŒŒ๋“œ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€

 

ํ—ฌ์Šค์ฒดํฌ์˜ ์„ค์ •

  • HTTP GET ์š”์ฒญ: ํŠน์ • URL์— ๋Œ€ํ•ด HTTP GET ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ์‘๋‹ต ์ƒํƒœ๋ฅผ ํ™•์ธ 
  • TCP Socket: ํŠน์ • ํฌํŠธ๋กœ TCP ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์—ฌ ์‘๋‹ต์„ ํ™•์ธ 
  • Exec: ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธ 

 

Self Healing

 

  • Kubernetes๊ฐ€ ์ž๋™์œผ๋กœ ์žฅ์• ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํŒŒ๋“œ๋‚˜ ๋…ธ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์‹คํŒจํ•˜๋ฉด Kubernetes๊ฐ€ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋ณต๊ตฌ
  • ๋กค๋ฐฑ์ด ์‹คํŒจํ•œ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# docker kill [์ปจํ…Œ์ด๋„ˆ ID]
$ dokcer kill 1c29fgk3mo92

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๊ณ  ์กฐํšŒ๋ฅผ ํ•ด๋ด๋„ ์—ฌ์ „ํžˆ ์ •ํ•ด์ง„ ์ˆ˜์˜ ํŒŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. RESTARTS์— 1์ด๋ผ๊ณ  ๊ธฐ๋ก๋˜์–ด ์žˆ๋‹ค.

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