• toc {:toc}

Swarm

image[Fig1]

  • Docker Swarm : Orchestrator
  • 100~1000 개 μ •λ„μ˜ μ»¨ν…Œμ΄λ„ˆλΌλ©΄ μΆ©λΆ„νžˆ Swarm 으둜 λ™μž‘ κ°€λŠ₯ν•˜λ‹€.
  • μ€‘μ•™μ§‘μ€‘ν˜• μ œμ–΄μž₯μΉ˜μ΄λ‹€.
  • Container Orchestration : 배포, 관리, μžμ› ν• λ‹Ή, λ„€νŠΈμ›Œν‚Ή, μ΄μš©κ°€λŠ₯성을 쀑앙 ν†΅μ œλ₯Ό 톡해 μžλ™ν™”ν•˜λŠ” 과정이닀.
  • μ£Ό λͺ©μ  : 관리, λͺ¨λ‹ˆν„°λ§μ„ ν•˜κ³ , μžλ™ν™”λ₯Ό ν†΅ν•΄μ„œ λŠ₯λ₯ μ΄ μ¦κ°€ν•˜λ„λ‘ ν•œλ‹€.
    • κ³Όκ±°μ—λŠ” μˆ˜λ™μœΌλ‘œ μ „λΆ€ λ°°ν¬ν–ˆμ–΄μ•Ό ν–ˆκΈ°μ— APP 배포가 맀우 μ–΄λ €μ› μœΌλ‚˜ 이λ₯Ό μžλ™ν™”λ₯Ό 톡해 μ‰½κ²Œ λ§Œλ“€μ—ˆλ‹€.
  • Container orchestration β†’ μž‘μ—…λŸ‰μ„ κ°„μ†Œν™”ν•œλ‹€.
    • μ‚¬μš©μžλŠ” 더 이상 기술적 문제λ₯Ό λ‹€λ£° ν•„μš”κ°€ μ—†λ‹€.
    • 더 λ§Žμ€ μ»¨ν…Œμ΄λ„ˆλ“€μ˜ κ·Έλ£Ήλ“€κ³Ό λ™μ‹œμ— μƒν˜Έμž‘μš©ν•  수 μžˆλ‹€.
    • μ»¨ν…Œμ΄λ„ˆ 등둝을 κ³„νšν•˜κ³  κ΅¬ν˜„ν•  수 μžˆλ‹€.
    • λ„€νŠΈμ›Œν¬, μŠ€ν† λ¦¬μ§€, λ³΄μ•ˆ 등을 λͺ¨λ‘ 제곡 κ°€λŠ₯ν•˜λ‹€.

image[Fig2]

  • Container Orchestration History
  • 2009 λ…„ Mesos 연ꡬ ν”„λ‘œμ νŠΈλ‘œ μ‹œμž‘, 버클리 λŒ€ν•™μ—μ„œ μ‹œμž‘.
  • 2010 - Guest OS over Host OS 문제
  • 2015 년에 μΏ λ²„λ„€ν‹°μŠ€ 버전 1.0 μΆœμ‹œ, Docker Swarm 1.0 μΆœμ‹œ (2013 μ—λŠ” κ°œλ°œμ‹œμž‘ν•˜μ§€ μ•Šμ•˜μ„κΉŒ?)
  • μ˜€λž˜λ˜μ§€ μ•Šμ€ 뢄야이닀.
  • Docker Swarm : Container Orchestration 을 μœ„ν•œ 도ꡬ이닀.
    • λ‹€μˆ˜μ˜ 도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€λ‘œ 닀루고 μ‘°μ’…ν•œλ‹€.
    • Manager, Worker μ§€μ •, Worker β†’ Manager μ—κ²Œ 등둝, Manager κ°€ Worker μž₯μ•…
  • Docker λ₯Ό μ‹€ν–‰ν•˜λŠ” λ¨Έμ‹ μ˜ 그룹을 λ§ν•œλ‹€.
  • λ‹€μˆ˜μ˜ 도컀 호슀트둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
  • λ…Έλ“œμ˜ μ—­ν• κ³Ό μ—°κ²°
    • Manager
      • 멀버쉽 λ“±μ˜ 논리적 연결을 λ§Œλ“€μ–΄ Worker 듀을 κ΄€λ¦¬ν•œλ‹€.
      • Worker λ…Έλ“œμ™€ 같이 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€.
    • Workers (Nodes) : Swarm μ„œλΉ„μŠ€λ₯Ό μ‹€ν–‰ν•œλ‹€.
      • join λͺ…λ Ήμ–΄ : λ§€λ‹ˆμ €μ™€ μ—°κ²°ν•˜μ—¬ λ§€λ‹ˆμ €μ— λ“±λ‘ν•œλ‹€.
      • leave λͺ…λ Ήμ–΄ : λ“±λ‘λœ Worker λ₯Ό λ§€λ‹ˆμ €μ™€ λΆ„λ¦¬λœλ‹€.
  • Task : Swarm λ§€λ‹ˆμ €μ— μ˜ν•΄ κ΄€λ¦¬λ˜κ³  Swarm μ„œλΉ„μŠ€μ˜ λΆ€λΆ„μœΌλ‘œ μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆμ΄λ‹€.
  • Node : Swarm 에 μ°Έμ—¬ν•œ 도컀 μ—”μ§„μ˜ μΈμŠ€ν„΄μŠ€μ΄λ‹€.
    • Manager Nodes : worker node 에 task λ₯Ό 보내쀀닀.
    • Worker Nodes : task λ₯Ό λ§€λ‹ˆμ €λ‘œλΆ€ν„° λ°›κ³  μ‹€ν–‰ν•œλ‹€.

image[Fig3]

docker-machine ssh {manager name} docker swarm init --advertise-addr {manager ip}
  • advertise β†’ λ‚΄κ°€ Manager λΌλŠ” 것을 μ•Œλ¦¬κ³  Manager κ°€ 되기 μœ„ν•œ μ΄ˆκΈ°ν™”λ₯Ό ν•œλ‹€.
  • Manager 의 Worker 둜 λ“€μ–΄κ°€κ³  싢은 경우 join κ³Ό 토큰을 톡해 ν•΄λ‹Ή Manager 의 일꾼으둜 λ“±λ‘ν•œλ‹€.
  • Manager 와 Worker λ…Έλ“œ μ‚¬μ΄μ˜ 포트 번호 2377, 2376 쀑 ν•˜λ‚˜κ°€ μ—΄λ € μžˆμ–΄μ•Ό ν•œλ‹€. 이 포트λ₯Ό ν†΅ν•΄μ„œ docker swarm init, docker swarm join 을 μ‹€ν–‰ν•˜μ—¬ μ—°κ²°ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. (물리적으둜 λ–¨μ–΄μ Έ μžˆλŠ” 컴퓨터듀을 ν΄λŸ¬μŠ€ν„°λ§ν•  λ•Œ λ„€νŠΈμ›Œν¬ μ œν•œμ„ λ°›κΈ° λ•Œλ¬Έμ— 포트λ₯Ό μ—΄μ–΄μ€˜μ•Ό ν•œλ‹€.)
  • Docker-Machine Task Deployment
  • scp β†’ νŒŒμΌμ„ μƒλŒ€λ°©μ—κ²Œ 볡사할 수 μžˆλ‹€. λ§€λ‹ˆμ €μ—κ²Œ docker-compose.yml 파일 μ „μ†‘ν•˜κΈ°
  • stack deploy β†’ μ‹€ν–‰
  • 기본적으둜 Worker μ—κ²Œ λ‚˜λˆŒ λ•ŒλŠ” Round Robin, κ³΅ν‰ν•˜κ²Œ λ‚˜λˆ„μ–΄ μ „λ‹¬ν•œλ‹€.

cf) Label

  • key value 의 ν˜•νƒœλ‘œ 값을 μ€€λ‹€.
  • λ²”μ£Όν™”ν•˜κΈ° μœ„ν•œ μΌμ’…μ˜ νƒœκ·Έλ₯Ό λΆ™μ΄λŠ” 것과 κ°™λ‹€.
  • Docker Object Labels : Docker object 에 메타데이터λ₯Ό μ μš©ν•˜κΈ° μœ„ν•œ λ§€μ»€λ‹ˆμ¦˜
  • Key λŠ” νŠΉμˆ˜ν•˜κ³  Value λŠ” μ—¬λŸ¬ 개일 수 μžˆλ‹€.
  • Url 을 뒀집은 ν˜•νƒœλ‘œ λ²”μ£Όν™”ν•˜μ—¬ λ‚˜λˆŒ 수 μžˆλ‹€. (.κ³Ό - μ‚¬μš©)
  • μ‹œμž‘μ‹œ λŒ€λΆ€λΆ„ μ†Œλ¬Έμžλ‘œ μ‹œμž‘ν•˜κ³  λλ‚˜λŠ” κ²½μš°λ„ μ†Œλ¬Έμžλ‘œ 끝낸닀.
    • e.g., com.example.some-label
  • 연속적인 .κ³Ό - 은 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.
  • namespace ν•„λ“œλŠ” . 에 μ˜ν•΄ λΆ„λ¦¬λœλ‹€.
  • DNS notation 의 μ—­μˆœ
  • κ·Έλ£Ήλ“€λ‘œ λ‚˜λˆ„μ–΄ λͺ…λ Ήμ–΄λ₯Ό 쀄 수 있기 λ•Œλ¬Έμ— μ‚¬μš©ν•œλ‹€.

μ°Έκ³ λ¬Έν—Œ

μ—°κ²°λ¬Έμ„œ