λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Docker Study

Kubernetes μ•„ν‚€ν…μ²˜μ™€ κ°œλ…

μΏ λ²„λ„€ν‹°μŠ€λž€?

  • μΏ λ²„λ„€ν‹°μŠ€λŠ” μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΄€λ¦¬ν•˜κ³  λ°°ν¬ν•˜κΈ° μœ„ν•œ μ˜€ν”ˆμ†ŒμŠ€ νˆ΄μž…λ‹ˆλ‹€.
  • μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κ³ , μžλ™ 배포, μŠ€μΌ€μΌλ§, λ‘œλ“œ λ°ΈλŸ°μ‹±, 볡ꡬ, λͺ¨λ‹ˆν„°λ§ λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν™•μž₯μ„±κ³Ό κ°€μš©μ„±μ΄ λ†’μ•„ λŒ€κ·œλͺ¨ μ»¨ν…Œμ΄λ„ˆ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΄€λ¦¬ν•˜κΈ°μ— μ ν•©ν•©λ‹ˆλ‹€.
  • μΏ λ²„λ„€ν‹°μŠ€λŠ” λ‹€μ–‘ν•œ ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œ λ™μž‘ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ–΄ μžˆμ–΄ ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 및 μš΄μ˜μ— μœ μš©ν•©λ‹ˆλ‹€.
  •  

μ™œ μ‚¬μš©ν• κΉŒ?

  • μΏ λ²„λ„€ν‹°μŠ€λŠ” μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포와 관리λ₯Ό λ‹¨μˆœν™”ν•΄ μ€λ‹ˆλ‹€.
    • μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μžλ™ν™”λœ λ°©μ‹μœΌλ‘œ λ°°ν¬ν•˜κ³ , ν™•μž₯ν•˜κ³ , μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€νŒ¨ν•  경우 λͺ¨λ‹ˆν„°λ§ν•˜λŠ” 방법과 μ»¨ν…Œμ΄λ„ˆλ₯Ό κ΅μ²΄ν•˜λŠ” 방법을 μ •μ˜ν•  수 있고 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΏ λ²„λ„€ν‹°μŠ€λŠ” ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œ ꡬ좕, 운영 및 ν™•μž₯ κ°€λŠ₯)을 ꡬ좕할 수 μžˆλŠ” 기반 κΈ°μˆ μž…λ‹ˆλ‹€.
    • μΏ λ²„λ„€ν‹°μŠ€λŠ” ν΄λΌμš°λ“œ ν™˜κ²½(μžμ›μ˜ μœ μ—°ν•œ ν™•μž₯μ„±κ³Ό 높은 κ°€μš©μ„±, μ•ˆμ •μ„± λ“± 제곡)의 νŠΉμ§•μ„ μ΅œλŒ€ν•œ ν™œμš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν™•μž₯μ„±κ³Ό κ°€μš©μƒ, μ•ˆμ •μ„± 등을 보μž₯λ°›λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. 즉, μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ΄μš©ν•˜λ©΄ ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ•ˆμ •μ μœΌλ‘œ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

μˆ˜λ™ 배포의 문제점

  • μ»¨ν…Œμ΄λ„ˆλ₯Ό μˆ˜λ™μœΌλ‘œ 배포할 경우 μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 내뢀에 λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆκ°€ 좩돌이 λ°œμƒν•  λ•Œλ§ˆλ‹€ μˆ˜λ™μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•΄μ•Ό ν•˜λ©°, μˆ˜λ™μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.(μƒˆ μ»¨ν…Œμ΄λ„ˆλ‘œ ꡐ체)
  • νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜κ±°λ‚˜ κ°μ†Œν•¨μ— 따라 μ‹€ν–‰ 쀑인 μΈμŠ€ν„΄μŠ€μ˜ 수λ₯Ό λŠ˜λ¦¬κ±°λ‚˜ 쀄여야 ν•©λ‹ˆλ‹€.

μΏ λ²„λ„€ν‹°μŠ€ μ•„ν‚€ν…μ²˜μ™€ 핡심 κ°œλ…

μΏ λ²„λ„€ν‹°μŠ€λŠ” λ§ˆμŠ€ν„° λ…Έλ“œμ™€ μ›Œμ»€ λ…Έλ“œλ‘œ κ΅¬μ„±λ˜λ©°, λ§ˆμŠ€ν„° λ…Έλ“œλŠ” ν΄λŸ¬μŠ€ν„° μ „λ°˜μ˜ μ œμ–΄μ™€ 관리λ₯Ό λ‹΄λ‹Ήν•˜κ³  μ›Œμ»€ λ…Έλ“œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€ν–‰κ³Ό 관리λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

 

Pod

  • ν•˜λ‚˜ μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό κ°–λŠ” κ°€μž₯ μž‘μ€ 배포 λ‹¨μœ„μž…λ‹ˆλ‹€. λ‹¨μˆœνžˆ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ³΄μœ ν•©λ‹ˆλ‹€.
  • PodλŠ” μ›Œμ»€λ…Έλ“œμ—μ„œ μžμ‹ μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.
    • μ›Œμ»€λ…Έλ“œλŠ” νŠΉμ •μ–‘μ˜ cpu와 λ©”λͺ¨λ¦¬κ°€ μžˆλŠ” λ¨Έμ‹ μœΌλ‘œ Podλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 각 μ›Œμ»€λ…Έλ“œμ— λ‹€μˆ˜μ˜ νŒŒλ“œκ°€ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.

Kube-proxy

  • μΏ λ²„λ„€ν‹°μŠ€μ—μ„œ μ›Œμ»€λ…Έλ“œμ—λŠ” λ‹€μˆ˜μ˜ νŒŒλ“œκ°€ 싀행될 수 μžˆλŠ”λ° PodλŠ” λ‚΄λΆ€ IP μ£Όμ†Œλ₯Ό κ°€μ§€λ©°, λ‹€λ₯Έ Pod λ˜λŠ” μ™ΈλΆ€λ‘œ 직접 톡신할 수 μ—†κΈ° λ•Œλ¬Έμ— 각 νŒŒλ“œκ°„μ˜ ν†΅μ‹ μ΄λ‚˜ μ™ΈλΆ€μ™€μ˜ 톡신 등을 μœ„ν•΄ ν”„λ‘μ‹œκ°€ ν•„μš”ν•©λ‹ˆλ‹€.
  • μΏ λ²„λ„€ν‹°μŠ€μ˜ ν”„λ‘μ‹œ κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ νŒŒλ“œκ°„μ˜ 톡신, λ‘œλ“œ λ²¨λŸ°μ‹±, μ„œλΉ„μŠ€ 등을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

λ§ˆμŠ€ν„° λ…Έλ“œ

λ§ˆμŠ€ν„° λ…Έλ“œλŠ” ν΄λŸ¬μŠ€ν„° 전체λ₯Ό κ΄€λ¦¬ν•˜κ³  μ‘°μ •ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 
λ§ˆμŠ€ν„° λ…Έλ“œλŠ” API μ„œλ²„, etcd, μŠ€μΌ€μ€„λŸ¬, 컨트둀러 λ§€λ‹ˆμ € λ“±μ˜ μ»΄ν¬λ„ŒνŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  • API μ„œλ²„: APIμ„œλ²„λ‘œ μ›Œμ»€λ…Έλ“œμ™€ ν†΅μ‹ ν•©λ‹ˆλ‹€. μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ μƒν˜Έμž‘μš©μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
    ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ API ν˜ΈμΆœμ„ 받아듀이고, κ°κ°€μ˜ λ¦¬μ†ŒμŠ€λ₯Ό 생성, 읽기, μ—…λ°μ΄νŠΈ, μ‚­μ œ λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μŠ€μΌ€μ€„λŸ¬: μƒˆλ‘œμš΄ Podλ₯Ό μ–΄λŠ λ…Έλ“œμ— λ°°μΉ˜ν• μ§€ κ²°μ •ν•˜κ³  μ›Œμ»€λ…Έλ“œμ— 무엇을 ν•΄μ•Ό ν•˜λŠ”μ§€ API μ„œλ²„μ— μ•Œλ¦¬λŠ” 역할을 ν•©λ‹ˆλ‹€. νŒŒλ“œμ˜ μš”κ΅¬μ‚¬ν•­(μžμ› μš”κ΅¬μ‚¬ν•­, μŠ€ν† λ¦¬μ§€ μš”κ΅¬ 사항 λ“±)을 κ³ λ €ν•˜μ—¬ 졜적의 λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€. 
  • 컨트둀러: μ›Œμ»€λ…Έλ“œ 전체λ₯Ό κ°μ‹œν•˜κ³  μ œμ–΄ν•˜λ©° μ λ‹Ήν•œ 수의 Podλ₯Ό 가동 쀑에 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • etcd: ν΄λŸ¬μŠ€ν„°μ˜ λͺ¨λ“  μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜λŠ” λΆ„μ‚° μ €μž₯μ†Œμž…λ‹ˆλ‹€. λͺ¨λ“  λ…Έλ“œ etcd에 μ €μž₯된 ν΄λŸ¬μŠ€ν„°μ˜ μƒνƒœ 정보λ₯Ό 읽고 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

μ›Œμ»€ λ…Έλ“œ

  • μ›Œμ»€λ…Έλ“œλŠ” 싀행쀑인 ec2 μΈμŠ€ν„΄μŠ€μ™€ 같은 νŠΉμ •λŸ‰μ˜ cpu와 λ©”λͺ¨λ¦¬κ°€ μžˆλŠ” 컴퓨터 λ¨Έμ‹ μž…λ‹ˆλ‹€.
  • λ§ˆμŠ€ν„° λ…Έλ“œμ—μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€.
  • Podκ°€ μ›Œμ»€λ…Έλ“œμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • kubelet μ†Œν”„νŠΈμ›¨μ–΄λ‘œ λ§ˆμŠ€ν„°λ…Έλ“œμ™€ ν†΅μ‹ ν•˜μ—¬ λ§ˆμŠ€ν„° λ…Έλ“œκ°€ μ›Œμ»€λ…Έλ“œμ˜ Podλ₯Ό μ œμ–΄ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  • kube-proxy λ„€νŠΈμ›Œν¬ ν”„λ‘μ‹œλŠ” μ›Œμ»€λ…Έλ“œμ—μ„œ μ‹€ν–‰λ˜λ©° λ‘œλ“œ λ°ΈλŸ°μ‹±κ³Ό 같은 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜μ—¬ ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ μ„œλΉ„μŠ€λ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€.

μ„œλΉ„μŠ€

μ„œλΉ„μŠ€λŠ” ν΄λŸ¬μŠ€ν„° λ‚΄λΆ€μ˜ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ κ΄€λ¦¬ν•˜κ³  λΆ„μ‚°ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
라벨 μ…€λ ˆν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • νŒŒλ“œλ₯Ό μ‹λ³„ν•˜κ³  λ‘œλ“œ λ°ΈλŸ°μ‹±ν•˜κ±°λ‚˜ DNS 이름을 ν• λ‹Ήν•˜μ—¬ ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ μ„œλΉ„μŠ€λ₯Ό 식별할 수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€. 또 μ„œλΉ„μŠ€λŠ” ν΄λŸ¬μŠ€ν„° λ‚΄λΆ€μ˜ νŒŒλ“œλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³  λ™μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λ―€λ‘œ νŒŒλ“œκ°€ μƒˆλ‘œ μƒμ„±λ˜κ±°λ‚˜ μ‚­μ œλ˜λ”λΌλ„ μ„œλΉ„μŠ€μ—λŠ” 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • ClsterIP: ν΄λŸ¬μŠ€ν„° λ‚΄λΆ€μ—λ§Œ 접근이 κ°€λŠ₯ν•œ 가상 IP μ£Όμ†Œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • NodePort: λͺ¨λ“  λ…Έλ“œμ˜ IP μ£Όμ†Œμ™€ μ§€μ •λœ 포트λ₯Ό μ‚¬μš©ν•˜μ—¬ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • LoadBalancer: ν΄λΌμš°λ“œ 제곡 업체가 μ œκ³΅ν•˜λŠ” λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό μ™ΈλΆ€ νŠΈλž˜ν”½μ— λ…ΈμΆœν•©λ‹ˆλ‹€.
  • ExternalName: CNAME λ ˆμ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ μ„œλΉ„μŠ€μ˜ μ™ΈλΆ€ DNS의 이름을 λ‚΄λΆ€ DNS μ΄λ¦„μœΌλ‘œ λ§€ν•‘ν•©λ‹ˆλ‹€.

NodePort와 LoadBalancer

각 λ…Έλ“œμ—μ„œ 포트λ₯Ό μ—΄μ–΄ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

  • NodePort 각 λ…Έλ“œμ—μ„œ 포트λ₯Ό μ—΄μ–΄  λ…ΈμΆœλœ μ„œλΉ„μŠ€μ˜ IP μ£Όμ†Œμ™€ 포트λ₯Ό μ΄μš©ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ³  μ‰½κ²Œ μ„€μ •ν•  수 μžˆμ§€λ§Œ λ³΄μ•ˆμƒ 취약점이 μžˆμ„ 수 있고 각 λ…Έλ“œμ—μ„œ 포트λ₯Ό μ—΄μ–΄μ•Ό ν•˜λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.
  • LoadBalancerλŠ” ν΄λΌμš°λ“œ ν”„λ‘œλ°”μ΄λ”κ°€ μ œκ³΅ν•˜λŠ” λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό μ‚¬μš©ν•˜μ—¬ 각 λ…Έλ“œμ˜ IP와 ν¬λ“œλ₯Ό 숨기고 λ‘œλ“œ λ°ΈλŸ°μ„œμ—μ„œ κ΄€λ¦¬ν•˜λŠ” IP와 포트λ₯Ό μ΄μš©ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이 방식은 각 λ…Έλ“œμ—μ„œ 포트λ₯Ό μ—΄μ§€ μ•Šμ•„λ„ λ˜λ―€λ‘œ λ³΄μ•ˆμ„±μ΄ λ†’κ³ , ν΄λΌμš°λ“œ ν”„λ‘œλ°”μ΄λ”κ°€ μ œκ³΅ν•˜λŠ” λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ κΈ°λŠ₯을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν΄λΌμš°λ“œ ν”„λ‘œλ°”μ΄λ”κ°€ μ•„λ‹Œ 경우 κ΅¬ν˜„ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

ν΄λΌμš°λ“œ ν”„λ‘œλ°”μ΄λ”λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 LoadBalancerλ₯Ό μ‚¬μš©ν•˜κ³ , κ·Έλ ‡μ§€ μ•Šμ€ 경우 NodePortλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.