Swarm Deployment KO - k-p2p-lab/kpl-v3 GitHub Wiki
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
ํ๋ ์ด์์ Linux ์๋ฒ์์ ํ์ฑ Swarm manager์ scripts/swarm.sh๋ก stack.swarm.yaml์ ๋ฐฐํฌยท๊ด๋ฆฌํฉ๋๋ค. Swarm์ ์ ํํ ์๋ฒ๋ง๋ค Agent ํ๋๋ฅผ ์ ์งํ๊ณ , Controller๊ฐ ์คํ์ Peer๋ฅผ Agent์ ๋ฐฐ๋ถํฉ๋๋ค. Peer๋ ํด๋น ์๋ฒ์ ๋
๋ฆฝ Docker ์ปจํ
์ด๋์
๋๋ค. Swarm ์๋น์ค์ฒ๋ผ Peer๋ฅผ ๋ค๋ฅธ ์๋ฒ๋ก ์๋ ์ฌ๋ฐฐ์นํ์ง ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ๋ฐฐํฌ ๊ทผ๊ฑฐ๋ stack.swarm.yaml, scripts/swarm.sh, scripts/swarm-config.sh์
๋๋ค. ์ค์ ์๋น์คยท๋คํธ์ํฌ ๋์์ v3 ์ํคํ
์ฒ๋ฅผ, ๊ฐ๋
์ํคํ
์ฒ๋ ๊ณตํต ๊ฐ๋
๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์คํ์ Linux ๋
ธ๋๋ง๋ค global resource-monitor ์๋น์ค๋ฅผ ํจ๊ป ๋ฐฐํฌํฉ๋๋ค. Agent ํ์ฑํ์ ๋
๋ฆฝ์ ์ผ๋ก ControllerยทPrometheusยทGrafanaยท์์ง๊ธฐ ์ปจํ
์ด๋ ์์์ ์์งํฉ๋๋ค. ์น Controller์๋ Docker ์์ผ์ ๋ง์ดํธํ์ง ์์ผ๋ฉฐ ์์ง๊ธฐ๊ฐ ๋ก์ปฌ ์์ผ์ ์ฝ๊ณ monitoring ๋คํธ์ํฌ๋ก ๋ณด๊ณ ํฉ๋๋ค. ์ด๋ฏธ์ง์ ์คํ์ ํจ๊ป ๊ฐฑ์ ํด์ผ ์๋น์ค ๋ผ๋ฒจ๊ณผ ์ Grafana ์ค์ ๊น์ง ์ ์ฉ๋ฉ๋๋ค. ์์ง๊ธฐ ๋ก๊ทธ๋ sh scripts/swarm.sh logs resource-monitor --tail 100์ผ๋ก ํ์ธํฉ๋๋ค. ๊ด๋ฆฌ ์๋น์ค ์์ ์ธก์ ์ ์ฐธ๊ณ ํ์ธ์.
Linux ์๋ฒ๋ค์ด ์ด๋ฏธ ๊ฐ์ Swarm์ ๊ฐ์
๋์ด ์๊ณ , rootful Docker์ userns-remap ๋ฏธ์ฌ์ฉ ๊ตฌ์ฑ์ ๊ฐ์ถ ์ํ์์ ์์ํฉ๋๋ค. manager์ kpl-v3 ์์ค ์ ์ฅ์์ Docker CLI, coreutils์ timeout, -f๋ฅผ ์ง์ํ๋ readlink, awk, ์ผ๋ฐ POSIX ์
ธ ์ ํธ๋ฆฌํฐ๋ฅผ ์ค๋นํ์ญ์์ค. ์ ์ฅ์ ๋๋ ํฐ๋ฆฌ์์ ํ์ฌ Docker context๊ฐ ๊ฐ๋ฆฌํค๋ active Swarm manager๋ฅผ ๋์์ผ๋ก ์คํํฉ๋๋ค. worker๋ง๋ค ์ ์ฅ์๋ฅผ ๋ณต์ฌํ๊ฑฐ๋ Agent๋ฅผ ์๋์ผ๋ก ์์ํ ํ์๋ ์์ต๋๋ค.
Swarm ๊ฐ์
์ ์ด๋ฏธ์ง registry ์์ฑ์ ์๋ฏธํ์ง ์์ต๋๋ค. manager์ ๋ชจ๋ ๋์ ๋
ธ๋์์ ์ ๊ทผํ ์ ์๋ registry๊ฐ ํ์ํ๋ฉฐ, ํ์ํ ์ธ์ฆ๊ณผ HTTPS ์ ๋ขฐ ์ค์ ์ ๋ฏธ๋ฆฌ ์ค๋นํด์ผ ํฉ๋๋ค. helper๋ registry๋ฅผ ์ค์นํ๊ฑฐ๋ Docker daemon์ ์ ์ญ TLS/insecure-registry ์ค์ ์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด registry๊ฐ ์๋ค๋ฉด ์๋ ์ด๋ฏธ์ง ๋์ 172.20.4.171:5000/kpl-v3:v3๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. HTTP registry๋ผ๋ฉด ๊ด๋ จ Docker daemon์ด ์ด๋ฅผ ์ฌ์ฉํ๋๋ก ์ฌ์ ์ ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
์๋ฒ ๊ฐ TCP 2377(manager), TCP/UDP 7946, UDP 4789 ํต์ ์ด ํ์ํฉ๋๋ค. control ๋
ธ๋์ Prometheus๊ฐ ์ ํ๋ ๋ชจ๋ Agent ๋
ธ๋ ์ฃผ์์ TCP KPL_AGENT_METRICS_PORT(๊ธฐ๋ณธ 9091)์๋ ์ ๊ทผํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด์์๊ฐ Agent metrics ๋งํฌ๋ฅผ ์ง์ ์ด ๊ฒฝ์ฐ ์ด์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ํ ์ ๋ขฐ ๊ด๋ฆฌ๋ง์์๋ ์ด ํฌํธ๋ฅผ ํ์ฉํ์ญ์์ค. VXLAN๊ณผ metrics ์ ๊ทผ์ ์ ๋ขฐํ๋ ๋คํธ์ํฌ ์์ผ๋ก ์ ํํ๊ณ VPNยทํด๋ผ์ฐ๋๋ง์์๋ underlay MTU์ VXLAN overhead๋ฅผ ํ์ธํ์ญ์์ค. smoke ์คํ์๋ ๋คํธ์ํฌ ์กฐ๊ฑด ์ ์ฉ์ ์ํ ์ปค๋ ์ง์๋ ํ์ํฉ๋๋ค. Docker overlay ์๊ตฌ์ฌํญ
๋ถ์ฐ smoke ๊ฒ์ฆ์๋ Agent๋ฅผ ์คํํ ๋
ธ๋๊ฐ ์ต์ ๋ ๋ ํ์ํฉ๋๋ค. manager ํ ๋์ worker ๋ ๋์ด๋ฉด --workers๋ก manager๋ฅผ ์คํ์์ ์ ์ธํฉ๋๋ค. manager ํ ๋์ worker ํ ๋์ด๋ฉด ๋์ --all์ ์ฌ์ฉํด ๋ ๋
ธ๋์ Agent๋ฅผ ๋ฐฐ์นํ์ญ์์ค. ์ด ๊ฒฝ์ฐ manager๋ ์คํ๊ณผ CPUยท๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ ์ฒด ๊ณผ์ ์์ ๊ฐ์ ์ฌ์ฉ์์ Docker context๋ฅผ ์ฌ์ฉํ์ญ์์ค. Docker ์ ๊ทผ์ sudo๊ฐ ํ์ํ๋ค๋ฉด init, login, publish, ๋ฐฐํฌ ๋ช
๋ น์ ํฌํจํด ์ผ๊ด๋๊ฒ sudo sh scripts/swarm.sh ...๋ก ์คํํฉ๋๋ค.
Agent๋ ํ์ฑ Swarm ๋
ธ๋์ ๋ช
์์ ์ผ๋ก ์ค์ ํ Docker ์ด๋ฏธ์ง ๋ฐ Peer ๋คํธ์ํฌ๋ฅผ ์๊ตฌํฉ๋๋ค. Peer ๋คํธ์ํฌ๋ Swarm scope์ attachable overlay์ฌ์ผ ํฉ๋๋ค. ๊ฐ Agent๋ ์๊ธฐ ๋
ธ๋์ /var/run/docker.sock์ผ๋ก standalone Peer ์ปจํ
์ด๋๋ฅผ ์์ฑํฉ๋๋ค. Rootless Docker์ userns-remap์ ์ง์ํ๋ ๋ฐฐํฌ ๊ธฐ์ค์ ํฌํจ๋์ง ์์ต๋๋ค.
Agent์ network-manager๋ 0:0์ผ๋ก ์คํํ๋ฉฐ Docker socket์ ์ ๊ทผํฉ๋๋ค. resource-monitor๋ ๋ก์ปฌ socket์ ์ฝ์ต๋๋ค. Socket ์ ๊ทผ์ ํด๋น ๋
ธ๋์ ๋ํ ๋์ ์ ์ด ๊ถํ์ด๋ฉฐ network manager๋ Swarm manager์์ ์คํํฉ๋๋ค. Controller์๋ socket์ ์ ๊ณตํ์ง ์์ต๋๋ค. Peer๋ ๋น๊ณต๊ฐ ์ค์ ์ ์ฝ๊ธฐ ์ํด 0:0์ผ๋ก ์คํํ์ง๋ง Docker socket, ํธ์คํธ ๋๋ ํฐ๋ฆฌ mount์ published host port๋ฅผ ๋ฐ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ธฐ๋ณธ capability๋ฅผ ์ ๊ฑฐํ๊ณ no-new-privileges๋ฅผ ํ์ฑํํ๋ฉฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ด ์๋ Peer์๋ง NET_ADMIN์ ์ถ๊ฐํฉ๋๋ค. Privileged ๋ชจ๋๋ฅผ ๋ถ์ฌํ๊ฑฐ๋ socket์ ๋๊ตฌ๋ ์ธ ์ ์๋๋ก ๋ฐ๊พธ์ง ๋ง์ญ์์ค. SELinux ๋๋ AppArmor ํธ์คํธ์์๋ ์ ์ญ enforcement๋ฅผ ๋๊ฑฐ๋ ์์คํ
๋๋ ํฐ๋ฆฌ๋ฅผ relabelํ์ง ๋ง๊ณ ํธ์คํธ ์ ์ฑ
์ ๋ฐ๋ผ Agent socket ์ ๊ทผ์ ํ์ฉํ์ญ์์ค.
๋คํธ์ํฌ ์กฐ๊ฑด์๋ Linux sch_prio, sch_netem, cls_u32์ TBF๋ฅผ ์ฌ์ฉํ ๋์ sch_tbf๊ฐ ํ์ํฉ๋๋ค. ์ปค๋์ ๋ด์ฅ๋ ์๋ ์์ผ๋ฏ๋ก lsmod๋ง์ผ๋ก ์ง์ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์์ต๋๋ค. Peer๋ ํธ์คํธ ์ปค๋์ ๋ชจ๋์ ์ ์ฌํ ์ ์์ผ๋ฏ๋ก ์ ํํ ๋ชจ๋ ๋
ธ๋์ ์ปค๋์ ์ค๋นํ์ญ์์ค. tc ๋ช
๋ น์ด ์คํจํ๋ฉด Peer ์์๋ ๋ช
์์ ์ธ ์ค๋ฅ๋ก ์คํจํฉ๋๋ค.
Peer๋ overlay IPv4 ์ฃผ์์ TCP 20000์ผ๋ก ํต์ ํ๋ฉฐ Peer ์ ์ด HTTP๋ TCP 18000์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ scope: p2p๋ Peer network namespace์ ์ก์ TCP 20000 ํธ๋ํฝ์ ์ ์ดํ๊ณ scope: all์ ์ ์ดยทtelemetry ํธ๋ํฝ์๋ ์ํฅ์ ์ค๋๋ค. IPv6 ์ ์ฉ Peer ์คํ์ ์ง์ ๊ธฐ์ค ๋ฐ์
๋๋ค. ํ์ฉํ๋ ์ต๋ jitter๋ 2.147483647s์ด๋ฉฐ ์๋๋ฆฌ์ค seed๊ฐ ์ปค๋ ํจํท ์กฐ๊ฑด๊ณผ ์ค์ผ์ค๋ง๊น์ง ๊ฒฐ์ ์ ์ผ๋ก ๋ง๋ค์ง๋ ์์ต๋๋ค. ์ง์ฐ์ ๋น๊ตํ ๋๋ ๋ชจ๋ ํธ์คํธ์ ์๊ณ๋ฅผ chrony/NTP๋ก ๋๊ธฐํํ์ญ์์ค.
Linux ๋
ธ๋ ํ๋์์๋ ๊ฐ์ stack๊ณผ attachable overlay๋ก ๊ฐ๋ฐ ๋๋ ์์ ์คํ์ ์ํํ ์ ์์ต๋๋ค. ํ์ฑ Swarm manager๋ฅผ ์ค๋นํ๊ณ ์๋ init ๋ช
๋ น์ KPL_MIN_AGENTS=1์ ์ค์ ํ ๋ค deploy --all์ ์ฌ์ฉํ์ญ์์ค. Controller, ๋ชจ๋ํฐ๋ง ์๋น์ค, Agent์ Peer๊ฐ ํด๋น ํธ์คํธ ์์์ ๊ณต์ ํฉ๋๋ค. Registry, ์ปค๋, ์ธ์ฆ๊ณผ ์ ๋ฆฌ ์๊ตฌ์ฌํญ์ ๋์ผํฉ๋๋ค. Smoke ์๋๋ฆฌ์ค๋ฅผ ์คํํ ์ ์์ง๋ง ํธ์คํธ ๊ฐ ๋ถ์ฐ๊ณผ ์ฐ๊ฒฐ์ ๊ฒ์ฆํ๋ ค๋ฉด Agent ๋
ธ๋๊ฐ ์ต์ ๋ ๊ฐ ํ์ํฉ๋๋ค.
์ ์ฅ์ ๋๋ ํฐ๋ฆฌ์์ ๋ค์ ๋ช ๋ น์ผ๋ก ํ์ฌ Bash์ ๋จ์ถ ๋ช ๋ น๊ณผ ์๋์์ฑ์ ํ์ฑํํฉ๋๋ค.
source scripts/activate-swarm.shkpl-v3 ์์ค ์ ์ฅ์์ scripts/swarm.sh๋ฅผ ์คํํ๋ swarm ์
ธ ํจ์๊ฐ ๋ง๋ค์ด์ง๋ฉฐ ์ธ์๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํฉ๋๋ค. ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํด๋ ํ์ฑํํ ์ ์ฅ์๋ฅผ ๊ณ์ ์ฌ์ฉํฉ๋๋ค. Tab์ผ๋ก ๋ช
๋ นยท์ง์ ์ต์
, init/configure ์ค์ ํค, ์๋๋ฆฌ์คยท์ค์ ํ์ผ ๊ฒฝ๋ก, ๋
ธ๋ IDยทํธ์คํธ๋ช
, Docker context ์ด๋ฆ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ <Tab>์ ๋ฌธ์๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ Tab ํค๋ฅผ ๋๋ฅด๋ ์์น์
๋๋ค.
swarm lo<Tab>
swarm logs auth --<Tab>
swarm logs auth --context <Tab>
swarm deploy --<Tab>
swarm add-node worker-<Tab>
swarm configure KPL_IMAGE_<Tab>
swarm configure KPL_CONTROL_NODE_ID=<Tab>
swarm --env-file .env.<Tab>
๋ณ๋ bash-completion ํจํค์ง๋ ํ์ํ์ง ์์ต๋๋ค. ๋
ธ๋ยทcontext ํ๋ณด๋ ํธ์ถ์์ ํ์ฌ Docker context์์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์กฐํํ๋ฉฐ, ์กฐํ ์ ํ์๊ฐ์ 1์ด(์ข
๋ฃ๋์ง ์์ผ๋ฉด 1์ด ๋ค ๊ฐ์ ์ข
๋ฃ), ์บ์๋ 5์ด์
๋๋ค. Docker๊ฐ ์๋ตํ์ง ์์ผ๋ฉด ๋์ ํ๋ณด๋ง ์๋ตํ๊ณ ๋ช
๋ นยท์ต์
ยท๊ฒฝ๋ก ์์ฑ์ ๊ณ์ ๋์ํฉ๋๋ค. ์๊ฒฉ ์ฆ๋ช
ํ์ผ์ ์ฝ๊ฑฐ๋ ์ ์ฅ๋ ๋น๋ฐ๋ฒํธ ๊ฐ์ ์ ์ํ์ง ์์ผ๋ฉฐ, shยทbash์ ๊ธฐ์กด ์๋์์ฑ์ ๊ต์ฒดํ์ง ์์ต๋๋ค. ์๋์์ฑ์ swarm ๋จ์ถ ๋ช
๋ น์์ ์ฌ์ฉํ์ญ์์ค.
ํ์ฑํ ์คํฌ๋ฆฝํธ๋ sh๋ bash๋ก ์คํํ์ง ๋ง๊ณ ๋ฐ๋์ source๋ก ๋ถ๋ฌ์ต๋๋ค. ํ์ฌ ์
ธ์๋ง ์ ์ฉ๋ฉ๋๋ค. ์ ํฐ๋ฏธ๋์๋ ์ ์ฉํ๋ ค๋ฉด ~/.bashrc์ source /์ ์ฅ์/์ ๋๊ฒฝ๋ก/kpl-v3/scripts/activate-swarm.sh๋ฅผ ์ถ๊ฐํ์ญ์์ค(๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ๋ก๋ ๋ฐ์ดํ๋ก ๊ฐ์๋๋ค). ํ์ฌ ์
ธ์์ ํด์ ํ๋ ค๋ฉด complete -r swarm, unset -f swarm์ ์คํํฉ๋๋ค. ์๋์ผ๋ก ๊ถํ์ ๋์ด์ง ์์ผ๋ฏ๋ก Docker ์ ๊ทผ ๊ถํ์ ๊ธฐ์กด ์ด์ ๋ฐฉ์๋๋ก ์ค๋นํ์ญ์์ค.
sh scripts/swarm.sh nodes
sh scripts/swarm.sh init KPL_IMAGE=registry.example.com/kpl-v3:v3 KPL_AGENT_CAPACITY=20 KPL_MIN_AGENTS=2
sh scripts/swarm.sh config
# registry๊ฐ ์ธ์ฆ์ ์๊ตฌํ ๋๋ง ์คํํฉ๋๋ค.
sh scripts/swarm.sh login
sh scripts/swarm.sh publish์ด๋ฏธ์ง ์ฐธ์กฐ๋ฅผ ์ค์ registry์ repository๋ก ๋ฐ๊พธ์ญ์์ค. init์ ์ ๋ฌํ ์ค์ ์ ๊ฒ์ฆํ๊ณ ํ์ฌ manager๋ฅผ ๊ธฐ๋ณธ control ๋
ธ๋๋ก ์ ํํ๋ฉฐ, ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ฐ์ง ์๊ณ ๋น๊ณต๊ฐ .env.swarm์ ๋ง๋ญ๋๋ค. ๋์๋ณด๋์ Grafana ์๊ฒฉ ์ฆ๋ช
์ ๊ฐ๊ฐ ์์ฑํฉ๋๋ค. ์ด๋ฏธ ์ค์ ์ด ์์ผ๋ฉด configure KEY=VALUE...๋ก ๋ณ๊ฒฝํฉ๋๋ค. config๋ ๋น๋ฐ ๊ฐ์ ๊ฐ๋ฆฐ ์ ํจ ์ค์ ์ ํ์ํฉ๋๋ค.
login์ KPL_IMAGE์์ registry๋ฅผ ์ถ๋ก ํด helper์ ๊ฐ์ ๊ณ์ ์ผ๋ก ๋ํํ ๋ก๊ทธ์ธ์ ์คํํฉ๋๋ค. publish๋ kpl-v3 ์์ค ์ ์ฅ์๋ฅผ ๋น๋ํ๊ณ ์ค์ ํ ์ด๋ฏธ์ง ํ๊ทธ๋ก pushํฉ๋๋ค. ํด๋น ์ด๋ฏธ์ง๊ฐ ์ด๋ฏธ ๊ฒ์๋์ด ์๋ค๋ฉด publish๋ ์๋ตํฉ๋๋ค. ๊ธฐ๋ณธ ๋น๋๋ native ํ๋ซํผ์ ๋์์ผ๋ก ํ๋ฉฐ, ์ํคํ
์ฒ๊ฐ ํผํฉ๋์ด ์๋ค๋ฉด ํด๋น ๋น๋๊ฐ ๊ฐ๋ฅํ ๊ธฐ์กด Buildx builder์์ manager๋ฅผ ํฌํจํ ๋ชจ๋ ๋์ ์ํคํ
์ฒ๋ฅผ ๊ฒ์ํ์ญ์์ค.
sh scripts/swarm.sh publish --platforms linux/amd64,linux/arm64helper๋ builder๋ CPU ์๋ฎฌ๋ ์ด์ ์ ์ค์นํ์ง ์์ต๋๋ค. native ์คํ์๋ ๋ ธ๋์ ์ํคํ ์ฒ์ ๋ง๋ ์ด๋ฏธ์ง๊ฐ ํ์ํฉ๋๋ค. Docker multi-platform ๋น๋
# manager ํ ๋์ worker ํ ๋์ธ ํด๋ฌ์คํฐ์์๋ ๋์ --all์ ์ฌ์ฉํฉ๋๋ค.
sh scripts/swarm.sh deploy --workers
sh scripts/swarm.sh check
sh scripts/swarm.sh status
sh scripts/swarm.sh access
sh scripts/swarm.sh credentialsdeploy๋ ์ด๋ฏธ์ง๋ฅผ ํ์ ํ๊ณ ์ ํํ ๋
ธ๋์ label์ ์ถ๊ฐํ๋ฉฐ, ํ์ํ๋ฉด attachable Peer overlay๋ฅผ ์์ฑํ ๋ค ๋ฐฐํฌ ๊ฒ์ฌ์ stack ๋ฐฐํฌ๋ฅผ ์ ์ํฉ๋๋ค. ๋ชจ๋ ์๋น์ค์ Agent๊ฐ ์ค๋น๋๊ธฐ ์ ์ ๋ฐํํฉ๋๋ค. check๋ ๋ถ๋ฌ์จ ์ค์ ์ผ๋ก ๊ตฌ์ฑยท๋คํธ์ํฌยท๋ฐฐ์น ์ฌ์ ๊ฒ์ฌ๋ฅผ ๋ค์ ์ํํ๋ฉฐ, ์ค์ ์๋ฒ ๊ฐ ํต์ ์ด๋ ๋ชจ๋ worker์ ์ปค๋ ๊ท์น ์ค์น๋ฅผ ๊ฒ์ฆํ์ง ์์ต๋๋ค. status๋ Docker ์๋น์คยทtaskยท๋
ธ๋ ์ํ์ด๋ฉฐ Controller ๋ฑ๋ก ์ํ๋ ์๋๋๋ค.
access๊ฐ ์ถ๋ ฅํ Controller URL์ ์ฌ์ญ์์ค. Controller, Prometheus, Grafana ํฌํธ๋ ๋ช
๋ น์ ์คํํ๋ manager์ ๋ค๋ฅผ ์ ์๋ ์ง์ ๋ control ๋
ธ๋์ ๊ฒ์๋ฉ๋๋ค. ๊ฐ์ ๋ช
๋ น์ ์ ํ๋ ๊ฐ Agent ๋
ธ๋์ host-mode metrics URL๋ ํ์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ Agent ๋งํฌ๋ฅผ ์ด๋ ค๋ฉด ์ด์์ ๊ธฐ๊ธฐ์ ์ ๋ขฐ ๊ด๋ฆฌ๋ง์์ ๊ฐ Agent ๋
ธ๋๋ก ์ง์ ์ ๊ทผํ ์ ์์ด์ผ ํฉ๋๋ค. control ๋
ธ๋์ ์ ๊ทผํ ์ ์๋ ๊ธฐ๊ธฐ์์ ๋์๋ณด๋์ Online Agents๊ฐ 2 ์ด์์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ญ์์ค. Agent status์์๋ online ํ๋ง ํ์ธํฉ๋๋ค. Peers๋ ์ ์ ๋ / ์ฉ๋์ด๋ฉฐ, ์ฉ๋์์ ์ ์ ๋์ ๋บ ์ฌ์ ์ฌ๋กฏ์ ํฉ๊ณ๊ฐ 6 ์ด์์ด์ด์ผ ํฉ๋๋ค. ์์ฝ์ Available slots์๋ offline Agent๋ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก ์ด ์กฐ๊ฑด์ ํ๋ก ํ์ธํ์ญ์์ค. Swarm task๊ฐ ์คํ ์ค์ด๋ผ๋ ์ฌ์ค๋ง์ผ๋ก ๋ฑ๋ก๊น์ง ํ์ธ๋์ง๋ ์์ต๋๋ค. ์์์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด sh scripts/swarm.sh logs agent ๋๋ sh scripts/swarm.sh logs controller๋ฅผ ํ์ธํ์ญ์์ค.
credentials๋ ๋์๋ณด๋์ KPL_USERยทKPL_PASSWORD์ ๋ณ๋ Grafana ๊ณ์ ์ ํ๋ฌธ์ผ๋ก ํ์ํฉ๋๋ค. Controller์์๋ Log in์ผ๋ก ๋ก๊ทธ์ธํ์ญ์์ค. Grafana์ ๊ธฐ์กด ์ฌ์ฉ์๋ช
์ ์ ์งํ๋ฉฐ ์์ํ ๋ ์๋ ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ๊ฐ์ผ๋ก ๋๊ธฐํํฉ๋๋ค.
# examples/swarm-smoke.yaml์ ์ถ๋ ฅํฉ๋๋ค. FILE์ ์ง์ ํ๋ฉด ํด๋น ์๋๋ฆฌ์ค๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
sh scripts/swarm.sh scenario๋์๋ณด๋์์ Run experiment๋ฅผ ๋๋ฅด๊ณ YAML scenario ์ ์ฒด๋ฅผ ์ถ๋ ฅ๋ YAML๋ก ๊ต์ฒดํ ๋ค์ Run์ ๋๋ฅด์ญ์์ค. ์น ํผ์ ๊ธฐ๋ณธ ์๋๋ฆฌ์ค๋ ๋ค๋ฅธ smoke ์คํ์ด๋ฉฐ Swarm ์์ ๋ฅผ ์๋์ผ๋ก ๋ถ๋ฌ์ค์ง ์์ต๋๋ค.
์์ ๋ boot Peer ํ ๊ฐ์ worker ๋ค์ฏ ๊ฐ๋ฅผ ๋ง๋ญ๋๋ค. worker์๋ 25ms ์ง์ฐ, 2ms jitter, 0.5% loss๋ฅผ ์ ์ฉํฉ๋๋ค. readiness ํ์ธ๊ณผ 20์ด ๋๊ธฐ ํ payloadSize: 4096์ผ๋ก ๋ฉ์์ง 50๊ฐ๋ฅผ ๋ฐํํ๊ณ , ์์ง์ ์ํด 1๋ถ ๊ธฐ๋ค๋ฆฐ ๋ค stop-all์ ์คํํฉ๋๋ค. ์ฉ๋์ด ๊ฐ๊ณ ๋ค๋ฅธ ๋ถํ๊ฐ ์๋ Agent๋ค์์๋ balanced ๋ฐฐ์น๊ฐ Peer๋ฅผ ๋ถ์ฐํฉ๋๋ค. ์๋ก ๋ค๋ฅธ Agent์ Peer๊ฐ ๋ํ๋๊ณ publish/deliver ์ด๋ฒคํธ๊ฐ ๊ธฐ๋ก๋๋์ง ํ์ธํ์ญ์์ค. readiness๋ ํ๋ก์ธ์ค ์ด๊ธฐํ ์๋ฃ ๊ธฐ์ค์ด๋ฉฐ GossipSub mesh ์๋ ด์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์ ๋ฌ ์๋ ์ค์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋ถ์ํ๋ ค๋ฉด Grafana URL์์ ๋ก๊ทธ์ธํ๊ณ KP2PLab Experiment Analysis์ Run์ ํด๋น ์คํ์ ์ ํํ์ญ์์ค. Agent์ Topic์ผ๋ก ์๋ฒ์ ํธ๋ํฝ์ ๋น๊ตํฉ๋๋ค. ๋์๋ณด๋ ๋ฉ์์ง ์์ฝ์ ์ต๊ทผ ์ด๋ฒคํธ ๋ฒํผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ํ ์คํ ์ ์ฒด๋ฅผ ๋์ ํฉ๋๋ค. ์ค์๊ฐ counter๋ Controller ์ฌ์์ ์ ์ด๊ธฐํ๋์ง๋ง ์ ์ฅ ๋ถ์๊ณผ ZIP ์งํ๋ ๊ธฐ๋ก ํ์ผ์์ ๋ค์ ๊ณ์ฐํฉ๋๋ค. Grafana๋ ๊ฐ ํจ๋์ ํํฐยท์ง๊ณ ๊ท์น์ ์ ์ฉํฉ๋๋ค. ๋ชจ๋ํฐ๋ง ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์คํ์ด ๋๋๊ณ ํด๋น Peer๋ค์ด ์ข ๋ฃ๋์๋์ง ํ์ธํ์ญ์์ค. ๋ค๋ฅธ ์คํ์ด ์๋ค๋ฉด Agent ์ ์ ๋์ 0์ผ๋ก ๋์์์ผ ํฉ๋๋ค. ์คํ ์ค์ธ ์คํ์ ์ทจ์ํ๋ ค๋ฉด ํด๋น ์คํ์ Stop์ ๋๋ฅด๊ณ ์ ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
์คํ ํญ๋ชฉ์ด๋ Saved results์์ Download results๋ฅผ ์ ํํฉ๋๋ค. ZIP์๋ scenario.yaml, experiment.json, events.jsonl, ์ ํ์ observations.jsonl, metrics.json, export.json์ด ๋ค์ด๊ฐ๋๋ค. ์์ง๋ ๊ด์ธก ์์ฝยทํ๋ณธ ๊ทธ๋ํยท๋์ญํญ ์นด์ดํฐ๋ ํฌํจํฉ๋๋ค. ์ต๊ทผ 300๊ฐ ๋ฒํผ์ ๋ณ๊ฐ๋ก ์ ์ฒด ์ ์ฅ ๋ก๊ทธ์ ๊ฐ์ ๊ฒฝ๊ณ์์ ์ฌ๊ณ์ฐํ ์งํ๋ฅผ ํฌํจํ๋ฉฐ Prometheus/Grafana DB๋ ํฌํจํ์ง ์์ต๋๋ค. ์คํ ์ค Download snapshot์ ๋ค์ด๋ก๋ ๊ฒฝ๊ณ๊น์ง์ ๊ธฐ๋ก์
๋๋ค. Delete๋ ํ์ธ ํ ๋นํ์ฑ ๊ฒฐ๊ณผ๋ฅผ ์ญ์ ํฉ๋๋ค. ๋ค์ด๋ก๋ ๊ตฌ์ฑ๊ณผ ํ๊ณ
์ฒ ๊ฑฐํ๋ฉด ์น ํ๋ฉด๋ ๋ด๋ ค๊ฐ๋ฏ๋ก ๋จผ์ ๋ค์ด๋ก๋ํ ๋ค ์คํํ์ญ์์ค.
sh scripts/swarm.sh remove์ฒ ๊ฑฐ๋ ์คํจ task, task ์ด๋ ฅ ๋ถ์ฌ, offline worker๊ฐ ์์ด๋ stack ์๋น์ค๋ฅผ ์ง์ ์ญ์ ํฉ๋๋ค. ์๋น์ค ์ญ์ ๋ clean exit๋ฅผ ์กฐ๊ฑด์ผ๋ก ํ์ง ์์ผ๋ฉฐ ์ต์ข
๋ก๊ทธ๋ standalone Peer ์ ๋ฆฌ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค. Gateway ์ ๊ฑฐ์๋ ์๋์ ๋ณ๋ ์ข
๋ฃ ๊ฒ์ฌ๋ฅผ ์ ์ฉํฉ๋๋ค. ์คํยทPrometheusยทGrafana volume๊ณผ ์ธ๋ถ Peer network๋ ๋จ์ต๋๋ค. ๋ณด์กด๋ volume์ ๋ค์ ๋ฐฐํฌํ ๋๋ ๊ฐ์ ์ค์ ์ ์ฌ์ฌ์ฉํ์ญ์์ค. ์ดํ Saved results์์ ๊ธฐ์กด ๊ธฐ๋ก์ ๋ค์ ๋ณผ ์ ์์ต๋๋ค. ์ด์ ์ ์คํ ์ค์ด๋ ๊ธฐ๋ก์ interrupted๋ก ํ์ํ๋ฉฐ ์๋ ์ฌ๊ฐํ์ง ์์ต๋๋ค. ์ด ์ํ๋ Peer ์ ๋ฆฌ ์๋ฃ๋ฅผ ๋ปํ์ง ์์ต๋๋ค.
worker๊ฐ ๊ณ์ ๋ค์ด์ค๊ณ ์๋ช ์ ๋ฐ๋ผ ๋๊ฐ๋ ๋ ๊ธด ์คํ์ churn ์ค ๋ฌด์์ ๋ฐ๋ณต ๋ฐํ์ ์ฐธ๊ณ ํ์ญ์์ค. ์์ ์ ์ธ bootstrap ๋ ๊ฐ์ ๋ฐ๋ณต์ ์ธ ๋ฐํ ๋์ ์ ํ, ๋ง์ง๋ง ์์งยท์ ๋ฆฌ ๋จ๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐฐํฌ helper๋ control ๋
ธ๋ ์ฃผ์์ ๊ฒ์ ํฌํธ๋ก Controller metrics ๋ฐ Prometheus ์์ฒด ๋งํฌ์ ๋ธ๋ผ์ฐ์ ์ฉ ์ฃผ์๋ฅผ ์๋ ์์ฑํฉ๋๋ค. ๋ณ๋์ .env.swarm ์ค์ ์ ํ์ํ์ง ์์ต๋๋ค. Prometheus์์ ํด๋น ๋
ธ๋์ KPL_HTTP_PORT์ ์ ๊ทผํ ์ ์์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ชจ๋ํฐ๋ง์ ์ฐธ๊ณ ํ์ญ์์ค.
์ผ๋ฐ์ ์ธ ์ค์ ๋ณ๊ฒฝ์ helper๋ฅผ ์ฌ์ฉํฉ๋๋ค.
sh scripts/swarm.sh configure KPL_AGENT_CAPACITY=20 KPL_MIN_AGENTS=2 KPL_AGENT_METRICS_PORT=9091
# ์ ํ ์ฌํญ: Peer overlay๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์ฌ์ฉํ์ง ์๋ subnet์ ์ง์ ํฉ๋๋ค.
sh scripts/swarm.sh configure KPL_PEER_SUBNET=10.11.0.0/24
sh scripts/swarm.sh configconfigure๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒ์ฆํ๊ณ ์ค์ ํ์ผ์ ์์์ ์ผ๋ก ๊ต์ฒดํ๋ฉฐ, ๋ช
์์ ์ผ๋ก ๋ณ๊ฒฝํ์ง ์์ ๊ธฐ์กด ์๊ฒฉ ์ฆ๋ช
์ ๋ณด์กดํฉ๋๋ค. ๊ธฐ์กด ํ์ผ ์ค์ ์ ์์ฒญํ ๋ณ๊ฒฝ๋ง ์ ์ฅํ๊ณ ๋ฌด๊ดํ ํ๊ฒฝ๋ณ์์ ๋ฎ์ด์ฐ๊ธฐ ๊ฐ์ ์ ์ฅํ์ง ์์ต๋๋ค. ๋ณ๊ฒฝํ ์ค์ ์ ๋ค์ deploy์์ ์๋น์ค์ ์ ์ฉ๋๋ฉฐ ์คํ ์ค์ธ Peer๋ฅผ ์ฌ์ค์ ํ์ง ์์ต๋๋ค. ํ์ผ ๊ถํ์ 0600์
๋๋ค. init์ ์๊ฒฉ ์ฆ๋ช
์ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ๊ฐ๊ฐ 32๋ฐ์ดํธ ๋์์ 64์๋ฆฌ hex๋ก ์์ฑํฉ๋๋ค. config๋ ๋น๋ฐ ๊ฐ์ ๊ฐ๋ฆฌ๊ณ credentials๋ง ์๋์ ์ผ๋ก ํ์ํฉ๋๋ค.
๊ธฐ๋ณธ stack ์ด๋ฆ์ kpl, helper์ ๊ธฐ๋ณธ Peer network๋ kpl-peers์
๋๋ค. KPL_PEER_SUBNET์ ์ ํ ์ฌํญ์ด๋ฉฐ ์๋ตํ๋ฉด overlay ์์ฑ ์ Docker๊ฐ subnet์ ํ ๋นํฉ๋๋ค. ์ง์ ํ๋ค๋ฉด ์๋ฒยทLANยทVPNยท๋ค๋ฅธ Docker ๋คํธ์ํฌ์ ๊ฒน์น์ง ์์์ผ ํฉ๋๋ค. ๊ธฐ์กด ๋คํธ์ํฌ์ subnet์ด ๋ค๋ฅด๋ฉด ๋ฐฐํฌ๊ฐ ์คํจํ๋ฉฐ, ์ค์ ์ ๋ฐ๊พผ๋ค๊ณ ๊ธฐ์กด ๋คํธ์ํฌ ํฌ๊ธฐ๊ฐ ๋ฐ๋์ง๋ ์์ต๋๋ค. /16 ๊ฐ์ ๋ ํฐ subnet๋ ์
๋ ฅํ ์ ์์ง๋ง ๋๊ท๋ชจ ์คํ ์ง์์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. ์๋ ์ฉ๋ ํ๊ณ๋ฅผ ์ฐธ๊ณ ํ๊ณ ๋ณ๋ ๋ฐฐํฌ์๋ ์๋ก ๋ค๋ฅธ stackยทPeer network ์ด๋ฆ์ ์ฌ์ฉํ์ญ์์ค.
KPL_CONTROL_NODE_ID๋ ๋ฐ์ดํฐ volume์ ๋ณด๊ดํ๋ LinuxยทReadyยทActive Swarm manager์ ์ ํํ Node ID๋ก ๊ณ ์ ํ์ฌ Controllerยทnetwork-managerยทPrometheusยทGrafana๊ฐ ๋น ๋ก์ปฌ volume์ ๊ฐ์ง ๋ค๋ฅธ ์๋ฒ๋ก ์ด๋ํ์ง ์๊ฒ ํ์ญ์์ค. nodes๋ก ์ ํํ ๋
ธ๋๋ฅผ ์กฐํํฉ๋๋ค. helper์ ๊ธฐ๋ณธ ์ต์ Agent ์๋ 1์ด๋ฉฐ ์ ์ ์ฐจ์์๋ KPL_MIN_AGENTS=2๋ฅผ ๋ช
์ํ์ต๋๋ค. ์ฌ์ ๊ฒ์ฌ์ ์ต์ ์ ์กฐ๊ฑด์ UI์์ ์ค์ ๋ฑ๋ก๊ณผ ์ฌ์ ์ฌ๋กฏ์ ํ์ธํ๋ ์ ์ฐจ๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค.
helper๋ .env.swarm์ ํ์ฉ๋ KEY=VALUE ํญ๋ชฉ์ ๋ฌธ์ ๊ทธ๋๋ก ์ฝ์ผ๋ฉฐ ํ์ผ์ sourceํ๊ฑฐ๋ ์
ธ ํํ์์ ์คํํ์ง ์์ต๋๋ค. ๋ฐ๊นฅ์ชฝ ํ ์์ ๋ฐ์ดํ๋ ์ ๊ฑฐํ์ง๋ง ๋ณ์ยท๋ช
๋ น ์นํยทescape๋ฅผ ํ์ฅํ์ง ์์ต๋๋ค. export๋ ํ๊ฒฝ๋ณ์๊ฐ ํ์ผ๋ณด๋ค ์ฐ์ ํ๋ฏ๋ก ํ์ผ ๋ณ๊ฒฝ์ด ์ ์ฉ๋์ง ์์ ๊ฒ ๊ฐ์ผ๋ฉด config๋ฅผ ํ์ธํ์ญ์์ค. sudo๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ ๊ฑฐํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ ๊ณ์ ์ ์ฌ์ฉํ๊ณ ์ผ์ ์ค์ ์ helper ํ์ผ์ ๋ณด๊ดํฉ๋๋ค. ๋ค๋ฅธ ํ์ผ์ sh scripts/swarm.sh --env-file /path/to/lab.env config๋ก ์ ํํฉ๋๋ค.
publish์์ ์ฌ์ฉ์ ์ง์ ์ค์ ํ์ผ์ ์ฌ์ฉํ๋ ค๋ฉด ์ ์ฅ์ ๋ฐ์ด๋ .dockerignore๊ฐ ์ ์ธํ๋ ๋ฃจํธ์ .env.* ๊ฒฝ๋ก์ ๋์ญ์์ค. helper๋ ๋น๋ ์ ์ ์ง์ ๊ฒฝ๋ก์ symlink์ ์ต์ข
๋์์ ๊ฒ์ฌํ๊ณ , ์ ์ธ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ ์ ์ฅ์ ๋ด๋ถ ๊ฒฝ๋ก์ Dockerfile.dockerignore override๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ์ด๋ฅผ ํตํด helper์ ์๊ฒฉ ์ฆ๋ช
ํ์ผ์ด ์ด๋ฏธ์ง build context์ ์ ๋ฌ๋์ง ์๋๋ก ํฉ๋๋ค.
Agent๋ ๋ฐฐ์น๋ ๋
ธ๋์ ๋ก์ปฌ Docker socket๋ง ์ฌ์ฉํ๋ฉฐ manager API ์ ๊ทผ์ด ํ์ ์์ต๋๋ค. {{.Service.Name}}-{{.Node.ID}}๋ก ID๋ฅผ ๋ง๋ค๊ณ ์์ ์ task๊ฐ ์ฐ๊ฒฐ๋ control overlay IPv4๋ฅผ advertise-url๊ณผ self-url๋ก ์ฌ์ฉํฉ๋๋ค. ํด๋น daemon์ Swarm NodeAddr๋ฅผ ์ฝ์ด host-mode ํฌํธ๋ฅผ ํตํ ๋ณ๋ metrics URL๋ ์๋ฆฝ๋๋ค. control API๋ overlay ๋ด๋ถ TCP 8090์ ์ ์ง๋๊ณ ๊ฒ์๋์ง ์์ผ๋ฉฐ Peer control ๋ฐ libp2p ํฌํธ๋ ๊ฒ์ํ์ง ์์ต๋๋ค. ์๋น์ค VIP๋ ๊ณตํต DNSRR ์ฃผ์๋ ๊ฐ๋ณ Agent๋ฅผ ์์ ์ ์ผ๋ก ์๋ณํ ์ ์์ต๋๋ค. Agent๋ ์์ ์ ์ค์ ๋ก์ปฌ image ID๋ฅผ ํ์ธํ์ฌ Peer ์์ฑ์ ์ฌ์ฉํ๋ฏ๋ก ๊ฐ์ ๋
ธ๋์ AgentยทPeer ๋ฐ์ด๋๋ฆฌ๊ฐ ์ผ์นํฉ๋๋ค. Swarm global ์๋น์ค์ ํ
ํ๋ฆฟ
์ ๊ณต๋๋ stack์ ๋ฐ๋ณต ํ์ฐจ์ ์คํจ ์ฌ์๋๋ฅผ ํฌํจํ์ฌ ๋งค Run ์ ์ ์ Peer overlay๋ฅผ ์ค๋นํฉ๋๋ค. Controller์ Agent๋ stack์ attachable ${KPL_STACK_NAME}_control overlay๋ฅผ ์ฌ์ฉํ๋ฉฐ Peer๋ KPL_PEER_NETWORK์๋ง ์ฐ๊ฒฐํฉ๋๋ค. network-manager ์๋น์ค๋ ๊ณ ์ control manager์์ subnet/gateway๋ฅผ ๋ณด์กดํ๋ฉฐ Peer network ID๋ฅผ ๊ต์ฒดํฉ๋๋ค. ๊ฐ์ ๋
ธ๋์ standalone network-gateway๋ ๋ overlay์ ์ฐ๊ฒฐ๋์ด Peer HTTP ์ ์ดยทtelemetryยทbootstrapยท์๊ฐ ์์ฒญ์ ์ ๋ฌํฉ๋๋ค. Libp2p ๋ฉ์์ง๋ Peer ์ฌ์ด์์ ์ง์ ์ ๋ฌํ๋ฉฐ Manager์ gateway ๋ชจ๋ ํธ์คํธ ํฌํธ๋ฅผ ๊ณต๊ฐํ์ง ์์ต๋๋ค.
์ด๊ธฐํ๋ ๋นํ์ฑ Agent๋ฅผ ํฌํจํ ๋ฑ๋ก Agent ๋ชจ๋์ Peer ์ ๋ฆฌ ํ์ธ๊ณผ ์ ์ ์ฅ ์ฐจ๋จ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ํ์ธ ์๋ต์ด ์๊ฑฐ๋ ์ด๊ธฐํ๊ฐ ์คํจํ๋ฉด phase๋ฅผ ์์ํ์ง ์์ต๋๋ค. ๋ชจ๋ Agent ํ์ฑํ ํ ์คํ ์๊ณ๋ฅผ ์์ํฉ๋๋ค. ์๋ณ์ยท๋ณต๊ตฌยท์๊ฐ ์ ํ์ API ๊ณ์ฝ์ ์ฐธ๊ณ ํ์ญ์์ค. ๋ชจ๋ Swarm ๋ ธ๋๊ฐ Ready์ฌ์ผ ํ๋ฉฐ Peer overlay์๋ helper ์์ ๊ถ label๊ณผ ๊ธฐ๋ณธ IPv4 ์ค์ ์ด ํ์ํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ๋๋ ์๋น์ค๊ฐ ์ฐ๊ฒฐ๋ Peer network๋ ๊ฑฐ์ ํฉ๋๋ค.
Manager๋ docker network ls --quiet --no-trunc์ ์ ์ฒด network ID๋ฅผ docker network inspect์ ๋น๊ตํ ๋ค ๋คํธ์ํฌ๋ฅผ ์๋ฝํฉ๋๋ค. Docker๋ --quiet๋ง ์ง์ ํด๋ ๋ชฉ๋ก ID๋ฅผ ์ถ์ฝํ๋ฏ๋ก Docker network ๋ชฉ๋ก ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. ๊ฑฐ์ ์ ์๋ณ์ยทoverlay ์ค์ ยทIPAM ์ค์ ์ ๊ตฌ๋ถํ๊ณ ๊ด์ธกํ ๊ฐ์ ํจ๊ป ํ์ํฉ๋๋ค. ์๋ณ์ ๋ถ์ผ์น๋ attachable์ด๋ IPv4๊ฐ ๊บผ์ก๋ค๋ ์๋ฏธ๊ฐ ์๋๋๋ค. ์์ ๊ถยท์ฌ์ฉ์ ์ง์ ์ค์ ยท์ฌ์ฉ ์ค ๋คํธ์ํฌ ๊ฒ์ฌ๋ ๊ณ์ ์ ์ฉํฉ๋๋ค.
์๋ ์ด๊ธฐํ ์ network inspect์๋ ์คํ gateway์ ํจ๊ป Docker ๋ด๋ถ lb-<network-name> sandbox๊ฐ ํ์๋ ์ ์์ต๋๋ค. Manager๋ ํด๋น Peer overlay์ ๋ง๋ ํค์ <network-name>-endpoint ์ด๋ฆ, Docker ํ์์ endpoint ID๊ฐ ๋ชจ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๋ด๋ถ ํญ๋ชฉ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค. ์ด๋ฅผ ์ผ๋ฐ ์ปจํ
์ด๋๋ก ์กฐํํ๊ฑฐ๋ ์ญ์ ํ์ง ์๊ณ Docker๊ฐ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ฒ ํฉ๋๋ค. ๋๋จธ์ง endpoint๋ ๊ณ์ gateway ์์ ๊ถ ๊ฒ์ฌ๋ฅผ ๊ฑฐ์นฉ๋๋ค. ๋ค๋ฅธ ์ปจํ
์ด๋๊ฐ ๋จ์ ์๊ฑฐ๋ ์กฐํํ ์ ์์ผ๋ฉด ์ด๊ธฐํ๋ฅผ ๊ฑฐ๋ถํ๋ฉฐ endpoint ํคยท์ด๋ฆ์ ํ์ํ๊ณ ์กฐํ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ํจ๊ป ๋ณด์กดํฉ๋๋ค. ์๋น์ค ์ฐธ์กฐ์ ์๊ฒฉ attachment์ ๋ํ ๊ฑฐ๋ถ๋ ์ ์งํฉ๋๋ค. Docker LB sandbox ๋ช
๋ช
๊ตฌํ์ ์ฐธ๊ณ ํ์ญ์์ค.
์๋ ๊ต์ฒด๋ Docker์ ์ญ์ ๋ฐ์ ์ง์ฐ์ ๊ณ ๋ คํด ์ด์ Peer network ์ด๋ฆ์ด ์ฌ๋ผ์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค ์ ๋คํธ์ํฌ๋ฅผ ๋ง๋ญ๋๋ค. ์ผ์์ ์ธ network with name ... already exists ๊ฑฐ์ ์ ์ ํ ์๊ฐ ์์์ ์ํ๋ฅผ ํ์ธํ๊ณ ์ฌ์๋ํฉ๋๋ค. ๋ค๋ฅธ ์คํ์ ๊ต์ฒด ๋คํธ์ํฌ๊ฐ ๋ํ๋๋ฉด ๊ทธ๋๋ก ๋ณด์กดํ๊ณ ์ถฉ๋๋ก ๋ณด๊ณ ํฉ๋๋ค. ์๊ฐ ์ ํ๊ณผ ์์ฑ ์๋ต์ด ๋ถํ์คํ ๊ฒฝ์ฐ์ ๋ณต๊ตฌ๋ ๋คํธ์ํฌ ์ค๋น API๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์ ํด ์ํ์์ ์
๊ทธ๋ ์ด๋: ์คํยท์์ฝ ์คํ์ ์๋ฃํ๊ฑฐ๋ ์ทจ์ํ๊ณ Peer ์ ๋ฆฌ๋ฅผ ํ์ธํ ๋ค์ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋น๋ยท๊ฒ์ํ๊ณ ๊ฐฑ์ ํ stack์ ๋ฐฐํฌํฉ๋๋ค. Controller/Agent ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ณผ ์ Manager ์๋น์ค๋ฅผ ํจ๊ป ๊ฐฑ์ ํด์ผ ํฉ๋๋ค. Control ๋
ธ๋๋ manager์ฌ์ผ ํ๋ฉฐ ๋ณด์กด๋ ๋ฐ์ดํฐ volume์ ์ด์ ํ์ง ์๊ณ ID๋ฅผ ๋ฐ๊พธ์ง ๋ง์ญ์์ค. ์์คยท์ค์ ํ์ผ๋ง ์์ ํด๋ ํ์ฌ ๋ฐฐํฌ๊ฐ ๋ฐ๋์ง๋ ์์ต๋๋ค. Preparing network ์คํจ ์ sh scripts/swarm.sh logs network-manager๋ฅผ ํ์ธํ์ญ์์ค. ์์ ํธ์คํธ ๊ฐ ์คํ๊ณผ ๋๊ท๋ชจ ๋ฐ๋ณต ์คํ์ ๋ณ๋ ์ด์ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค.
network-manager-data๋ control ๋
ธ๋์ /var/lib/kpl/network์ ํ ๋น ์ค์ ๊ณผ ์ค๋น ์๋ณ์๋ฅผ ์ ์ฅํฉ๋๋ค. ์ฌ์์๊ณผ stack ์ ๊ฑฐ ํ์๋ ๋ณด์กดํฉ๋๋ค. Gateway๋ ๋ค์ ์ ๋ฆฌ ํ์ธ ๋๋ ๊ฒ์ฆ๋ stack ์ ๊ฑฐ๊น์ง ์ ์ง๋์ด ๋จ์ Peer์ ํต์ ์ ์ง์ํ๋ฉฐ ์ ์ด ์๋น์ค ์์ ๋ชจ๋ํฐ๋ง์ ํฌํจ๋ฉ๋๋ค. ์๋์ reset-peer-network๋ ์ ํด ์ ์ง๋ณด์์ฉ์ผ๋ก ๊ณ์ ์ฌ์ฉํ ์ ์๊ณ Manager์ ์คํ ํ์๋ ํ์ฉํฉ๋๋ค.
Swarm ์ง์ ์คํฌ๋ฆฝํธ๋ task ์ฃผ์, ๋ ธ๋ ์ฃผ์, ์ด๋ฏธ์ง ์กฐํ๋ฅผ 2์ด ๊ฐ๊ฒฉ์ผ๋ก ์ต๋ 5ํ ์๋ํฉ๋๋ค. ๊ฐ Docker ์กฐํ์๋ 5์ด ์ ํ๊ณผ ์ดํ 1์ด์ ๊ฐ์ ์ข ๋ฃ ์ ์๋ฅผ ์ ์ฉํฉ๋๋ค. ์์ง ๋น์ด ์๋ ๋ฉํ๋ฐ์ดํฐ๋ ์ฌ์๋ํ๊ณ , ์๋ชป๋ ์ฃผ์๋ ํฌํธ ์ค์ ์ ๋ช ์์ ์ผ๋ก ์คํจํฉ๋๋ค. ์ดํ Agent๊ฐ runtime์ ๊ฒ์ฌํ๊ณ ์์ ์ Agentยทnetwork ์์ ๋ฒ์์ ๋จ์ Peer๋ฅผ ์ต๋ 4๊ฐ์ฉ ๋ณ๋ ฌ ์ ๋ฆฌํฉ๋๋ค. ์ ๋ฆฌ์ ์ฑ๊ณตํด์ผ Controller์ ๋ฑ๋กํฉ๋๋ค.
์ ํํ ๋
ธ๋๊ฐ Agent status์ ์๋ค๋ฉด sh scripts/swarm.sh logs agent๋ฅผ ํ์ธํ์ญ์์ค. Waiting for ...๋ ์ง์ฐ ์ค์ธ Docker ์กฐํ ๋จ๊ณ๋ฅผ ๋ํ๋
๋๋ค. Agent๋ agent startup checking Docker runtime, agent startup cleaning previous Peer containers, ์์ ์๊ฐ์ด ํฌํจ๋ agent startup cleanup complete, agent registered๋ฅผ ์ฐจ๋ก๋ก ๊ธฐ๋กํฉ๋๋ค. task๊ฐ ์คํ ์ค์ด์ด๋ ๋ง์ง๋ง ๋ฑ๋ก ๋ก๊ทธ๊ฐ ์๋ค๋ฉด ์์ง Controller์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Peer ์ ๋ฆฌ์ ์คํจํ๋ฉด ์ค๋ฅ๋ฅผ ์ ์งํ๋ฉฐ ๋จ์ ์ปจํ
์ด๋๋ฅผ ๋น ์ฉ๋์ผ๋ก ์ฒ๋ฆฌํ์ง ์์ต๋๋ค.
์ผ์์ ์ธ heartbeat ํต์ ์ค๋ฅ๋ HTTP 5xx ์๋ต์ ์ด๋ฏธ ์ ๋ฌํ Peer ์ด๋ ฅ์ ํ์ธ ์ํ๋ฅผ ์ ์งํ ์ฑ heartbeat๋ฅผ ์ฌ์๋ํฉ๋๋ค. Controller ์ฌ์์ ๋ฑ์ผ๋ก ๋ฑ๋ก ์ถฉ๋ ์๋ต(HTTP 409)์ ๋ฐ์ผ๋ฉด ์ฌ๋ฑ๋กํ๊ณ Peer ๋ชฉ๋ก์ ๋ค์ ์ ์กํฉ๋๋ค. ์ผ์ ์ฅ์ ๋๋ง๋ค ์ข ๋ฃ๋ Peer ์ ์ฒด๋ฅผ ๋ฐ๋ณต ์ ๋ก๋ํ์ง ์์ผ๋ฉด์ Controller์ ๋ฑ๋ก ์ ๋ณด ์ ์ค์๋ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
Agent Status์ Refresh๋ Offline์ ํฌํจํ ๊ธฐ์กด ๋ฑ๋ก ํญ๋ชฉ์ ํ์ธํฉ๋๋ค. ๋ชฉ๋ก์ ์๋ ์คํ ์ค task๋ฅผ ์ฐพ๊ฑฐ๋ task ์ฃผ์๊ฐ ๋ฐ๋ Agent๋ฅผ ๋ณต๊ตฌํ๋ ค๋ฉด More โ Discover Agents๋ฅผ ์ฌ์ฉํ์ญ์์ค. tasks.<stack>_agent๋ฅผ ์กฐํํ๊ณ ์ ์ด API๋ฅผ ํ์ธํ ๋ค, ๋ฏธ๋ฑ๋กยท๊ต์ฒด๋ Agent๊ฐ ์ค์ ๋ Controller์ ์ฌ๋ฑ๋กํ๋๋ก ์์ฒญํฉ๋๋ค. ์๋ก ์ถ๊ฐํ Agent ์์ ๊ฐ๋ณ ์คํจ ์ด์ ๋ฅผ ํ์ํฉ๋๋ค. ์คํ ์ค์ธ Peer์ ์ ์ฅ๋ ์ฉ๋ยท๋นํ์ฑํ ์ค์ ์ ์ ์ง๋ฉ๋๋ค. stack์ด KPL_AGENT_DISCOVERY_DNS๋ฅผ ์๋ ์ง์ ํ๋ฉฐ, ๋จ๋
Controller๋ --agent-discovery-dns๋ก ์ ๊ทผ ๊ฐ๋ฅํ Agent task DNS ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค(8090 ํฌํธ). ์ด ๋ณต๊ตฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ ์ Controller์ Agent ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ ๋น๋ํ๊ณ ์์ ๋ stack ์ค์ ์ ์ฌ๋ฐฐํฌํ์ญ์์ค.
Agent ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด๋ฉด ์ต์ด ๋ฑ๋ก์ ์คํจ ํ 2์ด ์ฃผ๊ธฐ๋ก ๊ณ์ ์ฌ์๋ํฉ๋๋ค. DNSยท๋คํธ์ํฌ ์ฅ์ ๋ ์งํ ์ค heartbeat๊ฐ ํด์๋ ๋ค ํ์์ ๋ค์ ์คํํ ์ ์์ต๋๋ค. ์์ ์คํจยท๋ฏธ๋ฐฐ์น ์ปจํ
์ด๋๋ฅผ ์คํํ๊ฑฐ๋ ์์ ์ Peer ์ ๋ฆฌ๋ฅผ ๊ฑด๋๋ฐ๋ ๊ธฐ๋ฅ์ ์๋๋๋ค. ์ ํํ ๋
ธ๋๊ฐ ๊ณ์ ๋๋ฝ๋๋ฉด sh scripts/swarm.sh status์ sh scripts/swarm.sh logs agent๋ฅผ ํ์ธํ์ญ์์ค. DNS์ ์ฃผ์๊ฐ ์๋ task๋ ๋ฐ๊ฒฌํ Agent ์์ ํฌํจํ ์ ์์ต๋๋ค.
kpl-v3 ์์ค ์ ์ฅ์๋ฅผ ๊ฐฑ์ ํ ๋ค ์งํ ์ค ์คํ์ ๋ง์น๊ณ ์คํํ์ญ์์ค.
sh scripts/swarm.sh publish
sh scripts/swarm.sh deploy
sh scripts/swarm.sh status์ค์ ์๋ ๊ฐ์ ํ๊ทธ๋ฅผ ์ ์งํฉ๋๋ค. ์ด์ digest์์ ํ๊ทธ๋ก ๋ฐ๊พธ๊ฑฐ๋ ๋ค๋ฅธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์คํํ์ญ์์ค.
sh scripts/swarm.sh configure KPL_IMAGE=registry.example.com/kpl-v3:v3์ดํ ๋์ผํ๊ฒ publish โ deploy๋ฅผ ์ฌ์ฉํฉ๋๋ค. publish์๋ digest๊ฐ ์๋ ํ๊ทธ๊ฐ ํ์ํฉ๋๋ค. ์ํคํ
์ฒ๊ฐ ํผํฉ๋์ด ์๋ค๋ฉด native ๋น๋ ๋์ publish --platforms linux/amd64,linux/arm64๋ก manager์ ๋ชจ๋ ๋์ ์ํคํ
์ฒ๋ฅผ ํฌํจํ์ญ์์ค.
๋งค ๋ฐฐํฌ๋ง๋ค ์ค์ ๋ ํ๊ทธ๋ฅผ pullํ๊ณ ๊ฒฐ๊ณผ์ registry digest๋ฅผ ํ์ธํ์ฌ .env.swarm์ ๋ฐ๊พธ์ง ์๊ณ ์ด๋ฒ ๋ฐฐํฌ๋ง ํด๋น digest๋ก ๊ณ ์ ํฉ๋๋ค. pushํ ๋๋ง๋ค SHA๋ฅผ ์๋์ผ๋ก ๋ฐ๊ฟ ํ์๊ฐ ์์ต๋๋ค. pull์ ์คํจํ๋ฉด ์ค๋๋ ๋ก์ปฌ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐฐํฌ๋ฅผ ์ค๋จํฉ๋๋ค. ๋ณ๊ฒฝ๋์ง ์๋ ๋ฒ์ ์ผ๋ก ๋ฐฐํฌํ๋ ค๋ฉด ๊ธฐ์กด์ฒ๋ผ repository@sha256:<digest>๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Docker pull๊ณผ digest ๊ณ ์
์ ํ ์๊ฐ์ ์ด ๋จ์์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ KPL_IMAGE_BUILD_TIMEOUT=1800, KPL_IMAGE_PUSH_TIMEOUT=600, KPL_IMAGE_PULL_TIMEOUT=300์
๋๋ค. ๋ณ๋ push ์ ํ์ native ๊ฒ์์ ์ ์ฉํ๋ฉฐ, Buildx์ ํตํฉ ๋น๋ยทpush์๋ build ์ ํ์ด ์ ์ฉ๋ฉ๋๋ค. ํ๊ทธ ํ์ธ์ฉ pull์ manager ๋ฐ๋ชฌ์ native ํ๋ซํผ์ ์ฌ์ฉํ๊ณ ํด๋น pull์์๋ง DOCKER_DEFAULT_PLATFORM์ ๋ฌด์ํ๋ฉฐ, Docker๊ฐ ๋ฐํํ manifest/index digest๋ฅผ ์ ์งํฉ๋๋ค. Agent ๊ต์ฒด ์ ๋ด๋น Peer๊ฐ ์ข
๋ฃ๋ ์ ์์ผ๋ฏ๋ก ๋ฐฐํฌ ํ Agent ๋ฑ๋ก์ ๊ธฐ๋ค๋ฆฐ ๋ค ๋ค์ ์คํ์ ์คํํ์ญ์์ค.
๋ช
์์ NODE ๋ชฉ๋ก์๋ Swarm node ID ๋๋ hostname์ ์ฌ์ฉํฉ๋๋ค. deploy, add-node, remove-node์๋ ๋ชฉ๋ก ๋์ ๋ค์ ์ ํ ์ต์
์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ํ ์ต์
๋ผ๋ฆฌ ๋๋ ์ ํ ์ต์
๊ณผ ๋ช
์์ ๋
ธ๋ ๋ชฉ๋ก์ ์์ ์ ์์ต๋๋ค. ์๋ ๋ช
๋ น์ ์๋ฒ๋ฅผ Swarm์ ๊ฐ์
์ํค๊ฑฐ๋ ํํด์ํค์ง ์๊ณ , ํด๋น stack์ Agent ๋ฐฐ์น๋ง ๋ณ๊ฒฝํฉ๋๋ค.
| ์ ํ ์ต์ | ํ๋ณด ๋ ธ๋ |
|---|---|
--all |
manager๋ฅผ ํฌํจํ ์ ์ฒด ๋ ธ๋ |
--all-excluding-self |
ํ์ฌ Docker context๋ก ์ ์ํ manager๋ฅผ ์ ์ธํ ์ ์ฒด ๋ ธ๋ |
--workers |
Swarm ์ญํ ์ด worker์ธ ๋
ธ๋. manager๋ ์ ์ธ |
self๋ ํ์ฌ context๋ก ์ ํํ Docker daemon์ด ๋ณด๊ณ ํ๋ .Swarm.NodeID์
๋๋ค. KPL_CONTROL_NODE_ID๋ ๋ช
๋ น์ ์
๋ ฅํ๋ ์
ธ์ hostname์ ๊ธฐ์ค์ผ๋ก ํ์ง ์์ต๋๋ค. manager๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ํด๋ฌ์คํฐ์์๋ --all-excluding-self๊ฐ ๋ค๋ฅธ manager๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ๋ชจ๋ manager๋ฅผ ์ ์ธํ๋ ค๋ฉด --workers๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์๋ deploy/add-node๋ LinuxยทReadyยทActive ๋
ธ๋๋ง ํฌํจํ๋ฉฐ ์กฐ๊ฑด์ ๋ง์ง ์๋ ํ๋ณด๋ ๊ฑด๋๋ฐ์๋ค๊ณ ์๋ดํฉ๋๋ค. ์๋ remove-node๋ ๋จผ์ ์ด stack์ kpl.<stack>.agent=true label์ด ์๋ ๋
ธ๋๋ก ๋์์ ์ ํํฉ๋๋ค. ์ฒ ๊ฑฐ ๋์์ด ์ ๊ทผ ๋ถ๊ฐ์ด๊ฑฐ๋ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๊ฑด๋๋ฐ์ง ์๊ณ ์คํจํ์ฌ ๊ธฐ์กด ์ ๋ฆฌ ํ์ธ ์ ์ฐจ๋ฅผ ์ ์งํฉ๋๋ค. ์ ํ ๊ฒฐ๊ณผ๊ฐ ๋น์ด๋ ์คํจํฉ๋๋ค.
๋ฐฐํฌยท์ถ๊ฐ๋ ๊ธฐ์กด ๋ฐฐ์น label์ ๋์์ ์ถ๊ฐํ๋ฉฐ, ์ ํ ๋ฐ์ ๋
ธ๋์์ label์ ์ ๊ฑฐํ์ง ์์ต๋๋ค. ์ธ์ ์๋ deploy๋ ๊ธฐ์กด label์ ์ฌ์ฌ์ฉํฉ๋๋ค. ์ ํ ์ต์
์ ํด๋น ๋ช
๋ น ์คํ ์์๋ง ํ๊ฐํ๋ฏ๋ก, ์ดํ Swarm์ ๊ฐ์
ํ ๋
ธ๋์ Agent๋ฅผ ์๋ ๋ฐฐ์นํ๋ ์๊ตฌ ๊ท์น์ด ๋์ง๋ ์์ต๋๋ค.
# ์๋ก ๊ฐ์
ํ worker๋ฅผ ํฌํจํ์ฌ ํ์ฌ ์กฐ๊ฑด์ ๋ง๋ worker ์ญํ ๋
ธ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
sh scripts/swarm.sh add-node --workers
# ํด๋น ๋
ธ๋์ ์คํ์ ๋ง์น ๋ค ์ด stack์ ์ ํ๋ Agent๋ฅผ ์ข
๋ฃํฉ๋๋ค.
sh scripts/swarm.sh remove-node --all-excluding-selfMakefile์ NODES๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ๋ฏ๋ก make swarm-add-node NODES='--workers'๋ ๊ฐ์ ๋์์ ์ ํํฉ๋๋ค.
| ๋ช ๋ น | ๋์ |
|---|---|
sh scripts/swarm.sh deploy [NODE...] |
๋ ธ๋ ๋ชฉ๋ก ๋๋ ์ ํ ์ต์ ํ๋๋ก ๋ฐฐํฌยท์ ๋ฐ์ดํธํ๋ฉฐ, ๋ ๋ค ์์ผ๋ฉด ๊ธฐ์กด label ์ฌ์ฌ์ฉ. ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ pullยทํ์ ํ๊ฑฐ๋ ๋ช ์ digest ์ฌ์ฉ |
sh scripts/swarm.sh status |
Docker stack ์๋น์คยทAgent taskยท์ ํ๋ ๋ ธ๋ ํ์. API readiness๋ ๊ฒ์ฌํ์ง ์์ |
sh scripts/swarm.sh nodes |
ํ์ฌ Swarm ๋ ธ๋ ๋ชฉ๋ก ์กฐํ |
sh scripts/swarm.sh init [KEY=VALUE...] |
๊ฒ์ฆ๋ ๋น๊ณต๊ฐ ์ค์ ๊ณผ ์๊ฒฉ ์ฆ๋ช ์์ฑ. ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ฐ์ง ์์ |
sh scripts/swarm.sh configure KEY=VALUE... |
๋ค๋ฅธ ์ค์ ๊ณผ ์๊ฒฉ ์ฆ๋ช ์ ๋ณด์กดํ๋ฉฐ ๊ฒ์ฆ๋ ๋ณ๊ฒฝ์ ์์์ ์ผ๋ก ์ ์ฅ |
sh scripts/swarm.sh config / credentials
|
๋น๋ฐ ๊ฐ์ ๊ฐ๋ฆฐ ์ ํจ ์ค์ ์กฐํ / APIยทGrafana ์๊ฒฉ ์ฆ๋ช ๋ช ์์ ํ์ |
sh scripts/swarm.sh login |
์ค์ ๋ ์ด๋ฏธ์ง์์ ์ถ๋ก ํ registry์ ๋ํํ ๋ก๊ทธ์ธ |
sh scripts/swarm.sh publish [--platforms CSV] |
์ค์ ํ๊ทธ๋ก ๋น๋ยทpush. ํ๋ซํผ ์ง์ ์ ๊ธฐ์กด Buildx builder ์ฌ์ฉ |
sh scripts/swarm.sh check |
๋ถ๋ฌ์จ ์ค์ ์ผ๋ก ๋ฐฐํฌ ์ฌ์ ๊ฒ์ฌ ์ฌ์คํ |
sh scripts/swarm.sh access |
control ๋ ธ๋ URL๊ณผ ์ ํ๋ ๊ฐ Agent ๋ ธ๋์ metrics URL ์ถ๋ ฅ. ์ ๊ทผ ๊ฐ๋ฅ ์ฌ๋ถ๋ ์๋น์ค readiness๋ ๊ฒ์ฌํ์ง ์์ |
sh scripts/swarm.sh logs [COMPONENT] [--tail N|all] |
๊ธฐ๋ณธ ์ต๊ทผ 100์ค. controllerยทagentยทprometheusยทgrafana ์๋น์ค ๋ก๊ทธ ๋๋ accessยทauth ์น JSONL ํ์ผ ์กฐํ |
sh scripts/swarm.sh scenario [FILE] |
์น ํผ์ ๋ฃ์ YAML ์ถ๋ ฅ. ๊ธฐ๋ณธ์ ๋ถ์ฐ smoke ์์ ์ด๋ฉฐ ์คํ ์์ฒญ์ ํ์ง ์์ |
sh scripts/swarm.sh add-node worker-c |
๊ธฐ์กด ์๋น์ค์ Agent ๋ฐฐ์น ๋ ธ๋ ์ถ๊ฐ. LinuxยทReadyยทActive ์ํ ํ์ |
sh scripts/swarm.sh remove-node worker-b |
์๋น์ค์์ ๋์ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ Agent ์ ์ ์ข ๋ฃ ํ์ธ ํ ๋ฐฐ์น label ์ ๋ฆฌ |
sh scripts/swarm.sh remove |
๋น์ ์ task๊ฐ ์์ด๋ stack ์๋น์ค ์ง์ ์ญ์ ; ๋ฐ์ดํฐ volumeยทPeer network ๋ณด์กด |
sh scripts/swarm.sh reset-peer-network |
stack ์ ๊ฑฐ ํ ์ฌ์ฉํ์ง ์๋ helper ์์ Peer overlay๋ฅผ ์ฌ์์ฑํ๊ณ ๊ธฐ์กด IPv4 ํ ๋น ์ค์ ๋ณด์กด |
์น ์ ๊ทผยท๋ก๊ทธ์ธ ๊ธฐ๋ก์ logs access, logs auth๋ก ์กฐํํฉ๋๋ค. Controller๊ฐ ๋ค๋ฅธ ๋
ธ๋์ ์์ผ๋ฉด ํธ์ถ์๋ manager์ ์ฐ๊ฒฐํ ์ํ์์ ํด๋น ๋
ธ๋์ Docker daemon์ ๊ฐ๋ฆฌํค๋ --context NAME์ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ฉ ์์ ํ์ผ ๋ณด์กด ๋ฐฉ์์ ์น ์ ๊ทผยท์ธ์ฆ ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์๋ฒ๋ฅผ ์ถ๊ฐํ๋ฉด ์ดํ join๋ถํฐ ์ ์ฉ๋์ ์ฌ์ฉํ๋ฉฐ ์ด๋ฏธ ์คํ ์ค์ธ Peer๋ ์ด๋ํ์ง ์์ต๋๋ค. remove-node๋ ํด๋น ์๋ฒ Agent๊ฐ ๊ด๋ฆฌํ๋ Peer๋ฅผ ์ข
๋ฃํ๋ฏ๋ก ์งํ ์ค ์คํ์ ์ํฅ์ ์ค๋๋ค. ๋ค๋ฅธ stack์ label์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
์ ์ฒด remove๋ ํด๋น stack์ด ์๋ ค์ง KPL ์๋น์ค๋ง ํฌํจํ๋์ง ํ์ธํ ๋ค, ํด๋น ์๋น์ค ID๋ฅผ docker service rm์ผ๋ก ์ง์ ์ญ์ ํฉ๋๋ค. ์ด์ด docker stack rm์ผ๋ก stack ์์ config์ network๋ฅผ ์ ๊ฑฐํ๊ณ ๋จ์ stack ์๋น์ค๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ์คํจยทRejected task, ์ด๋ ฅ ๋ถ์ฌ, offline worker๋ ์ด ๊ฒฝ๋ก๋ฅผ ๋ง์ง ์์ต๋๋ค. ๋ฐฐ์น label์ ์๋น์ค ์ญ์ ํ ๊ฐ๋ฅํ ๋ฒ์์์ ์ ๋ฆฌํฉ๋๋ค. label ์กฐํยท๋ณ๊ฒฝ ์คํจ๋ ์๋ดํ๋ฉฐ, ๋ค์ removeํ๋ฉด ์๋น์ค๊ฐ ์ด๋ฏธ ์์ด๋ ๋จ์ stack ๋ฆฌ์์ค์ label์ ์ฌ์ ๋ฆฌํฉ๋๋ค. Manager API ์ค๋ฅ๋ ์๋น์ค๊ฐ ๊ณ์ ๋จ๋ ๊ฒฝ์ฐ์๋ ์คํจ๋ฅผ ๋ฐํํฉ๋๋ค. ์คํยทPrometheusยทGrafana์ ๋ฐ์ดํฐ volume๊ณผ ์ธ๋ถ Peer network๋ ๋ณด์กดํฉ๋๋ค.
network-manager ์๋น์ค๊ฐ ์์ผ๋ฉด ์ง์ ๋ control ๋
ธ๋์ remove๋ ๋จผ์ Manager/Agent์ ์ task ๋ฐฐ์น๋ฅผ ๋ง๊ณ task ์ด๋ ฅ์ ์ ์งํ ์ฑ ์ ์ ์ข
๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ดํ ์๋น์ค๋ฅผ ์ญ์ ํ๋ฉฐ ์ข
๋ฃ๋ฅผ ํ์ธํ ๊ฒฝ์ฐ์๋ง ์์ ํ standalone gateway๋ ์ ๊ฑฐํฉ๋๋ค. Swarm์ ์ญ์ ํ ์๋น์ค์ task ์ด๋ ฅ์ ์ ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ข
๋ฃ ํ์ธ์ ์๋น์ค ์ญ์ ์ ์ ์ํํฉ๋๋ค. ์คํจยท๋๋ฝ๋ ์ด๋ ฅ, ์ฌ์ฉํ ์ ์๋ ๋
ธ๋, ๋ค๋ฅธ Docker daemon ๋๋ ๋ก์ปฌ Peer ์์กด ์์๋ gateway๋ฅผ ์ ์งํ๊ณ ์ ๋ฆฌ ๋ฏธํ์ธ์ ์๋ฆฝ๋๋ค. ์๋น์ค ์ญ์ ๋ ๊ณ์ ์งํํ๋ฉฐ ์ฐ๊ฒฐ๋ control network๋ ๋จ์ ์ ์์ต๋๋ค. remove๋ฅผ ๋ฐ๋ณตํด๋ ์ฌ๋ผ์ง task ์ด๋ ฅ์ ๋ณต์๋์ง ์์ต๋๋ค. ๋จ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ฒํ๊ฑฐ๋ ์ฌ๋ฐฐํฌํ ๋ค ๋ชจ๋ Agent๊ฐ Peer ์ ๋ฆฌ๋ฅผ ํ์ธํด์ผ ๋ค์ ์ด๊ธฐํ๊ฐ ๋ณต๊ตฌ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
remove-node๋ ๊ธฐ์กด์ฒ๋ผ Agent ์๋น์ค์์ ์ ํ ๋
ธ๋๋ฅผ ์ ์ธํ๊ณ clean container exit๋ฅผ ๊ธฐ๋ค๋ฆฐ ๋ค ๋ฐฐ์น label๊ณผ ์์ ์ ์ธ ์กฐ๊ฑด์ ์ ๋ฆฌํฉ๋๋ค. label๋ถํฐ ์ ๊ฑฐํ๋ฉด ์ ์ ์ข
๋ฃ๋ Swarm์ด Rejected๋ก ๊ธฐ๋กํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. offline ๋
ธ๋, ๋ณด์กด๋ ๊ณผ๊ฑฐ ์ด๋ ฅ์ ํฌํจํ ์คํจ task, ์ด๋ ฅ ๋ถ์ฌ๋ก Peer ์ ๋ฆฌ๋ฅผ ํ์ธํ ์ ์์ผ๋ฉด ์ด ๋ช
๋ น์ ์ค๋จํฉ๋๋ค. ์ด๋ฏธ ์ํํ ๋ฐฐ์น ๋ณ๊ฒฝ์ ์๋ ๋ณต๊ตฌํ์ง ์์ผ๋ฏ๋ก ์ค๋ฅ์ ๋์จ task์ ๋
ธ๋๋ฅผ ์ ๊ฒํ ๋ค ์ฌ์๋ํ์ญ์์ค. ๋ค์ Agent๋ฅผ ์คํํ๋ ค๋ ๊ฒฝ์ฐ add-node๊ฐ ๋จ์ ์ ์ธ ์กฐ๊ฑด๋ ํด์ ํฉ๋๋ค.
์ปจํ
์ด๋ ์์ฑยท์ญ์ ๋ฅผ ๋ฐ๋ณตํ๋ฉด Docker overlay ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋๋ฌ๋ ์ ์์ต๋๋ค. ์ปจํ
์ด๋ ์์ ์ IP ํ ๋น ์คํจ์ ์ด๋ฏธ Ready์ธ Peer ์ฌ์ด์ TCP timeout์ ๊ตฌ๋ถํด์ ์ง๋จํด์ผ ํฉ๋๋ค. ํด๋น ํธ์คํธ์ Docker daemon ๋ก๊ทธ์์ ๋ฐ๋ณต๋๋ peerDbAdd ์ถฉ๋, Neighbor entry already present, bulk-sync ์คํจ์ NetworkDB ๋๊ธฐ์ด ์ฆ๊ฐ๋ฅผ ํ์ธํ์ญ์์ค. ์ปจํ
์ด๋ ์ ๋ฆฌ ์๋ฃ๊ฐ ์๊ฒฉ overlay ํ
์ด๋ธ์ ์๋ ด์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. IP ํ ๋น์ Docker IPAM์ด ๋ด๋นํ๋ฉฐ KPL์ด modulo IP ํ ๋น๊ธฐ๋ฅผ ๊ตฌํํ์ง๋ ์์ต๋๋ค.
์คํ๊ณผ ์์ฝ ์ ์ถ์ ์๋ฃํ๊ฑฐ๋ ์ทจ์ํ ๋ค Peer ์ ๋ฆฌ๋ฅผ ํ์ธํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์กดํ์ญ์์ค. remove๋ Agent ๋ฐฐ์น label์ ์ง์ฐ๋ฏ๋ก ์๋น์ค ์ ๊ฑฐ ์ ์ ๊ธฐ์กด Agent ๋
ธ๋ ์ ํ์ ๊ธฐ๋กํฉ๋๋ค. ์์ ์ ์ฐจ์ ๋ฐ๋ผ stack์ ๋ณ๋๋ก ์ ๊ฑฐํ ๋ค, ๋ชจ๋ Swarm ๋
ธ๋๊ฐ Ready์ด๊ณ ๊ธฐ์กด network๊ฐ ์ฌ์ฉ๋์ง ์๋ ์ํ์์ ์คํํฉ๋๋ค.
sh scripts/swarm.sh reset-peer-network
# ๊ธฐ์กด์ ์ ํํ ๋
ธ๋์ ์ค์ ID/์ด๋ฆ์ ์ง์ ํ์ฌ ๋ณ๋๋ก ์ฌ๋ฐฐํฌํฉ๋๋ค.
sh scripts/swarm.sh deploy worker-a worker-breset ๋ช
๋ น์ ๋ถ๋ฌ์จ KPL_STACK_NAME๊ณผ KPL_PEER_NETWORK๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ํด Controller๋ฅผ ํฌํจํ์ฌ ํด๋น stack์ ์๋น์ค๊ฐ ํ๋๋ผ๋ ๋จ์ ์์ผ๋ฉด ๊ฑฐ๋ถํฉ๋๋ค. ์ฌ์ฉํ ์ ์๋ ๋
ธ๋, ๋ก์ปฌ์ ์ฐ๊ฒฐ๋ ์ปจํ
์ด๋, ์๊ฑฐ๋ ๋ชจํธํ network, ๋ค๋ฅด๊ฑฐ๋ ๋๋ฝ๋ ์์ ๊ถ label, ์กฐํ ์คํจ๋ ๊ฑฐ๋ถํฉ๋๋ค. Docker์ ์ญ์ API๋ ๋ค๋ฅธ ๋
ธ๋์ ์๋น์ค ์ฐธ์กฐ์ ํ์ฑ network-attachment task๋ ๊ฒ์ฌํฉ๋๋ค. ์ ๊ฒ์ด ํด๋ฌ์คํฐ๋ฅผ ์ ๊ทธ์ง๋ ์์ผ๋ฏ๋ก reset๊ณผ ๋ฐฐํฌยท๋ค๋ฅธ network ์ ์ง๋ณด์๋ฅผ ๋์์ ์คํํ์ง ๋ง์ญ์์ค.
์ง์ ๋ฒ์๋ helper๊ฐ ๋ง๋๋ ๊ธฐ๋ณธ ๊ตฌ์ฑ์
๋๋ค. Swarm ๋ฒ์์ attachable IPv4 overlay, ๊ธฐ๋ณธ IPAM, subnet ํ๋, KPL ์์ ๊ถ label ๋ ๊ฐ์ ์ ํ์ ์ธ io.kpl.execution ํ์๋ง ์์ด์ผ ํ๋ฉฐ ์ฌ์ฉ์ ์ง์ driver/IPAM ์ต์
, IP ๋ฒ์, ๋ณด์กฐ ์ฃผ์, ์ถ๊ฐ label์ด ์์ผ๋ฉด ๊ฑฐ๋ถํฉ๋๋ค. Docker๊ฐ ์์ฑํ VXLAN ID๋ ์๋ก ๋ฐ๊ธ๋ฉ๋๋ค. ์์ฑ ๋น์ KPL_PEER_SUBNET์ ์๋ตํ์ด๋ ๊ธฐ์กด subnet๊ณผ gateway๋ฅผ ๋ณด์กดํ๋ฉฐ, ํ์ฌ ์ค์ ํ subnet์ด ๋ค๋ฅด๋ฉด ์ญ์ ์ ์ ์คํจํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ยท์ํธํ network๋ ์ค์ ์ ๊ฒํ ํ ๋ณ๋ ์ฌ์์ฑ ์ ์ฐจ๊ฐ ํ์ํฉ๋๋ค.
๋ช
๋ น์ ์กฐ๊ฑด์ ์ฌํ์ธํ๊ณ , ์บก์ฒํ network ID๋ฅผ ์ญ์ ํ ๋ค ๋ค์ ์์ฑํ์ฌ ์ค์ ๊ณผ ์ ID๋ฅผ ๊ฒ์ฆํฉ๋๋ค. ์๋น์ค ์ค์ง, ์ปจํ
์ด๋ ์ฐ๊ฒฐ ํด์ , Docker ์ฌ์์, ์ค์ ยท๋ฐฐ์น label ๋ณ๊ฒฝ, volume ์ญ์ ์ ์๋ ๋ฐฐํฌ๋ ํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ณด์กด์ ์ ์ฅ์ ๊ณ์ฝ์ ๋ฐ๋ฆ
๋๋ค. ๊ฐ์ ์คํ ์ต์
์ ์์ผ๋ฉฐ ๊ฐ Docker ํธ์ถ์ KPL_DOCKER_TIMEOUT์ผ๋ก ์ ํํฉ๋๋ค.
์ญ์ ์ ์ ์ ํํ ์ฌ์์ฑ ๋ช ๋ น์ ์ถ๋ ฅํฉ๋๋ค. ์ญ์ ยท์์ฑยท๊ฒ์ฆ ์ค ์คํจํ๋ฉด ์ฑ๊ณต์ผ๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฏธํ์ธ ๋๋ ๋ฏธ์๋ฃ ์ํ๋ฅผ ์๋ดํฉ๋๋ค. timeout์ด ๋ ์์ฒญ๋ ์ด๋ฏธ ์ ์ฉ๋์ ์ ์์ผ๋ฏ๋ก ์ฌ์๋ ์ ์ network๋ฅผ ์กฐํํ์ญ์์ค. network๊ฐ ์์ ๋๋ง ์ถ๋ ฅ๋ ์ฌ์์ฑ ๋ช ๋ น์ ์ฌ์ฉํ๋ฉฐ, ์ฌ์๋ํ๋ ค๊ณ ๊ธฐ์กด replacement๋ฅผ ์ญ์ ํ์ง ๋ง์ญ์์ค. ์ฌ๋ฐฐํฌ ํ ์์ ์คํ์ผ๋ก ํธ์คํธ ๊ฐ ํต์ ์ ํ์ธํ ๋ค์ ๋๊ท๋ชจ ๋ฐ๋ณต ์คํ์ผ๋ก ๋์๊ฐ์ญ์์ค. overlay ์ฌ์์ฑ์ ๋ณต๊ตฌ ์์ ์ด๋ฉฐ Docker ๋๊ธฐํ ๋ฌธ์ ์ ์ฌ๋ฐ ๋ฐฉ์ง๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์ด ์๋ reset ๋ช ๋ น๋ง ์ฌ์ฉํ ๋๋ KPL ์ด๋ฏธ์ง ์ฌ๋น๋๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์๋ ์ด๊ธฐํ์๋ ๊ฐฑ์ ํ ์ด๋ฏธ์ง์ stack์ด ํ์ํฉ๋๋ค.
KPL_USERยทKPL_PASSWORD๊ฐ KPL_API_TOKEN์ ๋์ฒดํฉ๋๋ค. init์ ๊ธฐ๋ณธ ์ฌ์ฉ์๋ช
์ admin์ด๋ฉฐ ๋์๋ณด๋์ Grafana ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฐ๊ฐ ์์ฑํฉ๋๋ค. credentials๋ ๋ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๋ช
์์ ์ผ๋ก ํ์ํ๊ณ config๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฐ๋ฆฝ๋๋ค. Controller์ Log in ํ๋ฉด์์ ํ ๋ฒ ๋ก๊ทธ์ธํ๋ฉด ์คํ ์คํยท์ค์ง, ์๋๋ฆฌ์ค ์ ์ฅ, ๊ฒฐ๊ณผ ์ญ์ , ๋ถ์ยท๋ค์ด๋ก๋๋ ์ธ์
์ ์ฌ์ฌ์ฉํฉ๋๋ค. Log out์ผ๋ก ์ข
๋ฃํ๋ฉฐ ์ธ์
์ 12์๊ฐ ๋ค ๋ง๋ฃ๋ฉ๋๋ค. Controller ์ฌ์์ ํ์๋ ๋ค์ ๋ก๊ทธ์ธํฉ๋๋ค. ๋ณ๋ API token ์
๋ ฅ๋์ ์์ต๋๋ค.
๊ธฐ์กด ํ ํฐ ์ค์ ์ volume์ ๋ค์ ๋ง๋ค์ง ์๊ณ ์ ํํฉ๋๋ค.
sh scripts/swarm.sh configure KPL_USER=admin
sh scripts/swarm.sh credentials์ ํ ์ ํ๊ธฐ๋ ํ ํฐ ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ๋ค๋ฅธ ์ค์ ์ ๋ณด์กดํ๋ฉฐ, KPL_PASSWORD๊ฐ ์์ ๋๋ง ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ด์ ํ ํฐ์ ๋น๋ฐ๋ฒํธ๋ก ์ฌ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ง์ ์ง์ ํ๋ ค๋ฉด configure KPL_USER=... KPL_PASSWORD=...๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋ฐฐํฌ ์ ํ๊ฒฝ๋ณ์ ์ฐ์ ์์๋ ์ ์ง๋ฉ๋๋ค. ์คํ๊ณผ ์์กด Peer๋ฅผ ์ ๋ฆฌํ ๋ค ์ ์ด๋ฏธ์ง๋ฅผ publishํ๊ณ ControllerยทAgent๋ฅผ ํจ๊ป deployํ์ญ์์ค. ๋ด๋ถ ์๋น์ค ํค๋ ๋ก๊ทธ์ธ ์ค์ ์์ ์๋ ์์ฑํ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ์
๋ ฅํ ํ์๊ฐ ์์ต๋๋ค.
๋์๋ณด๋ ๋ฐ์ดํฐ, SSE, ๊ฒ์ฆยท๋ถ์ยท๋ค์ด๋ก๋์๋ ๋ชจ๋ ๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค. ๋ชจ๋ํฐ๋ง์ฉ health/์๊ฐ, Prometheus metricsยทtarget discovery๋ง ๊ณต๊ฐ๋ก ์ ์งํฉ๋๋ค. ๋ด๋ถ ๋ฑ๋กยทtelemetry์ Peer discovery์๋ ์๋น์ค ํค๋ฅผ ์ฌ์ฉํ๋ฉฐ Peer ์ค์ JSON ๊ถํ์ 0600์
๋๋ค. Grafana๋ ๋ณ๋ ๊ณ์ ์
๋๋ค. HTTP๋ ์ํธํ๋์ง ์์ผ๋ฏ๋ก ์ ๋ขฐ ๊ด๋ฆฌ๋ง ๋๋ HTTPS proxy๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ธ์
์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ curl ์์ ๋ API ์ธ์ฆ์ ์ฐธ๊ณ ํ์ญ์์ค.
Legacy ์์ธ: ์ ๊ท ๋ฐฐํฌ๋ผ๋ฉด ์ด ์ ์ฐจ๋ฅผ ๊ฑด๋๋ฐ์ญ์์ค. ์๋ ์ง์ Docker ๋ช ๋ น์ ํ์๊ฐ ์๋ ์ด์ stack์ ํ ๋ฒ ์ ํํ ๋๋ง ์ฌ์ฉํ๋ฉฐ, ์์ ์ผ๋ฐ ์ด์ ์ ์ฐจ๋ helper๋ก ์งํํฉ๋๋ค. helper์ ์์ ๊ถ ๊ฒ์ฌ๋ฅผ ์ฐํํ์ง ์์ต๋๋ค.
helper๋ ๊ธฐ์กด ์๋น์ค๊ฐ ${KPL_STACK_NAME}_{controller,agent,prometheus,grafana}์ด๊ณ io.kpl.application=kp2plab-v3 ์๋น์ค label์ด ์์ ๋๋ง ๊ด๋ฆฌํฉ๋๋ค. ์ด ํ์๊ฐ ์๋ ์ด์ v3 stack์ ๊ฐ์ ์ด๋ฆ์ด์ด๋ ๋ณ๊ฒฝ์ ๊ฑฐ๋ถํฉ๋๋ค.
๋จผ์ ๊ธฐ์กด ์คํ์ ์ข
๋ฃํ๊ณ Peer ์ ๋ฆฌ๋ฅผ ํ์ธํ์ญ์์ค. ๊ธฐ์กด stack ์ด๋ฆ, control Node ID, Peer network ์ด๋ฆ, ์ด๋ฏธ์ง ์ฐธ์กฐ์ ์๊ฒฉ ์ฆ๋ช
์ ๊ทธ๋๋ก ์
ธ์ exportํ ๋ค, ์ต์ stack.swarm.yaml์ ํ ๋ฒ ์ง์ ์ฌ๋ฐฐํฌํฉ๋๋ค. .env.swarm์ Docker๊ฐ ์ง์ ์ฝ์ง ์์ผ๋ฏ๋ก ํ์ผ์ ์ค์ ๊ฐ์ ํ๊ฒฝ์ ๋ช
์ํด์ผ ํฉ๋๋ค.
# ์์ ๊ธฐ์กด ๋ฐฐํฌ ๋ณ์๊ฐ export๋ manager์์ ์คํํฉ๋๋ค.
docker node update --label-add "kpl.${KPL_STACK_NAME}.agent=true" worker-a
docker node update --label-add "kpl.${KPL_STACK_NAME}.agent=true" worker-b
control_address=$(docker node inspect --format '{{.Status.Addr}}' "$KPL_CONTROL_NODE_ID")
case "$control_address" in *:*) control_address=[$control_address] ;; esac
export KPL_CONTROLLER_METRICS_URL="http://$control_address:${KPL_HTTP_PORT:-8080}/metrics"
export KPL_PROMETHEUS_EXTERNAL_URL="http://$control_address:${PROMETHEUS_PORT:-9090}/"
docker stack config --compose-file stack.swarm.yaml >/dev/null
docker stack deploy --with-registry-auth --compose-file stack.swarm.yaml "$KPL_STACK_NAME"
sh scripts/swarm.sh status์ ๋ฐฐ์น๋ ๊ณต์ฉ kpl.agent ๋์ stack๋ณ kpl.<stack>.agent label์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ์กด Peer network๊ฐ kpl-swarm-peers์๋ค๋ฉด ๊ทธ ์ด๋ฆ์ .env.swarm์๋ ์ ์งํ์ญ์์ค. helper ๊ธฐ๋ณธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด์ Peer ์์ ๋ฒ์์ ๋ฌ๋ผ์ง๋๋ค. ์ดํ ๋ฐฐํฌยท์ถ๊ฐยท์ฒ ๊ฑฐ๋ helper๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ ๊ธฐ๋ณธ๊ฐ๊ณผ Agent๋ณ UI ์์ธ๋ Agent ์ฉ๋๊ณผ ๋ฐฐ์น์์ ์ค์ ํฉ๋๋ค. ํด๋น ๋ฌธ์์์ balanced/random/๊ณ ์ ๋ฐฐ์น, ๋น๋ก ํ ๋น, ์์ฑ ํ์ฉ๊ณผ ์ ๋ฆฌ ์ค ์ ์ ๋ฅผ ์ค๋ช ํฉ๋๋ค. ์๋๋ ๋ฐฐํฌ ๋คํธ์ํฌ ์ ์ฝ์ ๋๋ค.
Docker๋ ์ผ๋ฐ์ ์ธ overlay์ /24 ๊ท๋ชจ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ฃผ์์๋ Peer๋ฟ ์๋๋ผ ์๋น์ค taskยทendpoint๋ ํฌํจ๋๋ฏ๋ก ์๋ฒ ์ ร capacity๋ฅผ ์ฃผ์ ์๋งํผ ๊ฝ ์ฑ์ฐ์ง ๋ง์ญ์์ค. ๊ธฐ๋ณธ 20์ ์์์ฉ ์ค์ ์ด๋ฉฐ ์ฑ๋ฅ ๋ณด์ฅ์ด ์๋๋๋ค. v2์ /16์ ๊ทธ๋๋ก ํ๋ํ๊ฑฐ๋ capacity๋ง ์ฌ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์์ฒ Peer ์ง์์ ์ฃผ์ฅํ ์ ์์ต๋๋ค. ํ์ฌ ๊ตฌ์ฑ์ ๋จ์ผ ๊ณตํต Peer overlay๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์๋ฐฑยท์์ฒ Peer์๋ ์ฌ๋ฌ ๋คํธ์ํฌ ๊ฐ ๋๋ฌ์ฑ ์ค๊ณ์ ๋ณ๋ ๋ถํ ์ํ์ด ํ์ํฉ๋๋ค. Swarm overlay ํฌ๊ธฐ ์ ํ
Peer๋ Agent๋ก ํฅํ๋ ๊ฒฝ๋ก์ overlay IPv4๋ง libp2p์ ๊ด๊ณ ํฉ๋๋ค. ๋ค๋ฅธ ์๋ฒ์์ ์ ๊ทผํ ์ ์๋ docker_gwbridge ์ฃผ์๊ฐ bootstrap/Identify์ ์์ด์ง ์๊ฒ ํฉ๋๋ค. tc ์ง์ฐยท์์ค์ Peer namespace์ ์ก์ ์ ์ ์ฉ๋๋ฉฐ, ์ค์ NICยทVXLANยท์๋ฒ ๋ถํ์ ์ถ๊ฐ ์ง์ฐ์ ๊ทธ๋๋ก ์กด์ฌํฉ๋๋ค. ํธ์คํธ ๊ฐ one-way latency ๋น๊ต์๋ ์๊ณ ๋๊ธฐํ๋ ํ์ํฉ๋๋ค.
Prometheus๋ 5์ด๋ง๋ค Controller์ HTTP service-discovery endpoint์ ๋ฑ๋ก๋ Agent metrics URL์ ์์ฒญํฉ๋๋ค. ๊ฐ Agent๋ ์์ ์ Swarm node ์ฃผ์์ ์ค์ ๋ host-mode metrics ํฌํธ๋ฅผ ์๋ฆฌ๋ฏ๋ก ์์ง์ด service VIP๋ฅผ ํต๊ณผํ์ง ์์ต๋๋ค. task๊ฐ Controller์ ๋ฑ๋ก๋ ๋ค์๋ง target์ด ๋ฉ๋๋ค. Grafana๋ KP2PLab ๋์๋ณด๋๋ฅผ ์๋ ๊ตฌ์ฑํฉ๋๋ค. ๋ค์ ํญ๋ชฉ์ ํจ๊ป ํ์ธํ์ญ์์ค.
-
up{job="kpl-agent"}๋์ ์์ ์ค์ Agent task ์ - Controller์
kpl_agent_active_nodes,kpl_agent_capacity,kpl_agent_up - Agent์
kpl_local_cleanup_pending,kpl_local_telemetry_queue_events - ์คํ์ ์ค์ ready/started ์๊ฐ, ์คํจ ์ ๋ฐ ์๋ฒ๋ณ CPUยท๋ฉ๋ชจ๋ฆฌยท๋คํธ์ํฌ ์ฌ์ฉ๋
Go process ์งํ๋ ControllerยทAgent ์์ฒด๋ง ๋ํ๋ด๋ฉฐ Peer ์ ์ฒด์ ์์ ์ฌ์ฉ๋์ด ์๋๋๋ค. Agent Status์ Grafana์ KPL CPUยท๋ฉ๋ชจ๋ฆฌ ์งํ๋ Agent ์ปจํ ์ด๋์ ์์ Peer๋ฅผ ํฉ์ฐํ๋ฉฐ ๊ธฐ์กด ํ๋ก์ธ์ค ๋จ๋ ์งํ๋ ์ ์งํฉ๋๋ค. ์์งยท๋ด๋ณด๋ด๊ธฐ ์ค์ ์ KPL ๋ฆฌ์์ค ์ธก์ ์ ์ฐธ๊ณ ํ์ญ์์ค. ์ ์ฒด ๋ ธ๋ ์ํ ๋ณด๊ณ ยทController ์ ์ฅ/์ง๊ณยท์ค์ HTTP ์์ง, Docker CLI์ ์์ฑ/์ญ์ ๋น์ฉ๋ ํ์ฅ ํ๊ณ์ ๋๋ค. ์ข ๋ฃ๋ ๋ ธ๋ ๊ธฐ๋ก๊ณผ ์คํ๋ณ Prometheus series๊ฐ ์ ์ง๋๋ฏ๋ก ๊ธด churn ์คํ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ง ์ง์ฐ์ ํจ๊ป ์ธก์ ํด์ผ ํฉ๋๋ค.
์ด stack์ host mode๋ก control ๋
ธ๋์ 8080ยท9090ยท3000๊ณผ ์ ํ๋ ๋ชจ๋ Agent ๋
ธ๋์ KPL_AGENT_METRICS_PORT(๊ธฐ๋ณธ 9091)๋ฅผ ๊ฒ์ํฉ๋๋ค. Agent metrics ํฌํธ๋ ๋ชจ๋ ๋์ ๋
ธ๋์์ ๋น์ด ์์ด์ผ ํ๋ฉฐ ๊ฐ์ ๋
ธ๋๋ฅผ ๊ณต์ ํ๋ ๋ณ๋ stack์๋ ์๋ก ๋ค๋ฅธ ํฌํธ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ํ KPL_HTTP_PORT, PROMETHEUS_PORT, GRAFANA_PORT ๋ฐ Swarm TCP ํฌํธ 2377ยท7946๊ณผ ๋ฌ๋ผ์ผ ํ๋ฉฐ config helper์ ๋ฐฐํฌ ์ฌ์ ๊ฒ์ฌ๊ฐ ์ด๋ฌํ ์ถฉ๋์ ๊ฑฐ๋ถํฉ๋๋ค. control ๋
ธ๋์, ์ง์ ๋ธ๋ผ์ฐ์ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ ์ด์์์ ์ ๋ขฐ ๊ด๋ฆฌ๋ง์์ ์ด ํฌํธ๋ฅผ ํ์ฉํ์ญ์์ค. metrics endpoint๋ ์ฝ๊ธฐ ์ ์ฉ์ด์ง๋ง ์ธ์ฆ๋์ง ์์ผ๋ฏ๋ก ์ ๋ขฐํ์ง ์๋ ์ถ๋ฐ์ง๋ ์ฐจ๋จํด์ผ ํฉ๋๋ค. Agent control API 8090๊ณผ Peer ํฌํธ๋ ๋ด๋ถ์ ์ ์งํ๋ฉฐ ๊ฒ์ํ์ง ์์ต๋๋ค. control ๋
ธ๋ ํฌํธ๋ ๊ด๋ฆฌ๋ง ๋ฐฉํ๋ฒฝ์ด๋ ์ธ์ฆ reverse proxy๋ก ์ ๊ทผ์ ์ ํํ์ญ์์ค. ๋์๋ณด๋ ์กฐํยท๋ณ๊ฒฝ์ ๋ก๊ทธ์ธ์ผ๋ก ๋ณดํธํ๋ฉฐ ๋ชจ๋ํฐ๋ง endpoint๋ ๊ณต๊ฐ๋ก ์ ์งํฉ๋๋ค. Grafana ์ต๋ช
์ ์์ ์ด stack์์ ๋นํ์ฑํํ์ต๋๋ค. Swarm host mode ๊ฒ์
๋ชจ๋ํฐ๋ง ์ค์ ์ Swarm configs๋ก ์ ๋ฌํ๋ฏ๋ก ๋ชจ๋ ์๋ฒ์ ์ ์ฅ์๋ฅผ ๋ณต์ฌํ ํ์๊ฐ ์์ต๋๋ค. Swarm config๋ immutable์ด๋ฏ๋ก ์ค์ ํ์ผ ๋ณ๊ฒฝ ์ stack.swarm.yaml์ config key์ ํด๋น ์ฐธ์กฐ๋ฅผ ํจ๊ป ๋ฒ์ ๋ช
์ผ๋ก ๋ฐ๊พธ์ด ์ config๋ฅผ ๋ฐฐํฌํ์ญ์์ค. ๋ฐ์ดํฐ volume์ ๊ฐ์ control Node ID์์ ์ ์ง๋ฉ๋๋ค.
Agent update/rollback์ stop-first์
๋๋ค. start-first๋ก ๋ฐ๊พธ๋ฉด ๊ฐ์ ์๋ฒยทAgent ID์ ๋ task๊ฐ ๋์์ ์คํ๋์ด ์ด์ Peer ์ ๋ฆฌ์ ์ถฉ๋ํ ์ ์์ต๋๋ค. Agent ๊ต์ฒด ์ ๋ด๋น Peer๊ฐ ์ข
๋ฃ๋๋ฏ๋ก ์งํ ์ค์ธ ์คํ์ ๋ฌด์ค๋จ ์
๊ทธ๋ ์ด๋๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์๋ฒ๋ฅผ ์ถ๊ฐํด๋ ์ด๋ฏธ ์คํ ์ค์ธ Peer๋ฅผ ์ฎ๊ธฐ์ง ์์ผ๋ฉฐ, ์ดํ join๋ถํฐ ์ ์ฉ๋์ ์ฌ์ฉํฉ๋๋ค.
๋ ธ๋ drain์ Swarm ์๋น์ค task์ ์ ์ฉ๋ฉ๋๋ค. v3 Peer๋ standalone ์ปจํ ์ด๋์ด๋ฏ๋ก Swarm์ด ์ง์ ์ด์ ํ์ง ์์ต๋๋ค. ์ ์ Agent ์ข ๋ฃ์์ Peer๋ฅผ ์ ๋ฆฌํ๊ณ , ๋น์ ์ ์ข ๋ฃ ํ์๋ ๋์ผ Agent IDยทPeer network name์ผ๋ก ๊ฐ์ ๋ ธ๋์์ ์ฌ์์ํ ๋ ์์กด ์ปจํ ์ด๋๋ฅผ ํ์ํฉ๋๋ค. ๋ ธ๋ ์ฌ๊ฐ์ , stack/service ์ด๋ฆ ๋ณ๊ฒฝ ๋๋ ๋คํธ์ํฌ ์ด๋ฆ ๋ณ๊ฒฝ ์ ์ด์ ์์ ๋ฒ์์ ์์กด Peer๋ ํด๋น ์๋ฒ์์ label์ ํ์ธํด ๋ณ๋๋ก ์ ๋ฆฌํด์ผ ํฉ๋๋ค. ์ ์ฒด ํธ์คํธ ์ ์งยท๋คํธ์ํฌ ๋จ์ ์ ๋ค๋ฅธ ์๋ฒ์ Peer ์ฌ์์ฑ์ผ๋ก ์จ๊ธฐ์ง ์์ต๋๋ค.
Controller๋ ๋จ์ผ ์ธ์คํด์ค์ด๋ฉฐ ๊ณต์ DB/leader election์ ๊ตฌํํ์ง ์์์ต๋๋ค. replicas: 1์ ์ ์งํ์ญ์์ค. control ๋
ธ๋ ์ฅ์ ์ ์๋์ผ๋ก ๋น ๋ก์ปฌ volume์ ์ฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํ์ง ์์ผ๋ฉฐ, ๋ฐฑ์
๋ณต์๊ณผ ์ Node ID ์ง์ ์ด ํ์ํฉ๋๋ค. Controller๋ ์ค์๊ฐ ์คํ ์ํยทcounter๋ฅผ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ํ๊ฑฐ๋ ์คํ ์ค ์คํ์ ์๋ ์ฌ๊ฐํ์ง ์์ต๋๋ค. ๋ณด์กด๋ ํ์ผ์ ์ฌ์์ ํ์๋ ๋์๋ณด๋์ Saved results์ ๊ฒฐ๊ณผ ๋ค์ด๋ก๋ API์์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด์ ์ ์คํ ์ค์ด์๋ ๊ธฐ๋ก์ interrupted๋ก ํ์ํ์ง๋ง Peer ์ ๋ฆฌ๋ฅผ ํ์ธํ ์ํ๋ ์๋๋๋ค.
Controller crash๋ง์ผ๋ก Agent์ Peer๊ฐ ์ข
๋ฃ๋์ง๋ ์์ต๋๋ค. ์ ์ Controller ์ข
๋ฃ๋ ํ์ฑ run์ ์ทจ์ํ ๋ค ๋ฑ๋ก๋ Agent์ ๋จ์ Peer ์ ๊ฑฐ๋ฅผ ์์ฒญํ๋ฉฐ, stop-all์ ์๋ตํ ์๋ฃ๋ ๋จ์ผ run์ Peer๋ ํฌํจํฉ๋๋ค. ๊ณํ๋ ์
๋ฐ์ดํธ ์ ์๋ ํ์ฑ run์ ์๋ฃํ๊ฑฐ๋ ์ทจ์ํ๊ณ ์ด ์ ๋ฆฌ๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ญ์์ค. Agent์ ์ฐ๊ฒฐํ ์ ์๊ฑฐ๋ ์ ๋ฆฌ๊ฐ ์คํจํ๋ฉด ์ข
๋ฃ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๋ฏ๋ก ํด๋น ํธ์คํธ์ ์์กด ์ปจํ
์ด๋๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
์ ์ฒด ์ฒ ๊ฑฐ์ ๋น์ ์ ์๋น์ค ๋ณต๊ตฌ์๋ sh scripts/swarm.sh remove๋ฅผ ์ฌ์ฉํ์ญ์์ค. ControllerยทAgent ์ ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์๋น์ค ์ ์๋ฅผ ์ญ์ ํฉ๋๋ค. ์ค์ ์ปจํ
์ด๋ ์ข
๋ฃ๋ Docker๊ฐ ์ค์ ๋ ์ข
๋ฃ ์ ์์ ๋ฐ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. ๋ช
๋ น ์ฑ๊ณต์ Manager์ stack ์๋น์ค๊ฐ ๋จ์ง ์์๋ค๋ ๋ป์ด๋ฉฐ, offline ํธ์คํธ์ ๋ชจ๋ ์ปจํ
์ด๋๊ฐ ์ข
๋ฃ๋์๋ค๋ ๋ป์ ์๋๋๋ค. Agent ๋น์ ์ ์ข
๋ฃ ํ standalone Peer๊ฐ ๋จ์ ์ ์์ผ๋ฏ๋ก ํด๋น ํธ์คํธ๋ฅผ ์ ๊ฒํ๊ฑฐ๋ ๊ฐ์ ์์ ๋ฒ์๋ก ์ฌ์์ํ์ฌ ํ์ํ์ญ์์ค. ๊ณํ๋ ์ข
๋ฃ๋ผ๋ฉด ์ฒ ๊ฑฐ ์ ์ ์คํ์ ์๋ฃยท์ทจ์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ด๋ก๋ํ์ญ์์ค.
SIGTERM์ ๋ฐ์ผ๋ฉด Controller๋ ์ ์คํ ์๋ฝ์ ์ค๋จํ๊ณ HTTP ์ฐ๊ฒฐ, ์คํ job, Peer ์ ๋ฆฌ์ ์ต์ข
์ํ ์ ์ฅ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๊ธฐ๋ณธ jobShutdownTimeout: 3m์ job ์ข
๋ฃ์ Peer ์ ๋ฆฌ์ ๊ฐ๊ฐ ์ ์ฉ๋๋ฏ๋ก stack์ Controller ์ข
๋ฃ ์ ์๋ฅผ 10m๋ก ์ค์ ํฉ๋๋ค. Agent์๋ ์ต๋ 175์ด์ Peer ์ ๋ฆฌ, HTTP handler ์ข
๋ฃ์ ์ ํ๋ telemetry drain์ ํฌํจํ๋ 4m๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋๋ฆฌ์ค์ jobShutdownTimeout์ ๋๋ฆฌ๋ฉด Controller ์ ์๋ ํจ๊ป ๋๋ฆฌ๊ณ ์ธ๋ถ ์๋น์ค ๊ด๋ฆฌ์๊ฐ ์ด ์๊ฐ์ ๋จ์ถํ์ง ์๋๋ก ํ์ญ์์ค.
Controller๋ ์คํ ์ทจ์ ํ์๋ Agent ์ด๋ฒคํธ ์์ ์ ์ ์งํ๊ณ , ์๋ฃ๋ ์คํ์ด ๋จ๊ธด Peer์ Agent ์ ์ก ํ๊น์ง ์ ๋ฆฌํ ๋ค HTTP๋ฅผ ๋ซ์ต๋๋ค. ์ด ์ต์ข
Agent ์ ๋ฆฌยท์ ์ก์๋ ์ต๋ 190์ด๋ฅผ ์ถ๊ฐ๋ก ํ์ฉํฉ๋๋ค. ์ ์ฒด remove๋ ์ด ๊ณผ์ ์ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค. KPL_CONTROLLER_STOP_TIMEOUT์ ๊ธฐ์กด ์ค์ ํธํ์ ์ํด ์ฝ์ง๋ง ๋ ์ด์ ์ฌ์ฉํ์ง ์์ต๋๋ค. KPL_AGENT_STOP_TIMEOUT์ remove-node์ ์ ๋ฆฌ ํ์ธ๊ณผ ๊ฐ Docker ์กฐํ์ ์ ์ฉํ๋ฉฐ, KPL_DOCKER_TIMEOUT์ ์ญ์ ๋ช
๋ น๊ณผ ์๋น์ค ์ ๊ฑฐ ํ์ธ ๋๊ธฐ์ ์ ์ฉํฉ๋๋ค.
Controller ๊ธฐ๋ก, Prometheus ์๊ณ์ด๊ณผ Grafana ๋ฐ์ดํฐ๋ KPL_CONTROL_NODE_ID์ ๋ณ๋ named volume์ ์ ์ฅ๋ฉ๋๋ค. ์ผ๋ฐ ์๋น์ค ์ฌ์์ฑ๊ณผ swarm.sh remove๋ ์ด volume์ ๋ณด์กดํฉ๋๋ค. ์๋๋ฆฌ์ค, ์คํ ๊ธฐ๋ก๊ณผ ์ญ์ ํ์์ ์ ์งํ๋ ค๋ฉด Controller ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ ์ ์ฒด๋ฅผ ๋ณด์กดํ๊ณ Prometheus ์ด๋ ฅ๊ณผ Grafana ์ค์ ์ด ํ์ํ๋ฉด ๋ณ๋๋ก ๋ฐฑ์
ํ์ญ์์ค. Volume ์ญ์ ๋ ์ผ๋ฐ ์ข
๋ฃ ์ ์ฐจ์ ํฌํจ๋์ง ์์ต๋๋ค. ์ฌ์ฉ์ ์ง์ ์ ์ฅ์๋ bind mount๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํ
์ด๋ UID/GID์ ์ฐ๊ธฐ ๊ถํ์ ํ์ธํ๊ณ ๊ฒฝ๋ก๊ฐ Docker daemon ํธ์คํธ์์ ํด์๋จ์ ๊ณ ๋ คํ์ญ์์ค.
Controller ๋ฐ์ดํฐ volume์ ๋ก์ปฌ์ ์ ์งํ๊ณ ํ์ํ๋ฉด /var/lib/kpl/data/runs ํ์ ๋๋ ํฐ๋ฆฌ๋ง NAS์ ๋ง์ดํธํ์ญ์์ค. ์คํ ์ค ๊ธฐ๋ก๊ณผ ์์ ๋ณด๊ด ์ธ๋ฑ์ค๋ /var/lib/kpl/data/current-run์ ์ฌ์ฉํฉ๋๋ค. NAS ๋ณต์ฌยท๊ฒ์ฆยท์ญ์ ๋ ์คํ ์ ์ฅ๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ ๋ฏธ๋ณด๊ด ํ์ผ์ ์๋น์ค ์ฌ์์ฑ ํ์๋ ์ ์งํฉ๋๋ค. ๋ ๋๋ ํฐ๋ฆฌ์ ์จ๊น ์ ์ฅยท์ญ์ manifest๋ฅผ ํจ๊ป ๋ฐฑ์
ํด์ผ ํฉ๋๋ค. ๊ธฐ์กด NAS ๊ฒฐ๊ณผ๋ ์ฌ์์ ํ ๋น๋๊ธฐ ์ธ๋ฑ์ค๋ก ๋ฐ๊ฒฌํฉ๋๋ค. ๊ฒฐ๊ณผ ์ ์ฅ์๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
KPL_RUN_MIN_FREE_BYTES ๊ธฐ๋ณธ๊ฐ์ 1073741824(1 GiB)์ด๋ฉฐ swarm.sh configure๋ก ๋ณด์กดํฉ๋๋ค. NAS ์ฉ๋์ด ์๋ Run ์์ ์ ๊ณผ ์คํ ์ค ๋ก์ปฌ ์ฌ์ ๊ณต๊ฐ์ ๊ฒ์ฌํฉ๋๋ค. ๊ธฐ์ค๋ณด๋ค ์์ผ๋ฉด ๋ฐฐ์น๋ Run ์ฌ์ด์์ ๋๊ธฐํ๊ณ , ํ์ฑ Run์์ ๊ณต๊ฐ ๋ถ์กฑยท๊ธฐ๋ก ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ฉด ์คํจ ์ฒ๋ฆฌ์ ์ ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. 0์ ์ฌ์ ๊ณต๊ฐ ๊ฒ์ฌ๋ง ๋๋ฉฐ ์ฐ๊ธฐ ์ค๋ฅ๋ ๊ณ์ ์คํจ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ค์ ๋ณ๊ฒฝ์ ์ ์ ๋ฐฐํฌ ์ ์ฐจ๋ก ๋ฐ์ํ์ญ์์ค. NAS ์ฅ์ ๋์ ๋ฏธ๋ณด๊ด ๊ฒฐ๊ณผ๊ฐ ๋ก์ปฌ์ ์์ผ ์ ์์ผ๋ฏ๋ก ๊ฐ์ฅ ํฐ Run๊ณผ ์์ ๋๊ธฐ ๋ถ๋์ ์์ฉํ๋๋ก ๋ก์ปฌ volume์ ์ค๋นํด์ผ ํฉ๋๋ค.
Controller ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ์ ์ธ ์ ์์ผ๋ฉด ์์์ด ์คํจํฉ๋๋ค. ์คํ ๋ฉํ๋ฐ์ดํฐ๋ ์์ ํ์ผ์ ์ด ๋ค ๊ฐ์ ํ์ผ์์คํ ์์ renameํ์ฌ ๋ถ๋ถ JSON ์ฝ๊ธฐ๋ฅผ ๋ฐฉ์งํ๋ฉฐ ์ด๋ฒคํธ batch๋ append ํ ๋์คํฌ ๋๊ธฐํ๋ฅผ ๋ง์ณ์ผ ์์ ํ์ธํฉ๋๋ค. ์ ์ ์์ฝยทAgent ์์ ์ ๋ณดยท์ ์ถ ํค๋ ํ์ ๊ฒฝ๊ณ์์ ๋๊ธฐํํ๊ณ Run ์ข ๋ฃ ์ ์๋ณธ ๋ก๊ทธ๋ ๋๊ธฐํํฉ๋๋ค. ๊ฐ๋ณ ์งํ ์ํ ๊ฐฑ์ ์ ๋ชจ๋ ๊ฐ์ ๋๊ธฐํํ์ง๋ ์์ผ๋ฏ๋ก ๊ฐ์์ค๋ฌ์ด ์ ์ ์ฅ์ ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ interrupted๋ก ๋จ์ ์ ์์ต๋๋ค. ์ฌ์์ ํ ๋ณด์กด ๊ฒฐ๊ณผ์ ์ ๊ทผํ ์ ์์ง๋ง ์ค์๊ฐ ์คํ๊ณผ counter๋ ๋ณต์ํ์ง ์์ต๋๋ค.
๊ฐ Agent๋ ๋
ธ๋ ๋ก์ปฌ <stack>_agent-data volume์ /var/lib/kpl/agent์ ๋ง์ดํธํฉ๋๋ค. telemetry-spool/์ ์๋ฝํ์ง๋ง Controller ์์ ํ์ธ ์ ์ธ ์ด๋ฒคํธ๋ฅผ ๋ณด์กดํ์ฌ ์๋น์ค ๊ต์ฒดยท์ฌ์์ ๋ค ์ฌ์ ์กํฉ๋๋ค. ๋ก์ปฌ ์๊ตฌ ์ ์ฅ์์ ๋๊ณ ๋
ธ๋ ๋ฐฑ์
์ ํฌํจํ๋ฉฐ task ๊ต์ฒด ์ ์ ์งํ์ญ์์ค. ๋ค๋ฅธ Swarm ๋
ธ๋๋ก ๋ณต์ ํ๋ volume์ ์๋๋๋ค. ๊ธฐ์กด ๋ง์ดํธ ์๋ Agent์ ๋ฉ๋ชจ๋ฆฌ ํ๋ ์๊ธ ๋ณด์กด๋์ง ์์ผ๋ฏ๋ก ์
๋ฐ์ดํธ ๋ ์ ์ ์ข
๋ฃ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ก์ปฌ ๋์คํฌ ๋๊ธฐํ๋ Agent์ Controller ์์ชฝ์ I/O ๋น์ฉ์ ์ถ๊ฐํฉ๋๋ค. telemetry ์๋์ ๋ง๋ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๊ณ ์ฐ๊ธฐ ์ง์ฐ์ ํ์ธํ์ญ์์ค. ์คํ์ ์ํฅ์ด ์ ํ ์์์ ๋ณด์ฅํ์ง ์์ผ๋ฉฐ NAS๋ ๊ณ์ runs/์๋ง ์ฌ์ฉํฉ๋๋ค. Agent ์๋ฝ ์ Peer ๊ฐ์ ์ข
๋ฃ, volume ์ ์ค, ๋๊ธฐํ๋ฅผ ์งํค์ง ์๋ ์ ์ฅ์์์์ ์ ์ค์ ๋ณต๊ตฌํ์ง ๋ชปํฉ๋๋ค. ๊ฒฐ๊ณผ์ ๋ฌด๊ฒฐ์ฑ ์ํ์ ๋ถ์ ๊ทผ๊ฑฐ๋ฅผ ํจ๊ป ํ์ธํ์ญ์์ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ๋ถ์์ ์ํยท์๋ฃ JSONยท๋น๊ต ์์ฝ๋ Controller ๋ณผ๋ฅจ์ ๋ณด์กด๋ฉ๋๋ค. ์๋ฃ ๊ฒฐ๊ณผ๋ ์ฌ์์ ํ ์ฌ์ฌ์ฉํ๋ฉฐ ๋ฏธ์๋ฃยท์ทจ์ ์์ ์ ๋ค์ ์ ์ํฉ๋๋ค. ์ผ๋ฐ ์คํ ZIP์๋ ์ด ๋ถ์ ์บ์๊ฐ ํฌํจ๋์ง ์์ผ๋ฏ๋ก ๋ณด์กด ๊ฒฝ๊ณ๋ ๋ถ์ ํ์ผ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
ํ์ฌ Go ํ๊ท suite์ ์
ธ ํ๊ท ๋ค ๊ฐ์ธ test-swarm-agent.sh, test-check-swarm.sh, test-swarm-config.sh, test-swarm.sh๋ make test-linux ๋๋ docker build --target test -t kpl-v3:test .๋ก ์คํํฉ๋๋ค. ์
ธ ํ
์คํธ๋ Docker ์๋ต์ ๋ชจ์ฌํ์ฌ ๋น์ ์ taskยทoffline ๋
ธ๋ยท์ด๋ ฅ ๋ถ์ฌ์๋ ์ง์ ์ฒ ๊ฑฐ, ๋ค๋ฅธ stack ๋ณ๊ฒฝ ๋ฐฉ์ง, ์ญ์ ยท์กฐํ ์ค๋ฅ, ๋ถ๋ถ ์ ๋ฆฌ ํ ์ฌ์๋, remove-node ์ ์ ์ข
๋ฃ ํ์ธ๊ณผ ์ค์ ํ์ผ ์ฒ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๋ฉฐ ์ค์ ํด๋ฌ์คํฐ๋ฅผ ๋ฐฐํฌํ์ง ์์ต๋๋ค. ๋ณ๋ ๋ธ๋ผ์ฐ์ ํ
์คํธ์ ๋ช
์์ ์ผ๋ก ํ์ฑํํ๋ ์ปค๋ ํ
์คํธ๋ ๊ฐ๋ฐ ๊ฒ์ฌ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์ด์ ๊ฒ์ฆ ๊ธฐ๋ก์ ๋ณ๋ Docker 29.7.2 daemon์์ SIGTERM ์ข
๋ฃ์ฉ ControllerยทAgent ํ
์คํธ ์๋น์ค๋ก remove-node, add-node, ์ ์ฒด remove๋ฅผ ์คํํ๋ค๊ณ ๋ณด๊ณ ํฉ๋๋ค. ์ ์ ์ข
๋ฃ์ shutdown / PID 0 / exit 0, ์ฌ๋ฐฐ์น ํ ์ task, ์ต์ข
stack ์๋น์ค 0๊ฐ, ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ ์ธํ ๋ ์ํฅ ์๋ ์คํ ์ค task ID ์ ์ง๊ฐ ๊ธฐ๋ก๋์ด ์์ต๋๋ค. ์๋ณธ ์คํ ์ฐ์ถ๋ฌผ์ kpl-v3 ์์ค ์ ์ฅ์์ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ํ์ฌ checkout์ด๋ ์ ์ฒด registryยทPeer ์คํ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ณผ๊ฑฐ ๋ณด๊ณ ์
๋๋ค. ์ด ๊ธฐ๋ก์ ํ์ฌ remove์ ์๋น์ค ์ง์ ์ญ์ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ ์ ๋ณด๊ณ ์
๋๋ค. ํ์ฌ ๊ตฌํ์ scripts/swarm.sh์ mock ํ
์คํธ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
Swarm ์ฌ์ ๊ฒ์ฌ๋ sh scripts/swarm.sh check๋ฅผ ์ฌ์ฉํ์ญ์์ค. helper๊ฐ ์ค์ ์ ๋ถ๋ฌ์ ๋ฐฐํฌ ๊ฒ์ฌ๋ฅผ ์คํํฉ๋๋ค. ์ค์ ยท๋ฐฐ์นยทoverlay๋ฅผ ๊ฒ์ฌํ์ง๋ง ๋ชจ๋ Agent ๋
ธ๋์ ์ปค๋ ๊ท์น์ ์ค์นํ๊ฑฐ๋ ํธ์คํธ ๊ฐ ํธ๋ํฝ์ ๊ฒ์ฆํ์ง๋ ์์ต๋๋ค. ์ค์ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ํํ Swarm ๋
ธ๋์์ ์๋๋ฆฌ์ค๋ฅผ ์คํํด ๊ฒ์ฆํ์ญ์์ค. ๋ฐฐํฌ ์ฌ์ ๊ฒ์ฌ๋ ํจํค์ง ํ
์คํธ๋ง์ผ๋ก ๋ถ์ฐ smoke ์คํยท์ค์ cross-host VXLAN ํต์ ยท์ฒ๋ฆฌ๋ ์ธก์ ์ ๋์ฒดํ ์๋ ์์ต๋๋ค.
์ต์ ๋ ์๋ฒ์์ ๋ถ์ฐ ์คํ ์์ ๋ฅผ ์คํํด ์๋ก ๋ค๋ฅธ Agent์ ready Peer๊ฐ ์๊ธฐ๋์ง, ๊ด๊ณ ์ฃผ์๊ฐ Peer overlay์ ์ํ๋์ง, publish/deliver๊ฐ ์์ชฝ ์๋ฒ์์ ๋ฐ์ํ๋์ง ํ์ธํ์ญ์์ค. ์์ ๋ boot 1๊ฐ์ worker 5๊ฐ๋ฅผ ์์ฑํ๋ฏ๋ก ์ด capacity 6 ์ด์์ด ํ์ํฉ๋๋ค. ๊ทธ ๋ค ๋ชฉํ Peer ์๋ฅผ ๋จ๊ณ์ ์ผ๋ก ์ฌ๋ ค ready ์ง์ฐยท์คํจ์จยท๋ถ๋ฐฐยท์์ ์ฌ์ฉ๋์ ๊ธฐ๋กํ์ญ์์ค. ๋คํธ์ํฌ ๋จ์ /Agent ์ฌ์์ ์ stale ์ ์ธยท์์กด ์ปจํ ์ด๋ ์ ๋ฆฌ์ Prometheus ๋์ ๊ต์ฒด๋ ํ์ธํด์ผ ํฉ๋๋ค.
์๋ ๊ณผ๊ฑฐ ๊ธฐ๋ก์ manager ๊ด๋ฆฌ CLI scripts/swarm.sh ์ถ๊ฐ ์ ์ด๋ฉฐ ์๋ณธ ์คํ ์์นด์ด๋ธ๋ kpl-v3 ์์ค ์ ์ฅ์์ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ํ์ฌ checkout์ด๋ CLI์ init/deploy/add-node/remove-node/remove ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ค์ ํด๋ฌ์คํฐ์์ ๊ฒ์ฆํ ๊ฒฐ๊ณผ๋ ์๋๋๋ค.
๊ฒ์ฆ ํ๊ฒฝ์ ๋์ผ WSL2 Linux ์ปค๋ ์์ ๊ฒฉ๋ฆฌ๋ Docker ๋ฐ๋ชฌ ๋ ๊ฐ์ ๋๋ค. Docker 29.7.2์ managerยทworker์ ์ค์ attachable overlay๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค. ๊ธฐ์กด ํธ์คํธ์ Swarm ์ํ๋ ๋ณ๊ฒฝํ์ง ์์์ต๋๋ค. ์ด๋ ๋ ๋ฐ๋ชฌ ์ฌ์ด์ ๋ฐฐ์นยทVXLANยท์๋น์ค ํ์ ๊ฒ์ฆ์ด๋ฉฐ, ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ ์๋ฒ์ NICยทMTUยท์ฅ์ ยท๋๊ท๋ชจ ์ฒ๋ฆฌ๋ ๊ฒ์ฆ์ ์๋๋๋ค. ์ด๋ฏธ์ง๋ ์์ชฝ ๋ฐ๋ชฌ์ ๊ฐ์ ๋ก์ปฌ ์ด๋ฏธ์ง๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฌํ์ผ๋ฉฐ registry ์ธ์ฆยทpull ๊ฒฝ๋ก๋ ๋ณ๋ ๊ฒ์ฆ ๋์์ ๋๋ค.
| ํญ๋ชฉ | ๊ฒฐ๊ณผ |
|---|---|
| Linux ์ฝ๋ ๊ฒ์ฆ | ์ ์ฒด Go ํ ์คํธ ํต๊ณผ. ๋ง์ง๋ง ์๊ฐ ์์ฐ ์์ ํ Agent ํจํค์ง์ Swarm shell ํ๊ท ํ ์คํธ ์ฌ๊ฒ์ฆ ํต๊ณผ |
| Swarm ๋ฐฐํฌ | global Agent 2๊ฐ, Controller 1๊ฐ, Prometheus 1๊ฐ, Grafana 1๊ฐ ์ ์ ์คํ. ์ค์ manager์์ ์ฌ์ ๊ฒ์ฌ ํต๊ณผ |
| ๋ ธ๋ ๋ถ๋ฐฐ | capacity 4์ธ Agent ๋ ๊ฐ์ Peer 6๊ฐ๋ฅผ 3๊ฐ์ฉ ๋ฐฐ์น, ๋ชจ๋ ready ๋ฐ ์ํธ ์ฐ๊ฒฐ ํ์ธ |
| Peer ์ฃผ์ | ๋ชจ๋ ๊ด๊ณ ์ฃผ์๊ฐ Peer overlay IPv4์ TCP 20000 ํ ๊ฐ. gateway bridge ์ฃผ์ ๋ฏธํฌํจ |
| ๋คํธ์ํฌยท๋ฐํ | worker 25ms ์ง์ฐยท2ms jitterยท0.5% ์์ค, 4096-byte payload 50ํ ๋ฐํ, ์์ 300ํ(Agent๋ณ 150ํ) |
| ๋ชจ๋ํฐ๋ง | Prometheus์ Agent ๋์ 2๊ฐ์ Controllerยท์๊ธฐ ์์ง ๋ชจ๋ UP. Grafana ๋์๋ณด๋ UID kpl-experiments์ ๋ฐ์ดํฐ์์ค API ์ฐ๊ฒฐ OK |
| task ๊ต์ฒด | ์ด๋ฏธ์ง ์ ๋ฐ์ดํธ ํ Node ๊ธฐ๋ฐ Agent ID ์ ์ง, task IP ๋ณ๊ฒฝ ๋ฐ Prometheus ๋์ ๊ฐฑ์ ํ์ธ |
| ์ ์ ์ข ๋ฃ |
run-20260904T040249Z-34d32bbb9559adbba6519a558c6cc107 completed, ์์ชฝ activeNodes 0, ์ค์ ์์กด Peer ์ปจํ
์ด๋ ๊ฐ๊ฐ 0๊ฐ |
์ ๊ณผ๊ฑฐ ๋ฐํยท์์ ์๋ ๋์ kpl_events_total ๊ธฐ์ค์ด๋ฉฐ ๋น์ snapshot ์์ฝ์ ์ต๊ทผ ์ด๋ฒคํธ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ํ์ฌ v3 ์คํ ์์ฝ์ ์ด ๋ฒํผ์ ๋
๋ฆฝ์ ์ผ๋ก ๋์ ํ๋ฉฐ ์คํ ์งํ์ ์ ์๋ฅผ ๋ฐ๋ฆ
๋๋ค. ์ฒซ ๋ถํ ์คํ์์ ์์ฑยท์์ ์ ์ฒด์ ๊ณต์ 45์ด ์ ํ์ด Peer๋ฅผ ์ข
๋ฃ์ํค๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํด ๋จ๊ณ๋ณ ์์ฐ์ผ๋ก ์์ ํ ๋ค ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ต๋๋ค.