2024. 6. 25. 00:41ใComputerScience/DockerKubernetes
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 ์ ๋ -> ์ ์ ๊ธฐ๋ฅ์ด ๋ง์์ง
- ๊ฐ๋ฐํ์์๋ ์์ฃผ ์ฐ๋ ๊ธฐ๋ฅ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ด๊ณ , ์ด์ํ์์๋ ์ฟ ๋ฒ๋คํฐ์ค๋ก ์ด๊ฒ๋ค์ ๋์
ํ๋ ๊ฒ
'ComputerScience > DockerKubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes] ๊ธฐ๋ง๊ณ ์ฌ ์ ๋ฆฌ 2 (0) | 2024.06.25 |
---|---|
[Kubernetes] Desired State and Microservices Architecture (0) | 2024.06.09 |
[Kubernetes] ReplicaSet Controller (0) | 2024.05.27 |
[Kubernetes] Nodes and Pods with Minikube (0) | 2024.05.23 |
[Docker] Dockerfile WebSocket Client/Server Build (0) | 2024.05.16 |