K8S - boostcampwm-2024/refactor-web36-QLAB GitHub Wiki

K8S

๋ถ„์•ผ: INFRA ์‚ฌ๋žŒ: ์Šนํ›ˆ ์žฅ ์ฃผ์ฐจ: 1์ฃผ์ฐจ

Docker

Layers

image

  • ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๋ ˆ์ด์–ด์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. DockerFile ์—์„œ์˜ ๊ฐ ๋ช…๋ น๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๋ ˆ์ด์–ด๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๋“ค์€ Read-Only ์ด๋ฉฐ, ๋ณ€๊ฒฝ์„ ์œ„ํ•ด์„  ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผํ•œ๋‹ค.
  • ๋„์ปค๋Š” ๊ฐ ๋ ˆ์ด์–ด์˜ ์ƒํƒœ๋ฅผ ์บ์‹ฑํ•ด๋‘๊ณ  ์ถ”ํ›„ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†๋‹ค๋ฉด ์บ์‹ฑ๋œ ๋ ˆ์ด์–ด๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋„์ปคํŒŒ์ผ์„ ์ž‘์„ฑํ•  ๋•Œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์ ์€ ๋ช…๋ น์„ ์ƒ๋‹จ์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.
  • ์ €์žฅ๋œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํ•ด๋‹น ์ด๋ฏธ์ง€ ์œ„์— ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. ๊ธฐ์กด ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฐธ์กฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ผ ์ด๋ฏธ์ง€๋กœ 2๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ๋„, ํ•˜๋‚˜์˜ ๊ฐ™์€ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

Storages

๋„์ปค์— ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Anonymous Volumes, Named Volumes, Bind Mounts 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

image 1

  • Anonymous Volumes

    # 1. ๋„์ปคํŒŒ์ผ ์•ˆ์—์„œ ์ •์˜
    VOLUME /data
    
    # 2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ •์˜
    docker run -v /path/in/container busybox
    

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

  • Named Volumes

    # ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ •์˜
    docker run -v my-volume:/data ubuntu
    

    my-volume ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ /data ํด๋”์™€ ์—ฐ๊ฒฐ๋œ๋‹ค. my-volume ์ด ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ํด๋”๊ฐ€ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์ƒ์„ฑ๋˜๊ณ , ๋„์ปค๊ฐ€ ์ด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•˜๋‚˜์˜ ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Bind Mounts

    docker run -v /host/path:/container/path ubuntu
    

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

ํŠน์„ฑ Anonymous Volumes Named Volumes Bind Mounts
๊ด€๋ฆฌ ์ด๋ฆ„ ์—†์Œ (๊ด€๋ฆฌ ์–ด๋ ค์›€) ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„ ๊ฐ€๋Šฅ ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ ์ง์ ‘ ์ง€์ •
๋ฐ์ดํ„ฐ ์œ„์น˜ Docker๊ฐ€ ์ž๋™ ๊ด€๋ฆฌ Docker๊ฐ€ ์ž๋™ ๊ด€๋ฆฌ ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ ์‚ฌ์šฉ
์ฃผ์š” ์šฉ๋„ ์ผํšŒ์„ฑ ๋ฐ์ดํ„ฐ ์ €์žฅ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ  ํ˜ธ์ŠคํŠธ-์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ 
ํ˜ธ์ŠคํŠธ ์˜์กด์„ฑ ๋‚ฎ์Œ ๋‚ฎ์Œ ๋†’์Œ

Kubernetis

๊ฐœ๋…

์˜คํ”ˆ ์†Œ์Šค ์‹œ์Šคํ…œ์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ์™€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํ‘œ์ค€์ด๋ฉฐ, ์ด๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋“ค์„ ํฌํ•จํ•œ๋‹ค.

ํŠน์ง•

  • ์ž๋™ ๋ฐฐํฌ
  • ์Šค์ผ€์ผ๋ง & ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ง€์›
  • ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ

์•„ํ‚คํ…์ฒ˜

image 2

  • ํด๋Ÿฌ์Šคํ„ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ์ „์ฒด ์„œ๋น„์Šค. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ๋…์ž์ ์ธ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ด๋ฅผ ์ด์šฉํ•ด ํ†ต์‹ ํ•œ๋‹ค.
  • Worker Node ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์  ์žฅ์น˜. EC2 ์˜ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐ€์ƒ๋จธ์‹ ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
  • Pod ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋‹จ์œ„. ํ•˜๋‚˜์˜ ์›Œ์ปค ๋…ธ๋“œ ์•ˆ์—๋Š” 2๊ฐœ ์ด์ƒ์˜ Pod ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‚˜์˜ Pod ์•ˆ์— 2๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • MasterNode ์›Œ์ปค๋…ธ๋“œ, Pod ๋“ฑ์˜ ๊ด€๋ฆฌ๋ฅผ ์ด๊ด„ํ•˜๋Š” ์žฅ์น˜. ์›Œ์ปค๋…ธ๋“œ์˜ ์ƒ์„ฑ/์‚ญ์ œ, ํฌ๋“œ์˜ ์ƒ์„ฑ/์‚ญ์ œ, ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ๋‹ด๋‹นํ•œ๋‹ค.

image 3

  • kublet ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ

  • kube-proxy

    ํฌ๋“œ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ

Kubernetis Objects

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” Object ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

image 4

  • Pod Object
    • ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰์‹œํ‚ฌ ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํฌ๋“œ์— ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ
    • ๋ชจ๋“  ํฌ๋“œ๋Š” ์Šคํ† ๋ฆฌ์ง€(๋ณผ๋ฅจ)์™€ ๋„คํŠธ์›Œํฌ๋ฅผ ํฌํ•จ, ๊ณต์œ 
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ํฌ๋“œ๋งˆ๋‹ค ์ž„์‹œ ๋‚ด๋ถ€ Private IP ๋ฅผ ํ• ๋‹น๋ฐ›์Œ. ์žฌ์ƒ์„ฑ ์‹œ๋งˆ๋‹ค IP ๋ณ€๊ฒฝ
  • Deployment Object
    • ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์‹ค์ œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜, ํฌ๋“œ๊ฐ€ ์–ด๋–ค ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•  ์ง€ ๋“ฑ๋“ฑโ€ฆ
    • ๋™์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
    • ์ƒˆ๋กœ์šด ๋ฒ„์ „ ๋ฐฐํฌ๋‚˜ ๊ธฐ์กด ๋ฒ„์ „ ๋กค๋ฐฑ ์ง€์›
  • Service Object
    • ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ํฌ๋“œ๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€
    • Pod ๊ทธ๋ฃน์— ๋Œ€ํ•ด ๊ณต์œ  IP ์ง€์ • ๊ฐ€๋Šฅ
    • ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
    • Service ์ข…๋ฅ˜:
      • ClusterIP: ๊ธฐ๋ณธ ์„œ๋น„์Šค ์œ ํ˜•์œผ๋กœ, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ.
      • NodePort: ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ํŠน์ • ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ.
      • LoadBalancer: ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ.
      • ExternalName: ์™ธ๋ถ€ DNS ์ด๋ฆ„์„ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •.