ComputerScience/DockerKubernetes

[Kubernetes] 기말고사 정리 1

κΉ€κ°œλ―Έ_ 2024. 6. 25. 00:41

 

 

 

 

 

Chap12. Private Multi-Node Docker / Docker in docker 
- Docker in docker – DinD

- official but not recommended (ꢌμž₯ X) 
- 
도컀 μ•ˆμ—μ„œ λ‹€μ‹œ 도컀λ₯Ό λ„μšΈ 수 μžˆλ„λ‘ ν•œλ‹€ + κ²½κ³ κ°€ 정말 λ§Žλ‹€. 

 

 

 

 

Chap13. Docker Swarm 1
- 
수천 μˆ˜λ§ŒλŒ€μ˜ μ»΄ν“¨ν„°μ—μ„œ SW λŒλ¦¬κΈ° μœ„ν•œ ꢁ극적인 방법, λ„컀 μŠ€μ›œ (like μΏ λ²„λ„€ν‹°μŠ€
- SWARM – 
λ–Ό, κ΅¬μ„± μš”μ†ŒλŠ” μ—¬λŸ¬ κ°œμ§€λ§Œ, ν•˜λ‚˜μ˜ 논리적인 κ΅° (도컀 μŠ€μ›œμ€ μ»¨ν…Œμ΄λ„ˆλ“€μ˜ κ΅°) 
- 
일일이 λ‹€ 타이핑? λΆˆκ°€λŠ₯ / μžλ™ν™”λœ 도컀 μŠ€μ›œ λ“±μž₯ -> λ” νŽΈν•˜κ²Œ μˆ˜λ§Žμ€ 이미지와 μ»¨ν…Œμ΄λ„ˆ 컨트둀 κ°€λŠ₯

- μ–ŒνŒŒμΌμ„ μ»€λ§¨λ“œλΌμΈμ„ 톡해 μΌκΎΌλ“€μ—κ²Œ μ«™ 뿌림 β€“ κ°œλ°œμž 관점 
- 
도컀 머신을 톡해 μ›κ²©μ˜ 컴퓨터λ₯Ό 관리할 수 있게 됨 

- 도컀 μŠ€μ›œμ€ μ›κ²©μ˜ λ…Έλ“œ 관리 μ΄μƒμœΌλ‘œ, μ—¬λŸ¬ μ„œλΉ„μŠ€μ™€ μ»¨ν…Œμ΄λ„ˆλ“€μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μš©λ„

 

* Orchestratior - μˆ˜λ§Žμ€ μ»¨ν…Œμ΄λ„ˆλ“€μ΄ ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜(μ„œλΉ„μŠ€)을 ꡬ성함
유기적으둜 λ™μž‘ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ, μˆ˜λ§Žμ€ 정보λ₯Ό μ§€νœ˜μžκ°€ 관리 (μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°μ˜ λŒ€μƒμ€ μ»¨ν…Œμ΄λ„ˆ)

* μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°λ‘œ ν•˜λ‚˜λ‘œ 묢음 / μ‹€ν–‰ν•˜λŠ” μ• λŠ” IAC (μ–ŒνŒŒμΌ) / application이 이걸 λͺ¨λ₯΄κ²Œ λŒμ•„κ°€κ²Œ ν•˜λŠ” 것이 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°μ˜ μ—­ν• 

- μˆ˜λ§Žμ€ μž‘μ€ SWλ“€μ˜ 총집합 = μΏ λ²„λ„€ν‹°μŠ€ (ꡬ글)
+ 
μΏ λ²„λ„€ν‹°μŠ€μ™€ 도컀 μŠ€μ›œμ΄ μ–‘λŒ€μ‚°λ§₯ 

- scalability μΈ‘λ©΄μ—μ„œ μΏ λ²„λ„€ν‹°μŠ€λŠ” λŒ€κ·œλͺ¨μ˜ 일에 적합, κ΅¬κΈ€μ΄ μƒμš© μ„œλΉ„μŠ€λ₯Ό λ„μš°κΈ° μœ„ν•΄ 개발

- 도컀 μŠ€μ›œ - μž‘은 규λͺ¨μ— 적합, λŒ€μ‹  λ‚œμ΄λ„κ°€ 쉽닀 

 

* Container Orchestration – a process that automates the deployment, management, scaling, networking, and availability of container-based applications / CI/CD DevOps μžλ™ν™”κ°€ 핡심
- multiple Docker hosts
둜 ꡬ성 β€“ manager(리더)μ—κ²Œ μ–ŒνŒŒμΌμ„ 제곡, λ§€λ‹ˆμ €κ°€ workers(nodes) μΌκΎΌλ“€μ„ λ„μš΄λ‹€. 

Ex) 3개의 도컀 머신을 띄움 (manager, worker1, worker2)
docker-machine ssh manager docker swarm init --advertise-addr 192.168.99.100 
: 
λ§€λ‹ˆμ €μ•Ό λ‹ˆκ°€ λŒ€μž₯이야 (λŒ€μž₯을 λ§Œλ“œλŠ” 것) & λ‚΄κ°€ λ§€λ‹ˆμ €λΌκ³  주변에 λΏŒλ¦¬λŠ” 것

docker-machine ssh worker1 docker swarm join --token ~ // μ΄ λͺ…령을 μΉ΄ν”Όν•΄μ„œ, μ›Œμ»€κ°€ ν•΄λ‹Ή μŠ€μ›œμ— λ“€μ–΄κ°„λ‹€
λŒ€μž₯λ‹˜ IP address둜 λ‚΄ port number둜 join (192.168.99.100:2377)

 

* Docker stack – init, join이 λλ‚˜λ©΄ 싀행은 stack files 
: 
μ–ŒνŒŒμΌλ“€μ„ 이제 μŠ€νƒ 파일이라고 λΆ€λ₯Ό 것, ν•˜λ‚˜μ˜ μ—”λ“œ μœ μ € μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μŠ€νƒμ΄λΌκ³  칭함
- scp 
λͺ…λ Ήμ–΄λ₯Ό 톡해, λ‚΄ λ””λ ‰ν† λ¦¬μ˜ docker-compose.yaml νŒŒμΌμ„ λ§€λ‹ˆμ €μ˜ λ””λ ‰ν† λ¦¬λ‘œ λ³΅μ‚¬ν•œλ‹€. 
- docker stack deploy -c docker-compose.yaml / 
μ„œλΉ„μŠ€λ₯Ό 돌리라고 ν•œλ‹€ + μŠ€μ›œμ€ μžλ™μœΌλ‘œ local networkλ₯Ό λ§Œλ“¦

- μ΄ν›„ stack rm μ„ 톡해 λ„€νŠΈμ›Œν¬μ™€ μ„œλΉ„μŠ€ (helloswarm) μ§€μš°κΈ° -> docker swarm leave둜 joinν•œ μ›Œμ»€κ°€ μŠ€μ›œμ—μ„œ λ‚˜κ°€κΈ°

- docker swarm leave λͺ…λ ΉμœΌλ‘œ λ§€λ‹ˆμ €λ„ μ§€μš°κΈ° / docker-machine rm λ„컀 λ¨Έμ‹  λ…Έλ“œλ“€μ„ 지움

 

 

 

Chap14. Docker Swarm 2 
- Scale service up & down, update - 
μ‚¬λžŒμ΄ μ†μœΌλ‘œ ν•˜λŠ” κ²½μš°λŠ” μ—†λ‹€, λŒ€λΆ€λΆ„ ν”„λ‘œκ·Έλž¨μ„ 톡해 up, down 
+ 
μΏ λ²„λ„€ν‹°μŠ€ rest API μ–Έμ–΄λ³„ 쑴재, μ†μœΌλ‘œ νƒ€μ΄ν•‘ν•œ λͺ…λ Ήλ“€ λͺ¨λ‘ API ν˜ΈμΆœλ‘œ μ‹€ν–‰ κ°€λŠ₯

+ μŠ€μ›œμ€ 두 μ»¨ν…Œμ΄λ„ˆ 밀어버림 -> λͺ…령에 λŒ€ν•œ 결정을 μ‚¬λžŒμ΄ ν•œλ‹€ / μΏ λ²„λ„€ν‹°μŠ€λŠ” ν•˜λ‚˜ν•˜λ‚˜ μ„¬μ„Έν•˜κ²Œ ꡐ체 (μ‚¬λžŒμ΄ μ–˜ν•œν…Œ 뢀탁) -> μΈκ°„이 ν•˜λ˜ 일을 λͺ¨λ‘ μ½”λ“œν™” -> μΏ λ²„λ„€ν‹°μŠ€κ°€ μ•Œμ•„μ„œ 함 vs μŠ€μ›œμ€ μ‚¬λžŒμ΄ λͺ…령을 λ‚΄λ¦Ό

 

docker service create --replicas 3 -p 80:80 --name web-1 nginx // nginx둜 web-1 μ΄λ¦„μ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό 3개 λ§Œλ“€μ–΄λΌ
docker service scale web-1=4        // * scale option
을 μ‚¬μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆ 개수λ₯Ό 늘리고 μ€„μž„ 
docker service update --image nginx:1.14.0 web-1     // latest version
이던 nginxλ₯Ό downgrade, λ‘€λ°±

 

 

 

Chap15. Docker Labels

- λ„μ»€μ—μ„œ μ·¨κΈ‰ν•˜λŠ” 였브젝트(이미지, μ»¨ν…Œμ΄λ„ˆ, volumes, networks, swarm nodes etc)에 라벨을 λΆ™μ΄λŠ” 것
- 
무언가 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ 라벨을 달 수 μžˆλ‹€ or μ»¨ν…Œμ΄λ„ˆ 등을 μƒν˜Έ κ΄€κ³„λ‘œ λ¬Άμ–΄μ£ΌκΈ° μœ„ν•΄μ„œ

- key-value pair (dictionary), μ—¬λŸ¬ 라벨을 달 수 μžˆλ‹€.

- Each key-label pair must be unique within an object.  
+ 
μΉ΄ν…Œκ³ λ¦¬(λŒ€λΆ„λ₯˜μ—μ„œ μ†ŒλΆ„λ₯˜λ‘œ) κ΅¬λΆ„ν•  λ•Œ . μ μ„ 찍고, λ™λ“±ν•œ λ ˆλ²¨μ—μ„œ ꡬ뢄할 λ•Œ β€“ ν•˜μ΄ν”ˆμ„ 뢙인닀.
+ App 
ν”„λ‘œκ·Έλž¨ κ°œλ°œν•  λ•Œ μ›Ήμ‚¬μ΄νŠΈ μ—­μˆœμœΌλ‘œ 도메인을 λ’€μ§‘λŠ”λ‹€ ex) com.example.some-label
+ 
도컀가 μ μœ ν•œ 라벨은 μ‚¬μš© λΆˆκ°€ ex) com.docker.*, io.docker.*, &org.dockerproject.*

 

* λ³€μˆ˜μ— 값을 λ„£λŠ”λ‹€ (or μ˜€λ₯Έμͺ½μ„ μ™Όμͺ½μœΌλ‘œ μΉ­ν•œλ‹€)
- docker node update --label-add foo worker1 // worker1 
에 :foo λΌκ³  라벨을 λΆ™μ΄λŠ” 것

- static for the lifetime of the object, ν•œλ²ˆ μƒμ„±ν•˜λ©΄ μ˜€λΈŒμ νŠΈκ°€ 죽을 λ•ŒκΉŒμ§€ μœ μ§€λ¨
- to change labels, you must recreate the object / 
μΏ λ²„λ„€ν‹°μŠ€μ—μ„œλŠ” λ™μ μœΌλ‘œ update κ°€λŠ₯함 

 

 

 

Chap16. Kubernetes Overview
* 
μΏ λ²„λ„€ν‹°μŠ€λ„ λ„μ»€μŠ€μ›œκ³Ό 같은 μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜μ΄λ‹€.
- 
μΏ λ²„λ„€ν‹°μŠ€λŠ” μ‹€μ œλ‘œ νšŒμ‚¬μ—μ„œ μš΄μ˜ν•  수 μžˆλŠ” μˆ˜μ€€, κ΅¬κΈ€μ΄ μ“°λŠ” μ„œλΉ„μŠ€λ₯Ό μ˜€ν”ˆμ†ŒμŠ€ν™” ν•œ 것 (ꡬ글이 μ¨μ„œ 검증됨)
- 
도컀 μŠ€μ›œμ—μ„œλŠ” 일일이 μ†μœΌλ‘œ ν•΄μ•Ό ν•˜λŠ” 것듀을 μΏ λ²„λ„€ν‹°μŠ€λŠ” μžλ™ν™”ν•˜μ—¬ 훨씬 λ§Žμ€ κΈ°λŠ₯을 제곡, λŒ€κ·œλͺ¨μ— 편리

- μΏ λ²„λ„€ν‹°μŠ€λŠ” μ˜€ν”ˆμ†ŒμŠ€ SW / management κΈ°λŠ₯이 도컀보닀 κ°•λ ₯ / λ„컀λ₯Ό 밑에 κΉ– - μ»¨ν…Œμ΄λ„ˆ κΈ°μˆ μ€ 도컀인 것
- open-source system for automating deployment, scaling & management of containerized applications (Google)
+ 
κ΅¬κΈ€μ˜ λ…Όλ¬Έ Borg, Omega - μˆ˜μ²œ μˆ˜λ§ŒλŒ€μ˜ 컴퓨터λ₯Ό λ¬ΆλŠ” ν–‰μœ„ (cluster) μ»¨ν…Œμ΄λ„ˆκ°€ μ•„λ‹ˆλΌ job, task μ¦‰ ν”„λ‘œκ·Έλž¨

 

* CNCF - Cloud Native computing Foundation : μ• μ‹œλ‹Ήμ΄ˆ 수천 μˆ˜λ§ŒλŒ€μ˜ 컴퓨터가 μžˆλ‹€κ³  κ°€μ •ν•˜κ³  μ‹œμž‘
- 
λ¦¬λˆ…μŠ€ μ‚°ν•˜μ—μ„œ ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… κ΄€λ ¨μœΌλ‘œ 뢄리됨, μˆ˜μ²œ 수만개의 CPU, DISK, λ„€νŠΈμ›Œν¬λ₯Ό μƒκ°ν•˜κ³  SW λ§Œλ“€κΈ°

- microservices, dynamically orchestrating those containers to optimize resource utilization 

* Kubernetes: polyglot - multi-language둜 개발 / Google / Go μ–Έμ–΄λ‘œ μ“°μž„ β€“ cluster management SW
- 
μ»¨ν…Œμ΄λ„ˆ ν΄λŸ¬μŠ€ν„° 관리 / deploying apps에 λŒ€ν•œ 도ꡬ 제곡 / scalingκ³Ό update 

 

* PokΓ©mon Go - μ»¨ν…Œμ΄λ„ˆ 기술 쒋은 건 μ•Œκ² μ–΄, κ·Όλ° public user듀이 VM을 λ²—μ–΄λ‚  ν•„μš”κ°€ μžˆμ–΄?
+ 
포켓λͺ¬ κ³ : μ»¨ν…Œμ΄λ„ˆ 베이슀, κ΅¬κΈ€ μΏ λ²„λ„€ν‹°μŠ€ μ‚¬μš© 

-> νŠΈλž˜ν”½ ν­λ°œν–ˆμ§€λ§Œ, μ„œλΉ„μŠ€μ— λ¬Έμ œκ°€ μ—†μ—ˆλ‹€ (성곡적인 운영 사둀) / μ΄μ •도 ν„°μ§€λ©΄ μ„œλΉ„μŠ€κ°€ λ©ˆμΆ°μ•Ό λ˜λŠ”λ°, μ•ˆ 터짐 

+ μ˜ˆμƒλ³΄λ‹€ 50λ°° μ΄μƒμ˜ νŠΈλž˜ν”½μ΄ ν­λ°œν–ˆμœΌλ‚˜ κ²¬λŽ λ‹€. 
** 
μΏ λ²„λ„€ν‹°μŠ€κ°€ κ²€μ¦λœ 사둀 - μ»¨ν…Œμ΄λ„ˆμ™€ μΏ λ²„λ„€ν‹°μŠ€λŠ” 벀처 νšŒμ‚¬ merit / κ΅¬κΈ€μ˜ 타깃은 벀처!

+ ν˜„μž¬ 전세계가 μΏ λ²„λ„€ν‹°μŠ€λ‘œ λŒ€λ™λ‹¨κ²° / μ••λ„μ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° 쀑 μΏ λ²„λ„€ν‹°μŠ€μ˜ λΉ„μœ¨μ΄ λ†’λ‹€

 

 

 

Chap17. Microservices and Killercoda 
- 
λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ vs IBM mainframe - μ—„μ²­λ‚œ CPU DISK ν•œ λŒ€μ˜ 컴퓨터 (monolithic)

- κΈ°μ‘΄μ˜ λͺ¨λ†€λ¦¬ν‹± ꡬ쑰 - ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ, λ§‰κ°•ν•œ 컴퓨터가 λͺ¨λ‘ ν†΅μ œ / μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ / μ €μž₯ν•  정보가 μžˆλŠ” data access layer
/ 
λŒμ•„κ°€λŠ” 둜직 / 3개λ₯Ό, ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ— λͺ¨λ“  κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것 
- μ‹€ν–‰νŒŒμΌ ν•˜λ‚˜μ— λ‹€ λ„£μŒ (μ‚¬μš©μž UI, μ£Όλ¬Έκ³Ό κ΄€λ ¨λœ λ°±μ—”λ“œ 둜직, inventory λ°μ΄ν„° μœ μ§€ λ“±) 

 

* What happens once the apps becomes large & team grows in size? 
1) 
μƒˆλ‘œμš΄ μš”κ΅¬μ‚¬ν•­ -> 4개의 κ΅¬μ„±μš”μ†Œκ°€ μžˆμ„ λ•Œ, μš©λŸ‰μ΄ λŠ˜μ–΄λ‚œλ‹€κ³  ν•΄μ„œ, 4개의 λͺ¨λ“ˆμ΄ μΌκ΄„μ μœΌλ‘œ μ¦κ°€ν•˜λŠ” κ²½μš°λŠ” λ³„λ‘œ μ—†μŒ 
-
λͺ¨λ†€λ¦¬ν‹± κ΅¬μ‘°λŠ” νŠΉμ • λͺ¨λ“ˆμ΄ 2λ°° 더 ν•„μš”ν•˜λ©΄ 1ν…ŒλΌ μ”© 두 쌍λ‘₯이가 ν•„μš”ν•¨ 
- 
마이크둜 μ„œλΉ„μŠ€λŠ” μ¦λŸ‰μ΄ ν•„μš”ν•œ λͺ¨λ“ˆλ§Œ Nλ°° μ°¨λ³„ν™”λœ μš©λŸ‰μ— λŒ€ν•΄ ν•„μš”ν•œ 만큼만 증섀이 κ°€λŠ₯함
2) 
νŒ€μ΄ 컀지면? κ°™μ΄ ν•˜λ‚˜μ˜ λŒ€κ·œλͺ¨ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ—…ν•œλ‹€λŠ” 것은 μ–΄λ ΅λ‹€ 

- ν•œ 번 릴리즈 ν•˜λ €λ©΄ μ—¬λŸ¬ λͺ¨λ“ˆ κ°œλ°œμžλ“€μ΄ κ·œμΉ™, μΌμ •을 λ§žμΆ”μ–΄μ•Ό 함 

- 각각의 독립적인 ν”„λ‘œκ·Έλž¨λ“€ - ν†΅μ‹ , APIλ₯Ό 톡해 정보λ₯Ό μ£Όκ³  받도둝 함 
- 
λ”°λ‘œ DBλ₯Ό κ°–κ³  있음 / μš°λ¦¬ νŒ€ ν”„λ‘œμ νŠΈκ°€ κΈ°λŠ₯을 ν™•μž₯ν•˜κ³ , μˆ˜μ •해도 μ˜† λΆ€μ„œμ˜ λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ— 영ν–₯을 μ£Όμ§€ μ•ŠμŒ (톡합 κ΄€λ ¨ νšŒμ˜κ°€ 쀄어듦) / λ¦΄λ¦¬μ¦ˆ 일정이 λΆ€μ„œλ³„λ‘œ 달라져도 됨 (독립적) // νŒ€μ˜ 운영(HR)에 λŒ€ν•œ 접근법도 달라짐 

-> ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ— μ΅œμ ν™”λœ μ‚¬λžŒκ³Ό κΈ°μˆ μ„ 선택할 수 μžˆλ‹€ (μ–Έμ–΄, κ°œλ°œ μŠ€νƒ, polyglot)

* Why Microservice Architecture? 
- 
μž‘μ€ μ„œλΉ„μŠ€λ“€λ‘œ μ°’λŠ”λ‹€ / 3개의 κΈ°λŠ₯이 ν•„μš”ν•  뿐, κ°κ° 독립적인 μ„œλΉ„μŠ€λ“€λ‘œ λ–Όμ–΄λ‚΄μ„œ μ‹€ν–‰μ‹œν‚€κ³ , μ΄κ±Έ λͺ¨μ•„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ œκ³΅ν•˜μž / product = group of independent services / λͺ¨λ‘ business area에 따라 μͺΌκ°œμ§€κ³ , κ°κ°μ΄ μ›ν•˜λŠ” tech stack을 ν™œμš©ν•˜μ—¬ 개발됨 / μ„œλ‘œ λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€μ€ rest over HTTPλ₯Ό ν™œμš©ν•˜μ—¬ 톡신 κ°€λŠ₯ + μž‘κ³ , λΉ λ₯΄λ‹€

 

(1) Scalability – scalie independently without affecting other microservices – λͺ¨λ†€λ¦¬ν‹±μ€ μš©λŸ‰ λΆ€μ‘±ν•˜λ©΄ μ„ΈμŒλ‘₯이
(2) Availability - 
κ°€μš©μ„± - κ³„속 μ„œλΉ„μŠ€κ°€ λ™μž‘ν•˜λŠ”κ°€? κ΅¬μ„± μš”μ†Œ 쀑 ν•˜λ‚˜κ°€ 먹톡이 되면? λͺ¨λ†€λ¦¬ν‹±μ€ λ‹€ 죽음
- 
일뢀 κΈ°λŠ₯이 죽으면, μ•½κ°„μ˜ 지연은 μžˆκ² μ§€λ§Œ, κ±”λ§Œ λ˜μ‚΄λ¦¬λ©΄ λœλ‹€ - λͺ¨λ†€λ¦¬ν‹±μ²˜λŸΌ ν†΅μœΌλ‘œ λ§κ°€μ§€μ§€λŠ” μ•ŠμŒ
(3) Fault Tolerance – 
μž₯μ•  λŒ€μ‘ β€“ application의 μž‘μ€ λΆ€λΆ„λ§Œ 영ν–₯을 λ°›λŠ”λ‹€ (SK C&C μ „체 λ‹€ μ£½μ§€ μ•Šκ³ ) 
(4) Agility - 
μš”κ΅¬μ‚¬ν•­μ΄ λ°”λ€” λ•Œ, agileν•˜κ²Œ λŒ€μ‘ κ°€λŠ₯ - μž‘은 규λͺ¨ νŒ€, μ§€κΈˆ λ‹Ήμž₯ ν•„μš”ν•œ κΈ°λŠ₯을 λΉ λ₯΄κ²Œ 개발
(5) Polyglot Persistence - 
ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ μ„œλΉ„μŠ€λ₯Ό λ§Œλ“œλŠ”λ°, μ—¬λŸ¬ 언어와 μ—¬λŸ¬ DBκ°€ κ³΅μ‘΄ν•˜λŠ” ꡬ쑰
- 
λͺ©μ μ— λ§žλŠ” 도ꡬλ₯Ό μ΅œμ ν™”ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€ (multi-lingual) / λͺ¨λ†€λ¦¬ν‹±μ€ DB와 major μ–Έμ–΄κ°€ 정해짐
- 
λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” μ„ ν˜Έν•˜λŠ” 기술 μŠ€νƒμœΌλ‘œ, λ…λ¦½μ μœΌλ‘œ 개발 κ°€λŠ₯함 (polyglot) - κ°μž 본인의 역할에 μΆ©μ‹€
(6) Maintainability - 
μœ μ§€λ³΄μˆ˜μ˜ νŽΈλ¦¬ν•¨ / μž‘은 파일, ν”„λ‘œκ·Έλž¨λ“€λ‘œ 많이 λ‚˜λ‰˜μ–΄μ§ - λ©μΉ˜ 큰 ν•˜λ‚˜λ³΄λ‹€, λ©μΉ˜ μž‘μ€ μ—¬λŸ¬ κ°œκ°€ μœ μ§€λ³΄μˆ˜ν•˜κΈ° 쉽닀

 

* λ§ˆμ΄ν¬λ‘œ μ„œλΉ„μŠ€κ°€ μž₯점을 κ°–λŠ” 경우
(1) Software stack agnostic - 
각자 μ•Œμ•„μ„œ 짜 / API만 λ§žμΆ”μž (HTTP ν†΅μ‹  ν”„λ‘œν† μ½œλ‘œ ν•˜λŠ” 것) 
- SW stack
은 μ•Œ ν•„μš” X, μ–½λ§€μ΄μ§€ μ•ŠμŒ - μ›ν•˜λŠ” κΈ°λŠ₯만 μ œλŒ€λ‘œ ν•΄μ£Όλ©΄ 됨 / λ‚΄λΆ€λŠ” μ•Œμ•„μ„œ 짜라 (μ΅œμ ν™” κ°€λŠ₯)
(2) Faster Development - 
μž‘μ€ SWλ₯Ό ν•˜λ£¨μ— 릴리즈 4λ²ˆμ΄λ‚˜ λ°”κΏ€ 수 μžˆλŠ” 것 ex) λ„€μ΄λ²„, κ΅¬κΈ€

(3) clear separation of business concerns - λ³΅μž‘ν•˜λ‹ˆ λ‚˜μ€‘μ—

+ λ³„λ„λ‘œ 개발되고, μœ μ§€λ³΄μˆ˜ 되며, 7~9λͺ…μ˜ μž‘μ€ νŒ€ λ‚΄λΆ€μ—μ„œ κ°œλ°œν•˜κ³ , λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ„œλ‘œ λŒ€ν™”ν•˜λ©°, κ°μž μ–΄λ–»κ²Œ κ°œλ°œν–ˆλŠ”μ§€ 내뢀적인 κ΅¬ν˜„μ—λŠ” 관심이 μ—†λ‹€ - κ°κ°μ˜ μ„œλ²„λŠ” APIλ₯Ό μ œκ³΅ν•  뿐
- mesh 
κ·Έλ¬Ό 라인은 톡신 라인이 μžˆλŠ” 것을 의미 - APIκ°€ 미리 잘 μ •μ˜ν•˜λŠ” 것 μ€‘μš” // κ°μ²΄μ§€ν–₯의 기법과 μœ μ‚¬ν•¨
- 
객체와 같이 각각 독립적인 μ»¨ν…Œμ΄λ„ˆλ“€λ‘œ λ–¨μ–΄μ Έ μžˆλŠ” 것

 

- flask crud resful μ˜ˆμ œ - get put delete λ“± 정말 μž‘μ€ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜κΈ° μœ„ν•œ 도ꡬ β€“ micro ν”„λ‘œκ·Έλž¨λ“€μ„ 짬
- 
이런 애듀을 μ»¨ν…Œμ΄λ„ˆ μœ„μ— κ΅¬ν˜„ν•¨ + κ΅³μ΄ ν”„λ ˆμž„μ›Œν¬ μ•ˆ 써도 λ˜λŠ”λ°, ν†΅κ³„ 정보 λ“± 기타 νŽΈν•˜λ‹ˆκΉŒ μ“°λŠ” 것

+ λ„μ»€λŠ” μžκΈ°κ°€ 직접, μΏ λ²„λ„€ν‹°μŠ€λŠ” NodePortλΌλŠ” ν”„λ‘œκ·Έλž¨μ΄ λŒ€μ‹  ν•˜λŠ” 것 
– Cluster IP - 
μΏ λ²„λ„€ν‹°μŠ€λ₯Ό λ„μš°μžλ§ˆμž get all을 ν•˜λ©΄ 있음 - DNSλ₯Ό ν¬ν•¨ν•˜μ—¬, ν΄λŸ¬μŠ€ν„°λ₯Ό λ…Όλ¦¬μ μœΌλ‘œ ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ€Œ

 

 

 

Chap18. Microservices and Killercoda
- 
μΏ λ²„λ„€ν‹°μŠ€λŠ” 도컀 기반의 μ»¨ν…Œμ΄λ„ˆλ₯Ό ν™œμš©ν•΄μ„œ, κ·Έ μœ„μ— 좔가적인 κΈ°λŠ₯듀을 μ œκ³΅ν•˜λŠ” μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° SW
- Basic Objects in k8s – Node, Cluster, Container, Pod, Deployment, Ingress 

* μ»¨ν…Œμ΄λ„ˆ κ°œλ…μ€ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•¨ - μΏ λ²„λ„€ν‹°μŠ€μ—μ„œλŠ” 쑰금 더 큰 κ°œλ…μ΄ ν•„μš” -> pod을 κ³ μ•ˆν•¨

 

* Pods - κ°œλ°œ κ΄€μ μ—μ„œ κ°€μž₯ μž‘μ€ λ‹¨μœ„λŠ” μ»¨ν…Œμ΄λ„ˆ But μš΄μ˜ κ΄€μ μ—μ„œλŠ” DB, Logic λ“±μ΄ ν•¨κ»˜ μ›€μ§μž„ 

- κ°œλ³„μ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μš΄μš©ν•  일X // ν•¨κ»˜ 움직여야 ν•˜κΈ° λ•Œλ¬Έμ— IP Addressλ₯Ό λ¬ΆλŠ”λ‹€. 

- μœ μ˜λ―Έν•œ κΈ°λŠ₯을 ν•˜λŠ” μ΅œμ†Œ λ‹¨μœ„κ°€ pod - λ‚΄λΆ€μ— μ»¨ν…Œμ΄λ„ˆλ“€μ΄ 듀어감
ex) 1a, 1b : 
μ»¨ν…Œμ΄λ„ˆ1에 ν•΄λ‹Ήν•˜λŠ” μ• κ°€ 2개 λ– μžˆκ΅¬λ‚˜ // λ™μΌν•œ IP Addressλ₯Ό ν•˜λ‚˜ λΆ€μ—¬ν•΄μ„œ 3개의 μ»¨ν…Œμ΄λ„ˆκ°€ ν•¨κ»˜ μ“°λŠ” κ²ƒμ²˜λŸΌ 보인닀 - localhost둜 본인듀을 ν˜ΈμΆœν•  수 μžˆλ‹€

- basic building block of Kubernetes – the smallest and simplest unit in k8s – μΏ λ²„λ„€ν‹°μŠ€λŠ” 운영 κ΄€μ μ΄λ‹ˆκΉŒ 
- pod
은 ν•˜λ‚˜μ˜ IP Addressλ₯Ό 곡유 - ν¬νŠΈ λ„˜λ²„λ§Œ λ‹€λ₯΄κ²Œ λΆ€λ₯΄λ©΄ 됨 / λ‚΄λΆ€ μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μžκΈ°λ“€λΌλ¦¬ λŒ€ν™”ν•˜κΈ° 용이
- Each pod is assigned a unique IP address – pod 
μ•ˆμ˜ 애듀은 localhost에 port number만 μ£Όλ©΄ 각자 접속 κ°€λŠ₯

 

* Nodes - λ…Έλ“œ = λ„컀 λ¨Έμ‹ , μ»΄ν“¨ν„°μ— 상응 / A worker machine in Kubernetes – VM or physical machine 
- each node contains the services (a set of pods using label selectors) necessary to run pods 

* Clusters - λ…Έλ“œλ“€μ˜ 집합체가 ν΄λŸ¬μŠ€ν„° / λ…Έλ“œκ°€ ν΄λŸ¬μŠ€ν„° μ•ˆμœΌλ‘œ λŒλ €λ“€μ–΄κ° + μŠ€ν† λ¦¬μ§€λ“€μ΄ ν΄λŸ¬μŠ€ν„°μ— λΆ™μŒ
- 
ν•˜λ‚˜μ˜ 논리적인 컴퓨터, ν΄λŸ¬μŠ€ν„°κ°€ 우리의 운영의 λŒ€μƒ
- A set of nodes that run containerized applications managed by Kubernetes 
- 
이 ν΄λŸ¬μŠ€ν„°λ‚˜ λ…Έλ“œλ“€μ΄ 직접 인터넷에 λ…ΈμΆœλ˜μ§€λŠ” μ•ŠμŒ β€“ λ„€νŠΈμ›Œν¬κ°€ 방어됨 

-> λ°–μœΌλ‘œ λ‚˜κ°€λ €λ©΄ ν΄λŸ¬μŠ€ν„°μ— ꡬ멍을 λš«μ–΄μ„œ μ™ΈλΆ€λ‘œ λ‚˜κ°€μ•Ό 함

* Deployment - ν•˜λ‚˜μ˜ μ–ŒνŒŒμΌλ‘œ ν•„μš”ν•œ 것듀을 λ‹€ 띄움 β€“ programmer describe a desired state in a Deployment
- 
κ°œλ°œμžλŠ” ν¬λ§ν•˜λŠ” μƒνƒœλ₯Ό 전달해 β€“ λ„컀 νŒŒμΌμ€ μ‹€ν–‰, μΏ λ²„λ„€ν‹°μŠ€λŠ” 뢀탁 (pod 4κ°œκ°€ 뜨길 ν¬λ§ν•©λ‹ˆλ‹€) 
- 4
개 쀑 ν•˜λ‚˜κ°€ μ£½μ—ˆμ–΄ -> μΏ λ²„λ„€ν‹°μŠ€λŠ” λͺ¨λ‹ˆν„°λ§ν•˜λ‹€κ°€ λ‹€μ‹œ μ‚΄λ €μ€€λ‹€ - μ„œλΉ„μŠ€κ°€ μ–΄λ–»κ²Œλ“  μœ μ§€λ˜λ„λ‘ 
* 
μ–ŒνŒŒμΌμ— 인프라 κΈ°μˆ ν•˜λŠ” 것이 desired state

 

** λ„μ»€ν•˜κ³  λ‹€λ₯Έ 큰 차이점

- λ„μ»€μŠ€μ›œ vs μΏ λ²„λ„€ν‹°μŠ€ - μΏ λ²„λ„€ν‹°μŠ€μ—λŠ” μ„œλΉ„μŠ€ μš΄μ˜ν•  λ•Œ ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨λ“€μ΄ 많음 
- 
λ„μ»€λŠ” 도컀 μ—”μ§„ / λ„컀 데λͺ¬ 끝 (λ‚΄κ°€ 도컀 μ—”μ§„μ—κ²Œ CLI둜 4개 λ§Œλ“€μ–΄μ£Όμ„Έμš” μš”μ²­ν•¨) 
- 
μΏ λ²„λ„€ν‹°μŠ€λŠ” λ¬΄μˆ˜ν•œ ν”„λ‘œκ·Έλž¨λ“€μ˜ 덩어리 - μΏ λ²„λ„€ν‹°μŠ€κ°€ ν•΄μ£ΌλŠ”κ±°μ•Ό X μ•„μ£Ό ꡬ체적인 Deployment Controller ν”„λ‘œκ·Έλž¨μ΄ ν•˜λŠ” 것 
- 
λ„μ»€μ—κ²Œ λͺ…령을 μ£Όλ©΄, λ„컀가 이에 ν•΄λ‹Ήν•˜λŠ” 행동을 함 (4개λ₯Ό λ§Œλ“€μ–΄λΌ) - μ΄κ²Œ 도컀 μŠ€νƒ€μΌ 

- μΏ λ²„λ„€ν‹°μŠ€λŠ” 인간이 μ•„λ‹ˆλΌ μΏ λ²„λ„€ν‹°μŠ€κ°€ ν•˜λŠ” 것 // 4κ°œκ°€ λ™μž‘ν•˜λ„λ‘ λ§Œλ“€μ–΄ μ£Όμ…¨μœΌλ©΄ μ’‹κ² μ–΄μš” 뢀탁 (개발과 운영의 차이와 λΉ„μŠ·)

 

* Ingress β€“ An API Object that manages external access to the services in a cluster, typically HTTP 
- ingress can provide load balancing, SSL termination and name-based virtual hosting 

+ μ œμΌ μ²˜μŒμ—λŠ” service/cluster IP λ”± ν•˜λ‚˜ λ– μžˆμŒ - μ„œλΉ„μŠ€ μ•ˆμ˜ cluster IP / node port μ–˜λ„ μ„œλΉ„μŠ€
- 
μ„œλΉ„μŠ€κ°€ 뭐냐? ν”„λ‘œκ·Έλž¨μ΄λ‹€ - μΏ λ²„λ„€ν‹°μŠ€λ„ μ²˜μŒμ—λŠ” 도컀 μŠ€μ›œ + borg, omega μ •도 -> μ μ  κΈ°λŠ₯이 λ§Žμ•„μ§ 
- 
κ°œλ°œνŒ€μ—μ„œλŠ” 자주 μ“°λŠ” κΈ°λŠ₯듀을 라이브러리λ₯Ό λ§Œλ“€μ–΄λ‚΄κ³ , μš΄μ˜νŒ€μ—μ„œλŠ” μΏ λ²„λ„€ν‹°μŠ€λ‘œ 이것듀을 λ„μž…ν•˜λŠ” 것