🌌 [μΏ λ²„λ„€ν‹°μŠ€ μ•„ν‚€ν…μ²˜] 1. ꡬ성 및 섀계

μ΄λŒ€ν˜„Β·2021λ…„ 2μ›” 16일
3

Cloud Computing

λͺ©λ‘ 보기
12/14
post-thumbnail

44BITλ‹˜μ˜ [초보λ₯Ό μœ„ν•œ μΏ λ²„λ„€ν‹°μŠ€ μ•ˆλ‚΄μ„œ] μΏ λ²„λ„€ν‹°μŠ€ μ•„ν‚€ν…μ²˜ κ°•μ˜λ₯Ό λ“£κ³  μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

1. μΏ λ²„λ„€ν‹°μŠ€(kubernetes)?

μΏ λ²„λ„€ν‹°μŠ€κ°€ 무엇인지, κ·Έλƒ₯ μ»¨ν…Œμ΄λ„ˆλ₯Ό κ°œλ°œν•˜κ³  λ°°ν¬ν•˜λŠ” 것과 무엇이 λ‹€λ₯Έμ§€λŠ” 곡식 λ¬Έμ„œ μΏ λ²„λ„€ν‹°μŠ€λž€ 무엇인가?에 잘 μ„€λͺ…λ˜μ–΄ μžˆλ‹€. 본격적으둜 κ³΅λΆ€ν•˜κΈ° 전에 μ–΄λ–€ λŠλ‚ŒμΈμ§€ μ΄ν•΄ν•œ λ°”λ‘œλŠ”, μΏ λ²„λ„€ν‹°μŠ€λŠ” κΈ°μ‘΄ λΆ„μ‚° μ‹œμŠ€ν…œμ„ μ’€ 더 탄λ ₯적으둜 μ‹€ν–‰ν•  수 μžˆλ„λ‘ 도와주고(μœ μ—°μ„±), μ œκ³΅λ˜λŠ” ν”„λ ˆμž„μ›Œν¬, 배포 νŒ¨ν„΄ λ“±μ—μ„œ μ„œλΉ„μŠ€μ˜ 규λͺ¨μ— 맞게 μ‹€ν–‰ν•  수 μžˆλ„λ‘ 개발자의 선택지가 더 λ‹€μ–‘ν•œ 것 κ°™λ‹€(μ„ νƒκΆŒ).

즉, μΏ λ²„λ„€ν‹°μŠ€λŠ” μ‚¬μš©μžμ˜ μ„ νƒκΆŒκ³Ό μœ μ—°μ„±μ„ μ§€μΌœμ£Όλ©΄μ„œ ν™•μž₯κ³Ό 이식이 μš©μ΄ν•œ μ»¨ν…Œμ΄λ„ˆ 관리 μ˜€ν”ˆμ†ŒμŠ€ ν”Œλž«νΌμ΄λ‹€.

2. κ΄€λ ¨ μš©μ–΄ 정리

  • ν•˜λ“œμ›¨μ–΄ μœ λ‹›
    • λ…Έλ“œ(node) : μΏ λ²„λ„€ν‹°μŠ€μ—μ„œ μ΅œμ†Œ λ‹¨μœ„μ˜ μ»΄ν“¨νŒ… ν•˜λ“œμ›¨μ–΄
    • ν΄λŸ¬μŠ€ν„°(cluster) : 효율적인 λ¦¬μ†ŒμŠ€ κ³΅μœ μ™€ κ· ν˜• 배뢄을 μœ„ν•΄ μ—¬λŸ¬ λ…Έλ“œλ₯Ό 묢은 κ·Έλ£Ή
  • μ†Œν”„νŠΈμ›¨μ–΄ μœ λ‹›
    • μ»¨ν…Œμ΄λ„ˆ(container) : ν•˜λ‚˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€ λͺ¨μŒ. 싀행에 ν•„μš”ν•œ νŒŒμΌλ„ λͺ¨λ‘ λ“€μ–΄μžˆμ–΄ λ¨Έμ‹  κ°„ 이식이 κ°€λŠ₯.
    • ν¬λ“œ(pod) : ν•˜λ‚˜ μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆ λͺ¨μŒ. λ¦¬μ†ŒμŠ€ 곡유의 μž₯점을 κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€λ‘œ λ¬Άμ—¬ 있음.

βœ… μΏ λ²„λ„€ν‹°μŠ€μ—μ„œ ν¬λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 이유

ν¬λ“œμ™€ ν΄λŸ¬μŠ€ν„°μ˜ 관계 λ•Œλ¬Έμ— μΏ λ²„λ„€ν‹°μŠ€λŠ” 직접 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ λŒ€μ‹  ν¬λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄μ„œ ν¬λ“œ μ†μ˜ 각 μ»¨ν…Œμ΄λ„ˆκ°€ λ™μΌν•œ λ¦¬μ†ŒμŠ€ 및 둜컬 λ„€νŠΈμ›Œν¬λ₯Ό κ³΅μœ ν•˜κ²Œ ν•œλ‹€. μ΄λ ‡κ²Œ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν¬λ“œλ‘œ κ΅¬μ„±ν•˜λŠ” 것이 μΏ λ²„λ„€ν‹°μŠ€μ˜ 유λͺ…ν•œ κΈ°λŠ₯, λ°”λ‘œ 볡제(Replication)의 ν† λŒ€κ°€ λœλ‹€.

μ»¨ν…Œμ΄λ„ˆλ₯Ό λͺ¨μ•„ ν¬λ“œλ₯Ό λ§Œλ“€λ©΄, μ–΄λ–€ ν¬λ“œ ν•˜λ‚˜κ°€ κ³ΌλΆ€ν•˜ μƒνƒœκ°€ λ˜μ—ˆμ„ λ•Œ μΏ λ²„λ„€ν‹°μŠ€λŠ” μžλ™μœΌλ‘œ 이λ₯Ό λ³΅μ œν•œ λ‹€μŒ ν΄λŸ¬μŠ€ν„°μ— 배포할 수 μžˆλŠ” 것이닀.

좜처 : μΏ λ²„λ„€ν‹°μŠ€ ν¬λ“œλž€?

3. Desired State

μΏ λ²„λ„€ν‹°μŠ€ ꡬ쑰λ₯Ό κ³΅λΆ€ν•˜κΈ° μ „, λ¨Όμ € Desired State κ°œλ…μ„ μ΄ν•΄ν•˜λ©΄ μ’‹λ‹€. μ„œλ²„ κ΄€λ¦¬μ—μ„œ μ€‘μš”ν•œ κ°œλ…μ΄μž μΏ λ²„λ„€ν‹°μŠ€μ˜ 근간을 μ•„μš°λ₯΄λŠ” μ‹œμŠ€ν…œμ΄λ‹€. ν˜„μž¬ μƒνƒœμ™€ Desired State(μ›ν•˜λŠ” μƒνƒœ)λ₯Ό 계속 μ²΄ν¬ν•˜κ³ (μ»¨ν…Œμ΄λ„ˆ ν•˜λ‚˜κ°€ λ– μžˆμ–΄μ•Ό λ˜λŠ”λ° 잘 λ– μžˆλŠ”μ§€ λ“±), λ§Œμ•½ λ¬Έμ œκ°€ μžˆλ‹€λ©΄ 쑰치λ₯Ό ν•˜κ³ . 이 λ‹¨μˆœν•œ μž‘μ—…μ„ 잘 λ°˜λ³΅ν•˜λ©΄ μ„œλ²„ 관리에 λ¬Έμ œκ°€ 없을 것이닀.

image

4. ꡬ성 및 섀계

image

μΏ λ²„λ„€ν‹°μŠ€μ˜ κ΅¬μ‘°λŠ” μœ„ κ·Έλ¦Όκ³Ό κ°™λ‹€. κ°•μ˜ 제일 끝뢀뢄에 λ‚˜μ˜€λŠ”λ°, 미리 캑쳐λ₯Ό ν•΄λ΄€λ‹€. 크게 보면 Master와 NodeλΌλŠ” ꡬ쑰 μ†μ—μ„œ μ„œλ²„ 관리 흐름이 μ§„ν–‰λ˜λŠ” 것이닀. μœ„ 그림처럼 처음 λ³΄λŠ” μš©μ–΄κ°€ κ°€λ“ν•œ 결둠은 μž μ‹œ λ‹€μ‹œ 잊고, 각각의 κ°œλ…μ„ κ°•μ˜ μˆœμ„œλŒ€λ‘œ μ΅ν˜€λ³΄μž.

4.1. λ§ˆμŠ€ν„°(master)

1) Controller

μ„œλ²„ κ΄€λ¦¬μ—μ„œ state(μƒνƒœ)의 μ’…λ₯˜λŠ” λ‹€μ–‘ν•  수 μžˆλ‹€. μΏ λ²„λ„€ν‹°μŠ€μ—μ„œλŠ” ν΄λŸ¬μŠ€ν„° μƒνƒœμ˜ 각 νŠΉμ •ν•œ 뢀뢄을 κ΄€λ¦¬ν•˜λŠ” λ§Žμ€ 컨트둀러 λ₯Ό μ‚¬μš©ν•œλ‹€. μΏ λ²„λ„€ν‹°μŠ€ λ””μžμΈ μ›λ¦¬μ˜ 핡심이기도 ν•œλ°, μƒνƒœλ₯Ό μ œμ–΄ν•  λ•Œ 루프가 ν•˜λ‚˜λ‘œ μ—°κ²°λ˜μ–΄ μžˆλŠ” λͺ¨λ†€λ¦¬μ‹(monolithic) 집합보닀 κ°„λ‹¨ν•˜κ²Œ 컨트둀러λ₯Ό μ—¬λŸ¬ 개 μ‚¬μš©ν•˜λŠ”κ²Œ νŽΈλ¦¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

컨트둀러 κ°œλ… 덕뢄에 μœ„μ—μ„œ 배운 Desired State 루프가 μ•„λž˜ 그림처럼 ꡉμž₯히 λ§Žμ•„μ§ˆ 수 μžˆλ‹€.

image

  • κΈ°λŠ₯λ³„λ‘œ μͺΌκ°œκ³  μΆ”μƒν™”ν–ˆκΈ° λ•Œλ¬Έμ— 각각의 κΈ°λŠ₯을 κ΄€λ¦¬ν•˜κΈ°κ°€ νŽΈν•΄μ§€λŠ” 것이고, 이λ₯Ό 톡해 관리 μžλ™ν™”λ₯Ό μ‹€ν˜„ν•  수 있게 λœλ‹€.

2) Scheduler

CPU λ˜λŠ” λ©”λͺ¨λ¦¬μ™€ 같은 ν¬λ“œ(μ»¨ν…Œμ΄λ„ˆμ˜μ˜ μ§‘ν•©μ΄μž μΏ λ²„λ„€ν‹°μŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ΅œμ†Œ λ‹¨μœ„)의 λ¦¬μ†ŒμŠ€ μš”κ΅¬ 사항과 ν•¨κ»˜ ν΄λŸ¬μŠ€ν„°μ˜ μƒνƒœλ₯Ό κ³ λ €ν•œλ‹€. 그런 λ‹€μŒ ν¬λ“œλ₯Ό μ μ ˆν•œ μ»΄ν“¨νŒ… λ…Έλ“œμ— μ˜ˆμ•½ν•œλ‹€. μ‰½κ²Œ λ§ν•΄μ„œ μ—¬μœ μžˆλŠ” μ„œλ²„λ₯Ό μ°Ύμ•„ μ»¨ν…Œμ΄λ„ˆλ₯Ό 어디에 λ„μšΈμ§€ κ²°μ •ν•˜λŠ” 것.

3) etcd

μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  μ‘°νšŒν•˜λŠ” DB인 엣지디(etcd)κ°€ μžˆλ‹€. etcdλŠ” λͺ¨λ“  μƒνƒœμ™€ 데이터λ₯Ό ν™•μ‹€ν•˜κ²Œ μ €μž₯ν•΄μ•Όν•œλ‹€. λ”°λΌμ„œ 백업은 ν•„μˆ˜μ΄λ©°, μ•„λž˜ 같은 νŠΉμ§•μ„ 가지고 μžˆλ‹€.

  • κ³ κ°€μš©μ„± : λΆ„μ‚° μ‹œμŠ€ν…œμœΌλ‘œ κ΅¬μ„±ν•˜μ—¬(보톡 엣지디λ₯Ό 3λŒ€μ •λ„ λ„μš΄λ‹€κ³  ν•œλ‹€) μ•ˆμ •μ„±μ„ λ†’μž„
  • 일관성 : 가볍고 λΉ λ₯΄λ©΄μ„œ μ •ν™•ν•˜κ²Œ 섀계
  • key-value ν˜•νƒœλ‘œ 데이터 μ €μž₯
  • TTL(time to live), watch λ“± λΆ€κ°€κΈ°λŠ₯ 제곡

4) API server

λ§ˆμŠ€ν„°μ˜ 쑰율자 역할을 ν•˜λŠ” API Server 이닀. 데이터와 μƒνƒœλ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ λ³€κ²½ν•˜λŠ” μš”μ²­μ€ λͺ¨λ‘ API μ„œλ²„λ₯Ό 톡해(κ±°μ³μ„œ) 이뀄진닀. μ•„λž˜μ™€ 같은 νŠΉμ§•μ„ 가지고 μžˆλ‹€.

  • μƒνƒœλ₯Ό λ°”κΎΈκ±°λ‚˜ 쑰회
  • ectd와 μœ μΌν•˜κ²Œ ν†΅μ‹ ν•˜λŠ” λͺ¨λ“ˆ
  • κΆŒν•œ 체크 (κΆŒν•œμ΄ μ—†μœΌλ©΄ μš”μ²­ κ±°λΆ€)
  • REST API

4.2. λ…Έλ“œ(node)

λ…Έλ“œμ—λŠ” 크게 두 가지 μ»΄ν¬λ„ŒνŠΈκ°€ λ– μžˆλŠ”λ°, ν”„λ‘μ‹œ(Proxy)와 큐블릿(Kubelet) 이닀. 이 두 μ»΄ν¬λ„ŒνŠΈλ„ λ§ˆμŠ€ν„°μ™€ 톡신을 ν•  λ•Œ API Serverλ₯Ό ν†΅ν•΄μ„œλ§Œ μš”μ²­μ™€ 응닡λ₯Ό 얻을 수 μžˆλ‹€.

1) Proxy

λ„€νŠΈμ›Œν¬ ν”„λ‘μ‹œ μ—­ν• (λΆ€ν•˜ λΆ„μ‚°)을 ν•˜κΈ΄ ν•˜μ§€λ§Œ μ‹€μ œλ‘œ μš”μ²­/응닡을 λ°›λŠ” ν”„λ‘μ‹œκ°€ λ– μžˆλŠ” κ°œλ…μ€ μ•„λ‹ˆκ³ , λ‚΄μ™ΈλΆ€ 톡신 μ„€μ •λ§Œ κ΄€λ¦¬ν•˜λŠ” 역할을 ν•œλ‹€.

iptables λ˜λŠ” IPVSλ₯Ό μ‚¬μš©ν•œλ‹€.

2) Kubelet

각 λ…Έλ“œμ—μ„œ μ‹€ν–‰λ˜λ©°, podλ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜ μ€‘μ§€ν•˜κ³  μƒνƒœλ₯Ό μ²΄ν¬ν•œλ‹€. 도컀 λ“± μ•„λ‹ˆλΌ λ‹€μ–‘ν•œ CRI(Container Runtime Interface), 즉 μ»¨ν…Œμ΄λ„ˆλ₯Ό pod둜 감싸 ν™•μ‹€ν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” μž„λ¬΄λ₯Ό 가지고 μžˆλŠ” 것이닀.

profile
μ‚½μ§ˆμ˜ 기둝듀 πŸ‘¨β€πŸ’»

1개의 λŒ“κΈ€

comment-user-thumbnail
2021λ…„ 4μ›” 23일

늘 잘 λ³΄κ³ μžˆμŠ΅λ‹ˆλ‹€..!!

λ‹΅κΈ€ 달기