Docker Swarm in LXD
예전에 LXD에서 K8s를 해봤는데 이번에 Swarm을 해봤어요. 그래서 그 메모.
당시의 보도
차리다
먼저 Swarm으로 이동하는 LXD 환경 1개를 만들어 LXD에 삭제 노드를 간단하게 추가할 수 있도록 이미지를 저장합니다.
LXD를 통해 이동하는 swarm 소개 만들기
$ lxc profile create swarm
Profile swarm created
$ wget -O - -q https://raw.githubusercontent.com/ubuntu/microk8s/master/tests/lxc/microk8s-zfs.profile | lxc profile edit swarm
!간단한 시작 용기 적용
$ lxc launch -p default -p swarm ubuntu:20.04 manager
Docker 설치
$ lxc exec manager -- apt update
$ lxc exec manager -- apt install -y docker.io
여기까지만 하고 싶어서 돌려서 저장.
$ lxc stop manager
$ lxc publish manager --alias swarm
그림을 저장하는 데 사용할 간단한 파일에 swarm을 추가합니다
마지막 줄 추가
- swarm
$ lxc image edit swarm
확인$ lxc image show swarm
auto_update: false
properties:
architecture: x86_64
description: Ubuntu 20.04 LTS server (20220308)
os: ubuntu
release: focal
public: false
expires_at: 0001-01-01T00:00:00Z
profiles:
- default
- swarm
swarm 시작
두 개의 워크맨 노드로 관리자 노드를 시작합니다
우선 처음 만든 용기가 멈췄기 때문에 관리자로 작동합니다
$ lxc start manager
$ lxc exec manager docker swarm init
작업 노드 작성 및 참여
우선 워크맨으로 참가하는 영패를 획득합니다
또한 이 정보는 init에서도 표시됩니다
$ lxc exec manager -- docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3u72kjwwe38yxzlpx29km6a7l4gliagus00eb1ivx9jd5ocbhs-d5p7682dtv6998pz26vidhn39 10.129.61.177:2377
워커용 용기 2개 만들기 및 스warm 참가첫번째
$ lxc launch swarm worker1
$ lxc exec worker1 -- docker swarm join --token SWMTKN-1-3u72kjwwe38yxzlpx29km6a7l4gliagus00eb1ivx9jd5ocbhs-d5p7682dtv6998pz26vidhn39 10.129.61.177:2377
보조$ lxc launch swarm worker2
$ lxc exec worker2 -- docker swarm join --token SWMTKN-1-3u72kjwwe38yxzlpx29km6a7l4gliagus00eb1ivx9jd5ocbhs-d5p7682dtv6998pz26vidhn39 10.129.61.177:2377
참가 여부 확인$ lxc exec manager -- docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
pwyisd5zyjgbpkep7isbka9m2 * manager Ready Active Leader 20.10.7
60t0m4m637tcyvg4v8bv6vmmu worker1 Ready Active 20.10.7
lcvgurxwu6lye0ulfl816enbn worker2 Ready Active 20.10.7
서비스 를 이동해 보다
Docker 튜토리얼을 만드는 이 그림을 Swarm으로 실행합니다
git 명령이 필요하므로 Docker 이미지를 추가로 작성합니다.
$ lxc exec manager -- apt install -y git
$ lxc exec manager -- git clone https://github.com/dockersamples/node-bulletin-board
$ lxc exec manager -- docker build --tag bulletinboard:1.0 node-bulletin-board/bulletin-board-app/
$ lxc exec manager -- docker images bulletinboard
REPOSITORY TAG IMAGE ID CREATED SIZE
bulletinboard 1.0 d371c334f1f3 About a minute ago 260MB
swarm으로 이동하는yaml을 제작한다(stack 파일인 것 같다)!
문서에서 발췌하다
$ lxc shell manager
root@manager:~# cat <<EOF > bb.yaml
version: '3.7'
services:
bb-app:
image: bulletinboard:1.0
ports:
- "80:8080"
EOF
root@manager:~# logout
Swarm에 등록$ lxc exec manager -- docker stack deploy -c bb.yaml demo
이렇게 수행해야 하니까 확인$ lxc exec manager -- docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
jrfuvndpk5hs demo_bb-app replicated 1/1 bulletinboard:1.0 *:80->8080/tcp
REPLICAS가 가동된 컨테이너 수로 LXD 컨테이너의 80포트에 접근할 때 Docker 컨테이너에 접근하는 8080포트를 가동한다.다음에 어느 노드에서 운행하는지 확인하세요
$ lxc exec manager -- docker service ps demo_bb-app
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u9dg3koqso2l demo_bb-app.1 bulletinboard:1.0 manager Running Running 2 minutes ago
관리자 노드에서 실행먼저 브라우저에서 LXD 컨테이너의 IP 주소를 확인하기 위해
$ lxc list
+---------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+---------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| manager | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:fe40:5bda (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.177 (eth0) | | | |
+---------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| worker1 | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:feb7:91c3 (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.51 (eth0) | | | |
+---------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| worker2 | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:fe5b:2a16 (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.144 (eth0) | | | |
+---------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
브라우저에서 확인URL을 보면 알 수 있듯이 프로그램은 관리자 노드에서 실행되지만worker2에 접근해도 화면을 확인할 수 있습니다
내부에서는 이런 느낌으로 요청을 하기 때문에 참가한 노드의 어디로 요청을 보내든 행동할 수 있다
flowchart TB HTTPリクエスト([HTTPリクエスト]) HTTPリクエスト --> worker1 & worker2 & manager docker_worker1 & docker_worker2 --> WEBアプリ subgraph manager docker_manager --> WEBアプリ end subgraph worker1 docker_worker1 end subgraph worker2 docker_worker2 end
확대해 봐요.
このWEBアプリを3つにスケールアップしてみます
$ lxc exec manager -- docker service scale demo_bb-app=3
$ lxc exec manager -- docker service ps demo_bb-app -f DESIRED-STATE=running
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u9dg3koqso2l demo_bb-app.1 bulletinboard:1.0 manager Running Running 48 minutes ago
a9700b189luq demo_bb-app.2 bulletinboard:1.0 manager Running Running 5 minutes ago
ox4gaxcogczm demo_bb-app.3 bulletinboard:1.0 manager Running Running 5 minutes ago
다 관리자로 움직이다니.이것은 관리자가 로컬로 만든 그림을 사용하기 때문에worker에서 해당하는 그림을 찾을 수 없습니다
다음 지령으로 워크맨에서 작동할 때 실패했습니다
$ lxc exec manager -- docker service ps demo_bb-app -f DESIRED-STATE=shutdown
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
w7ljnpj4cl4d demo_bb-app.2 bulletinboard:1.0 worker1 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
t74j7r244u0b \_ demo_bb-app.2 bulletinboard:1.0 worker1 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
s5zs7vsmaeht \_ demo_bb-app.2 bulletinboard:1.0 worker1 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
1cn73nqm7ith \_ demo_bb-app.2 bulletinboard:1.0 worker2 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
ygc1u61rv6zn demo_bb-app.3 bulletinboard:1.0 worker2 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
ez3qde6jqu87 \_ demo_bb-app.3 bulletinboard:1.0 worker2 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
oikzsxrtx1dy \_ demo_bb-app.3 bulletinboard:1.0 worker2 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
o2k69ehwhfoe \_ demo_bb-app.3 bulletinboard:1.0 worker1 Shutdown Rejected 7 minutes ago "No such image: bulletinboard:…"
No such image: bulletinboard:…
.Doker Hub 등 위의 이미지를 사용하면 문제가 없지만 로컬로 구축된 이미지를 사용하면 각node에 같은 이미지를 추가하거나 어느 노드가 접근할 수 있는 창고에 인상을 두어야 합니다. 이번에는 각worker 1,worker 2에서 관리자의 이미지를 복제하여 대응해 봅시다.
$ lxc exec manager -- docker save bulletinboard | lxc exec worker1 -- docker load
Loaded image: bulletinboard:1.0
$ lxc exec manager -- docker save bulletinboard | lxc exec worker2 -- docker load
Loaded image: bulletinboard:1.0
$ lxc exec worker1 -- docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bulletinboard 1.0 d371c334f1f3 About an hour ago 260MB
node current-slim e71ac23fcd7e 17 hours ago 241MB
$ lxc exec worker2 -- docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bulletinboard 1.0 d371c334f1f3 About an hour ago 260MB
node current-slim e71ac23fcd7e 17 hours ago 241MB
그럼 비율을 다시 한번 바꿔볼게요.먼저 비율을 1로 설정한 후에 원상태로 회복하다
$ lxc exec manager -- docker service scale demo_bb-app=1
$ lxc exec manager -- docker service ps demo_bb-app -f DESIRED-STATE=Running
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u9dg3koqso2l demo_bb-app.1 bulletinboard:1.0 manager Running Running about an hour ago
다시 시도 3$ lxc exec manager -- docker service scale demo_bb-app=3
$ lxc exec manager -- docker service ps demo_bb-app -f DESIRED-STATE=Running
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u9dg3koqso2l demo_bb-app.1 bulletinboard:1.0 manager Running Running about an hour ago
m3mytsmtchi0 demo_bb-app.2 bulletinboard:1.0 worker1 Running Running 16 seconds ago
367ghy7ujl7y demo_bb-app.3 bulletinboard:1.0 worker2 Running Running 16 seconds ago
이번에는 각 노드에 정상적으로 분배되었다그럼 제가 일지를 전달해 드릴게요.
$ lxc exec manager -- docker service logs -n0 -f demo_bb-app
이 상태에서 브라우저에서 화면을 다시 열 때demo_bb-app.2.m3mytsmtchi0@worker1 | GET / 304 0.403 ms - -
demo_bb-app.1.u9dg3koqso2l@manager | GET /node_modules/vue/dist/vue.min.js 304 0.549 ms - -
demo_bb-app.3.367ghy7ujl7y@worker2 | GET /site.css 304 0.601 ms - -
demo_bb-app.3.367ghy7ujl7y@worker2 | GET /app.js 304 0.693 ms - -
demo_bb-app.2.m3mytsmtchi0@worker1 | GET /node_modules/bootstrap/dist/css/bootstrap.min.css 304 0.734 ms - -
demo_bb-app.2.m3mytsmtchi0@worker1 | GET /node_modules/vue-resource/dist/vue-resource.min.js 304 2.830 ms - -
demo_bb-app.2.m3mytsmtchi0@worker1 | GET /api/events 304 0.639 ms - -
demo_bb-app.2.m3mytsmtchi0@worker1 | GET /fonts/geomanist/hinted-Geomanist-Book.woff2 304 0.375 ms - -
demo_bb-app.2.m3mytsmtchi0@worker1 | GET /null 404 0.514 ms - 143
demo_bb-app.3.367ghy7ujl7y@worker2 | GET /node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 304 0.524 ms - -
이러한 상황에서 요청은 각 노드에 분산되어 집행된다는 것을 알 수 있다관리자를 추가하여 고장에 대한 내구성을 확보하다
문서 기반
최대 N-manager 클러스터 수(N-1)/2manage 장애
따라서 고장 저항성을 확보하기 위해 최소한 3개의 관리자 노드가 필요하기 때문에 2개의 관리자 노드를 추가하여
$ lxc launch swarm manager2
$ lxc launch swarm manager3
관리자용 영패로 스마트 가입$ lxc exec manager -- docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3u72kjwwe38yxzlpx29km6a7l4gliagus00eb1ivx9jd5ocbhs-7y5i7tpuv3qpqkzx2qpomp1e0 10.129.61.177:2377
$ lxc exec manager2 -- docker swarm join --token SWMTKN-1-3u72kjwwe38yxzlpx29km6a7l4gliagus00eb1ivx9jd5ocbhs-7y5i7tpuv3qpqkzx2qpomp1e0 10.129.61.177:2377
This node joined a swarm as a manager.
$ lxc exec manager3 -- docker swarm join --token SWMTKN-1-3u72kjwwe38yxzlpx29km6a7l4gliagus00eb1ivx9jd5ocbhs-7y5i7tpuv3qpqkzx2qpomp1e0 10.129.61.177:2377
This node joined a swarm as a manager.
확인$ lxc exec manager -- docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
pwyisd5zyjgbpkep7isbka9m2 * manager Ready Active Leader 20.10.7
h9vyiz86y4cvpl2zkzln1a64u manager2 Ready Active Reachable 20.10.7
zlsym5cfjavdt2gs5qhqmejnq manager3 Ready Active Reachable 20.10.7
60t0m4m637tcyvg4v8bv6vmmu worker1 Ready Active 20.10.7
lcvgurxwu6lye0ulfl816enbn worker2 Ready Active 20.10.7
어렵기 때문에 어플리케이션도 모두 구성$ lxc exec manager -- docker save bulletinboard | lxc exec manager2 -- docker load
$ lxc exec manager -- docker save bulletinboard | lxc exec manager3 -- docker load
$ lxc exec manager -- docker service scale demo_bb-app=5
$ lxc exec manager -- docker service ps demo_bb-app -f DESIRED-STATE=running
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
u9dg3koqso2l demo_bb-app.1 bulletinboard:1.0 manager Running Running 2 hours ago
m3mytsmtchi0 demo_bb-app.2 bulletinboard:1.0 worker1 Running Running about an hour ago
367ghy7ujl7y demo_bb-app.3 bulletinboard:1.0 worker2 Running Running about an hour ago
09kkoprfbpz9 demo_bb-app.4 bulletinboard:1.0 manager2 Running Running 12 seconds ago
zhrcudp3895f demo_bb-app.5 bulletinboard:1.0 manager3 Running Running 13 seconds ago
이 상태에서 Leader의 관리자로 중지$ lxc stop manager
리더 3이 Leader로 선택됨$ lxc exec manager2 -- docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
pwyisd5zyjgbpkep7isbka9m2 manager Unknown Active Unreachable 20.10.7
h9vyiz86y4cvpl2zkzln1a64u * manager2 Ready Active Reachable 20.10.7
zlsym5cfjavdt2gs5qhqmejnq manager3 Ready Active Leader 20.10.7
60t0m4m637tcyvg4v8bv6vmmu worker1 Ready Active 20.10.7
lcvgurxwu6lye0ulfl816enbn worker2 Ready Active 20.10.7
이 상태에서 서비스를 확인한 후 관리자에서 일하는 서비스가worker1에 계승되어 정상적으로 축소됨$ lxc exec manager2 -- docker service ps demo_bb-app -f DESIRED-STATE=running
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
hg8qarxfsjoc demo_bb-app.1 bulletinboard:1.0 worker1 Running Running 2 minutes ago
m3mytsmtchi0 demo_bb-app.2 bulletinboard:1.0 worker1 Running Running 2 minutes ago
367ghy7ujl7y demo_bb-app.3 bulletinboard:1.0 worker2 Running Running 2 minutes ago
09kkoprfbpz9 demo_bb-app.4 bulletinboard:1.0 manager2 Running Running 2 minutes ago
zhrcudp3895f demo_bb-app.5 bulletinboard:1.0 manager3 Running Running 2 minutes ago
관리자를 재부팅하면 Swarm 클러스터에 다시 삽입되는지 확인$ lxc start manager
$ lxc exec manager2 -- docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
pwyisd5zyjgbpkep7isbka9m2 manager Ready Active Reachable 20.10.7
h9vyiz86y4cvpl2zkzln1a64u * manager2 Ready Active Reachable 20.10.7
zlsym5cfjavdt2gs5qhqmejnq manager3 Ready Active Leader 20.10.7
60t0m4m637tcyvg4v8bv6vmmu worker1 Ready Active 20.10.7
lcvgurxwu6lye0ulfl816enbn worker2 Ready Active 20.10.7
서비스 업데이트
microbot이라는 운행 중 호스트의 확인과 업데이트 확인을 위한 컨테이너가 있으니 확인해 보세요
!
처음부터 이걸 사용하려고 했는데 원래였다면 실행 중인 호스트 이름이 화면에 뜨는 WEB 화면이 열렸을 텐데 호스트 이름이 안 뜨더라고요.
swarm에서 실행할 때
hostname -f
지령이 정상적으로 작동하지 못하는 것은 원인이지만 왜 이렇게 변했는지 아직 잘 모르겠어요.먼저 기존 서비스 삭제
$ lxc exec manager2 -- docker service rm demo_bb-app
디자인 마이크로봇$ lxc exec manager2 -- \
docker service create --replicas 5 \
--name microbot \
--publish 80:80 \
dontrebootme/microbot:v1
화면 확인v1에서 v2로의 이미지 업데이트
$ lxc exec manager -- docker service update --image dontrebootme/microbot:v2 microbot
브라우저를 계속 업데이트할 경우 화면 전환프로세스 확인
$ lxc exec manager -- docker service ps microbot
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
av0cpmgaq70s microbot.1 dontrebootme/microbot:v2 manager Running Running 2 minutes ago
w3r6fuob4y4u \_ microbot.1 dontrebootme/microbot:v1 manager Shutdown Shutdown 2 minutes ago
jolnqtaiy7mo microbot.2 dontrebootme/microbot:v2 manager3 Running Running 3 minutes ago
qmlwwytr2c9j \_ microbot.2 dontrebootme/microbot:v1 manager3 Shutdown Shutdown 3 minutes ago
wm91vtjq45ny microbot.3 dontrebootme/microbot:v2 worker1 Running Running 2 minutes ago
x7nb1cjxbgfc \_ microbot.3 dontrebootme/microbot:v1 worker1 Shutdown Shutdown 2 minutes ago
51rojcmq1iy6 microbot.4 dontrebootme/microbot:v2 manager2 Running Running 3 minutes ago
ucfa641q8ywg \_ microbot.4 dontrebootme/microbot:v1 manager2 Shutdown Shutdown 3 minutes ago
p4u64ktzti2z microbot.5 dontrebootme/microbot:v2 worker2 Running Running 2 minutes ago
vxqeaxswe3fv \_ microbot.5 dontrebootme/microbot:v1 worker2 Shutdown Shutdown 2 minutes ago
각 노드에서 v1이 정지되고 v2가 시작되는 것을 발견모든 프로그램이 시작되기 전에 오래된 프로그램이 계속 표시되기 때문에 모든 프로그램이 정상적으로 시작되기 전에 새 프로그램으로 전환하지 않습니다
신구가 교체되기 전에는 한순간에 접근할 수 없으니 갱신할 때 주의하는 것이 좋다
--update-parallelism
0에서 지정한 매개 변수로 여러 개를 동시에 업데이트할 수 있습니다.HAProxy로 LB를 해보도록 하겠습니다.
현재 적절히 선택한 노드의 IP에 대한 요청을 보내서 동작을 확인하고 있지만, 실제로는 앞부분에서 이 LB를 정리했습니다. 그 사람이 요청을 처리하는 경우가 많기 때문에 HAProxy를 놓아보려고 합니다.
한 마디로 하면 HAProxy 동작을 만드는 LXD 용기는 Docker를 사용하기 때문에 Swarm용 이미지를 사용합니다
$ lxc launch swarm HAProxy
현재 LXD 컨테이너 일람 확인$ lxc list
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| HAProxy | RUNNING | 172.17.0.1 (docker0) | fd42:6f2d:73e1:6009:216:3eff:fec8:5939 (eth0) | CONTAINER | 0 |
| | | 10.129.61.154 (eth0) | | | |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| manager | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:fe40:5bda (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.177 (eth0) | | | |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| manager2 | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:fe61:77cb (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.55 (eth0) | | | |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| manager3 | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:fe3c:ad7 (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.242 (eth0) | | | |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| worker1 | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:feb7:91c3 (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.51 (eth0) | | | |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| worker2 | RUNNING | 172.18.0.1 (docker_gwbridge) | fd42:6f2d:73e1:6009:216:3eff:fe5b:2a16 (eth0) | CONTAINER | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 10.129.61.144 (eth0) | | | |
+----------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
각 컨테이너의 eth0 기반 IP 생성 설정 파일cat <<EOF > /tmp/haproxy.cfg
frontend web_proxy
default_backend test
bind *:80
backend test
option redispatch
retries 3
server manager 10.129.61.177:80 weight 1
server manager2 10.129.61.55:80 weight 1
server manager3 10.129.61.242:80 weight 1
server worker1 10.129.61.51:80 weight 1
server worker2 10.129.61.144:80 weight 1
EOF
HAProxy 컨테이너에 복사$ lxc file push /tmp/haproxy.cfg HAProxy/haproxy.cfg
HAProxy 시작$ lxc exec HAProxy -- docker run -d -p 80:80 -v /haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name web haproxy
부팅 확인$ lxc exec HAProxy -- docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87abe54b9256 haproxy "docker-entrypoint.s…" 27 seconds ago Up 19 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
브라우저에서 HAProxy에 액세스하면 Swarm에 로그인한 서비스의 이미지가 표시됩니다.관리자, 워크맨 1, 워크맨 2 노드를 정지해 보십시오
$ lxc stop manager worker1 worker2
$ lxc exec manager2 -- docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
pwyisd5zyjgbpkep7isbka9m2 manager Down Active Unreachable 20.10.7
h9vyiz86y4cvpl2zkzln1a64u * manager2 Ready Active Reachable 20.10.7
zlsym5cfjavdt2gs5qhqmejnq manager3 Ready Active Leader 20.10.7
60t0m4m637tcyvg4v8bv6vmmu worker1 Down Active 20.10.7
lcvgurxwu6lye0ulfl816enbn worker2 Down Active 20.10.7
노드의 절반 이상이 정지 상태이며 HAProxy를 경유하면 정상 노드에 연결됩니다.총결산
시간이 길어졌으니 우선 여기까지만 하자
아직 만지고 싶은 게 많으니까 추기할지 부기할지 나중에 생각해 보자
K8s 때보다 쉬울 것 같아서 docker 지령에 어느 정도 익숙해지면 연장선상에서 사용할 수 있다
고물 PC를 생산해서 모여서 Docker 클러스터 조립처럼 막 굴면 이걸로 할까 해요
나중에 추가하면 콘피그와 시크릿이 편할 것 같아서 독립된 ARON이라도 스warm을 효과적으로 사용할 수 있을 것 같아요.
P.S.
사회에서 반도체 부족이 오랫동안 일어났다
애플리케이션 쪽이라서 자기랑 상관없는 말인 줄 알았는데 실제 피해를 줄 줄은 몰랐어요.
구식 현장이기 때문에 가동된 서버가 많을 텐데, 이미 보수적인 낡은 것들은 새것으로 바꿔야 한다
따라서 서버를 교체할 때 확보한 예산에도 추가 애플리케이션 기능에 대한 예산이 포함돼 있다.
거기 반도체 부족 직접 충격 서버 납기 미정😇
결국
휘말린 앱의 대응도 무한 연기!🤣
그럼 이 상태는 언제까지 이어질까...
Reference
이 문제에 관하여(Docker Swarm in LXD), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tantan_tanuki/articles/dc81b6a8f44bef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)