Docker swarm
- docker swarm์ ์ปจํ ์ด๋๋ฅผ ์ํ ๋ถ์ฐ ํ๊ฒฝ ํด๋ฌ์คํฐ๋ง ๋ฐ ์ค์ผ์ค๋ง ๋๊ตฌ์ด๋ค.
- Docker๋ ๋จ์ผ ํธ์คํธ, Docker swarm์ ๋ค์ค ํธ์คํธ ๊ธฐ๋ฐ์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ค.
- "์ปจํ ์ด๋ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ํ๋ ๊ด๋ฆฌ ๋ฐ ์ ์ด๋ฅผ ์ํํ๋ ๋๊ตฌ"
- swarm mode๋ฅผ ์ด๊ธฐํ(init)ํ์ฌ ์ฌ์ฉ
์ฃผ์ ๊ธฐ๋ฅ
- DNS ์๋ฒ๋ฅผ ํตํด ์๋น์ค ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ ๊ฐ๋ฅ
- ์๋น์ค์ฉ ํฌํธ๋ฅผ ์ธ๋ถ Load Balancer์ ์ฐ๊ฒฐํ์ฌ ๋ถํ ๋ถ์ฐ ๊ตฌํ
- ๊ฐ ๋ ธ๋๋ TLS(Transport Layer Security) ์ํธ ์ธ์ฆ ๋ฐ ์ํธํ๋ฅผ ํตํด ๋ ธ๋ ๊ฐ ํต์ ์ ๋ํ ๋ณด์ ๊ธฐ๋ฅ ๊ตฌํ
- Docker์์ง๊ณผ ํตํฉ๋ multi host๊ธฐ๋ฐ์ ๋ถ์ฐ Cluster ์ด์
- ์๋น์ค์ ๋ํ ๋ฉํฐ ํธ์คํธ ํด๋ฌ์คํฐ ๋คํธ์ํฌ(overlay) ์ฌ์ฉ์ผ๋ก overlay network์ ์ปจํ ์ด๋ ์ฃผ์ ์๋ ํ ๋น. (๊ธฐ์กด์๋ bridge network๋ง ์ฌ์ฉ)
Docker swarm mode ์ฃผ์ ์ฉ์ด ์ ๋ฆฌ
Node
Docker swarm cluster๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ Docker host
Manager Node | Worker Node
Cluster ๊ด๋ฆฌ ๋ฐ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ ๋ด๋นํ๋ ๋ ธ๋ | ์๋น์ค๋ค์ด ์ค์ ๋์ํ๋ ๋ ธํธ
Stack
๋ค์ค ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ํค๋ ์๋น์ค ๋ฌถ์
Service
Node์์ ์ํํ๊ณ ์ ํ๋ ์์ (๋ฐฐํฌ) ๋จ์
Task
์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ ์ปจํ ์ด๋.
ํ๋์ Service๋ replica ์์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ Task ๋ณด์ , ๊ฐ Task์๋ ํ๋์ ์ปจํ ์ด๋ ํฌํจ.
Scheduling
Service ๋ช ์ธ์ ๋ฐ๋ผ Task (์ปจํ ์ด๋)๋ฅผ node์ ๋ถ๋ฐฐํ๋ ์์
์์ฒญ -> Ingress -> Ingress ์ IPVS -> service ์ฐพ์ -> task์ IP๋ฅผ ํ์ธ -> ์ฐ๊ฒฐ
์ค์ต์ผ๋ก ๋์ด๊ฐ๋ณด์
- docker swarm mode๋ก ์ด๊ธฐํํ์ง ์์๋ค๋ฉด Swarm: inactive์ธ ์ํ์ผ ๊ฒ์ด๋ค.
$ docker info | grep Swarm
Swarm: inactive
- init์ ํตํด magager node์์ swarm cluster๋ฅผ ์์
- --advertise-addr์ ๋ค๋ฅธ swarm node๋ค์ด manager node์ ์ ๊ทผํ๊ธฐ ์ํ IP ์ ๋ ฅ.
- docker swam join --~~~~~ ์ด ๋ถ๋ถ์ ๋ค๋ฅธ host๋ค์ ์ ๋ ฅํด์ค์ผ Manager Node์ Worker Node๊ฐ ์ฐ๊ฒฐ์ด ๋๋ค.
$ docker swarm init --advertise-addr 192.168.56.101
Swarm initialized: current node (vlrxjintax2ocbeordx1kkqa4) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-65xez391hlozgvo23dazr4suxca5kp4qfvklzs2ch2zl3m79iv9z5rkc5waujalxonpqi46booc 192.168.56.201:2377
- docker swarm ํ์ธ์ portainer.io์์๋ ๊ฐ๋ฅํ๋ค.
- ์ด๋ค Node๋ค์ด ์๋์ง ํ์ธ ๊ฐ๋ฅ
- ํ์ฌ ์ฌ๋ผ๊ฐ์๋ stack, service๋ฑ์ ๋ํด์ ํ์ธ ๊ฐ๋ฅ
- ์ง๊ด์ ์ผ๋ก docker swarm์ ๋ชจ๋ํฐ๋ง ํ๊ณ ์ถ๋ค๋ฉด visualizer์ ์ค์นํด์ฃผ๋ฉด๋๋ค.
- swarm ์ ์ฉ ๋ชจ๋ํฐ๋ง ํด
- ์๋น์ค๊ฐ ์ฌ๋ผ์ฌ ๋ ์ด๋์ ์ฌ๋ผ์ค๋์ง ์ง๊ด์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
$ docker service create \
> --name=viz_swarm \
> --publish=8082:8080 \
> --constraint=node.role==manager \
> --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
> dockersamples/visualizer
- docker swarm nginx ์๋น์ค๋ฅผ ์์ฑํด๋ณด์
$ docker service create --name myweb --replicas=3 -p 8001:80 nginx:1.25.0-alpine //์๋น์ค ์์ฑ
$ docker service ls //
$ docker service ps myweb // ์ด๋ Node์์ ์๋น์ค๊ฐ ์คํ์ค์ธ์ง ๋ณผ ์ ์์
Docker stack ํ์ฉ (feat.Docker compose)
docker compose์๋ ๋ญ๊ฐ ๋ค๋ฅผ๊น?
- docker swarm์ ์ฌ๋ฌ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ ํ๊ฒฝ์์ ์๋น์ค๋ฅผ ํตํด ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ค.
- docker compose๋ ์ปจํ ์ด๋ ๊ฐ์ ์ฐ๊ฒฐ์ฑ์ ์ ๊ณตํ์ง๋ง, ๋์ผ ํธ์คํธ์์ ์คํ๋๋ฏ๋ก ์ํ ํ์ฅ์ ํ ํธ์คํธ์ ๋ฆฌ์์ค๋ก ์ ํ๋๋ค.
- docker stack์ docker swarm, docker compose ๋ ๊ธฐ์ ์ ์ฐ๊ฒฐํ๊ณ yaml์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ swarm์ ์ฐ๊ฒฐ๋ ํด๋ฌ์คํฐ์ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์ปจํ ์ด๋ ์๋น์ค๋ฅผ ์คํํ์ฌ ์ฐ๊ฒฐ์ฑ์ ์ ๊ณต