소개
이 랩에서는 docker swarm leave 명령어를 사용하여 Docker Swarm 내 노드를 관리하는 방법을 배우게 됩니다. 먼저 Docker Swarm 을 초기화하고 작업자 노드를 Swarm 에 가입시키는 것으로 시작합니다. 그 후, 작업자 노드를 Swarm 에서 제거하는 연습을 할 것입니다. 마지막으로, 강제 옵션 사용의 필요성을 포함하여 관리자 노드를 제거하는 과정을 살펴볼 것입니다.
이 랩에서는 docker swarm leave 명령어를 사용하여 Docker Swarm 내 노드를 관리하는 방법을 배우게 됩니다. 먼저 Docker Swarm 을 초기화하고 작업자 노드를 Swarm 에 가입시키는 것으로 시작합니다. 그 후, 작업자 노드를 Swarm 에서 제거하는 연습을 할 것입니다. 마지막으로, 강제 옵션 사용의 필요성을 포함하여 관리자 노드를 제거하는 과정을 살펴볼 것입니다.
이 단계에서는 Docker Swarm 을 초기화하는 방법을 배우게 됩니다. Docker Swarm 은 Swarm 모드로 실행되는 Docker 호스트의 클러스터입니다. Swarm 모드를 사용하면 Docker 노드 클러스터를 단일 가상 시스템으로 관리할 수 있습니다.
Swarm 을 초기화하기 전에, LabEx VM 에 설치된 현재 Docker 버전을 확인해 보겠습니다.
docker version
다음과 유사한 출력이 표시되어 Docker 버전이 20.10.21 임을 나타냅니다.
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.9
Git commit: baedd2a
Built: Tue Oct 25 17:58:10 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.9
Git commit: 305620d
Built: Tue Oct 25 17:56:51 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd567ea6c98e7b5d78a23676a0a79559d930d5
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Docker Swarm 을 초기화하려면 docker swarm init 명령어를 사용합니다. 이 명령어는 현재 Docker 호스트를 Swarm 관리자로 만듭니다.
docker swarm init
명령어를 실행하면 Swarm 이 초기화되었음을 나타내는 출력과 다른 노드를 작업자로 가입시키는 명령어가 표시됩니다. 출력은 다음과 유사합니다.
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
출력은 현재 노드가 이제 Swarm 관리자임을 보여줍니다. 또한 이 Swarm 에 작업자 노드를 가입시키는 명령어를 제공합니다. 다음 단계에서 이 명령어를 사용합니다.
docker info 명령어를 사용하여 Swarm 상태를 확인할 수 있습니다.
docker info
출력에서 "Swarm" 섹션을 찾습니다. Swarm 이 "active"로 표시되어야 합니다.
...
Swarm: active
NodeID: xxxxxxxxxxxx
Is Manager: true
ClusterID: xxxxxxxxxxxx
Managers: 1
Nodes: 1
Orchestration:
TaskHistoryRetentionLimit: 5
Raft:
HeartbeatInterval: 100ms
ElectionTimeout: 3s
SnapshotInterval: 500ms
Dispatcher:
HeartbeatPeriod: 5s
CA configuration:
Expiry duration: 3 months
Force rotate at: 7 weeks
Root Rotation: false
Local Node State: active
Error: none
Remote Manager:
ID: xxxxxxxxxxxx
Addr: 172.17.0.2:2377
Addr: 172.17.0.2:2377
Node Address: 172.17.0.2
Manager Status:
Cluster Address: 172.17.0.2:2377
Leader: Yes
Reachability: Reachable
...
이것은 Docker Swarm 이 이 노드에서 성공적으로 초기화되었음을 확인합니다.
이전 단계에서 Docker Swarm 을 초기화했으며, 출력은 작업자 노드를 가입시키는 명령어를 제공했습니다. 실제 시나리오에서는 Swarm 에 작업자로 추가하려는 별도의 머신에서 이 명령어를 실행합니다. 그러나 단일 LabEx VM 을 사용하고 있으므로, 동일한 머신에서 join 명령어를 사용하여 작업자 노드 가입을 시뮬레이션합니다.
먼저, 작업자 노드에 대한 join 명령어를 검색해 보겠습니다. 관리자 노드 (현재 VM) 에서 docker swarm join-token worker를 실행하여 join 토큰과 명령어를 얻을 수 있습니다.
docker swarm join-token worker
출력은 다음과 유사합니다.
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
출력에서 전체 docker swarm join --token ... 명령어를 복사합니다. 이 명령어에는 고유한 토큰과 Swarm 관리자의 IP 주소 및 포트가 포함되어 있습니다.
이제 복사한 명령어를 실행하여 현재 노드를 작업자로 Swarm 에 가입시킵니다.
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
토큰과 IP 주소를 docker swarm join-token worker 명령어에서 얻은 값으로 바꿉니다.
노드가 작업자로 Swarm 에 가입했음을 나타내는 출력이 표시됩니다.
This node joined a swarm as a worker.
노드가 Swarm 에 가입했는지 확인하려면 관리자 관점에서 Swarm 의 노드를 나열할 수 있습니다. 단일 VM 이 관리자 및 작업자 역할을 모두 수행하므로 docker node ls 명령어를 사용할 수 있습니다.
docker node ls
출력은 Swarm 의 노드를 표시합니다. 동일한 노드 ID 에 대해 두 개의 항목이 표시되어야 합니다. 하나는 상태가 "Ready"이고 역할이 "Manager"이고, 다른 하나는 상태가 "Ready"이고 역할이 "Worker"입니다.
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx * labex-vm Ready Active Leader 20.10.21
xxxxxxxxxxxx labex-vm Ready Active 20.10.21
이는 노드가 Swarm 에 작업자로 성공적으로 가입했음을 확인합니다.
이전 단계에서 노드를 작업자로 Swarm 에 성공적으로 가입시켰습니다. 이제 노드를 Swarm 에서 제거하는 방법을 배우겠습니다. 작업자 노드에서 Swarm 을 탈퇴하려면 docker swarm leave 명령어를 사용합니다.
현재 노드가 작업자로서 Swarm 을 탈퇴하도록 다음 명령어를 실행합니다.
docker swarm leave
노드가 Swarm 을 탈퇴했음을 나타내는 출력이 표시됩니다.
Node left the swarm.
이제 노드가 Swarm 을 탈퇴했는지 확인해 보겠습니다. docker node ls 명령어를 다시 사용할 수 있습니다. 그러나 노드가 Swarm 을 탈퇴했으므로, 이 노드에서 docker node ls를 실행하면 더 이상 Swarm 의 일부가 아니기 때문에 오류가 발생합니다.
docker node ls
다음과 유사한 오류 메시지가 표시됩니다.
Error: This node is not a swarm manager. Use "docker swarm join" to join the swarm and try again.
이 오류는 노드가 더 이상 Swarm 의 일부가 아님을 확인합니다.
더 자세히 확인하기 위해 docker info를 사용하여 Swarm 상태를 확인해 보겠습니다.
docker info
출력의 "Swarm" 섹션은 이제 Swarm 이 "inactive"임을 나타내야 합니다.
...
Swarm: inactive
...
이는 노드가 Docker Swarm 을 성공적으로 탈퇴했음을 확인합니다.
이전 단계에서 작업자 노드를 Swarm 에서 성공적으로 제거했습니다. 이제 동일한 docker swarm leave 명령어를 추가 옵션 없이 사용하여 관리자 노드를 제거하려고 할 때 어떤 일이 발생하는지 살펴보겠습니다.
다음 명령어를 실행하여 관리자 노드에서 Swarm 을 탈퇴하려고 시도합니다.
docker swarm leave
다음과 유사한 오류 메시지를 받게 됩니다.
Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Use the --force flag to force the node to leave the swarm. Note that this may disrupt the swarm, so use this option with caution.
이 오류 메시지는 명시적으로 강제하지 않고는 관리자 노드에서 Swarm 을 탈퇴할 수 없음을 나타냅니다. 이는 특히 다중 관리자 설정에서 Swarm 의 우발적인 중단을 방지하기 위한 안전 메커니즘입니다.
노드가 여전히 관리자이고 Swarm 의 일부인지 확인하려면 docker info 명령어를 사용할 수 있습니다.
docker info
"Swarm" 섹션은 여전히 "active" 및 "Is Manager: true"를 표시해야 합니다.
...
Swarm: active
NodeID: xxxxxxxxxxxx
Is Manager: true
...
이는 force 플래그 없이 Swarm 을 탈퇴하려는 시도가 실패했으며 노드가 Swarm 관리자로 남아 있음을 확인합니다.
이전 단계에서 관리자 노드는 --force 플래그를 사용하지 않고는 Swarm 을 탈퇴할 수 없다는 것을 배웠습니다. 이는 Swarm 의 우발적인 중단을 방지하기 위한 것입니다. 이 단계에서는 --force 플래그를 사용하여 관리자 노드가 Swarm 을 탈퇴하도록 하겠습니다.
중요 참고 사항: 관리자 노드가 Swarm 을 강제로 탈퇴하도록 하면, 특히 마지막 관리자인 경우 Swarm 이 중단될 수 있습니다. 프로덕션 환경에서는 이 명령어를 주의해서 사용하십시오.
다음 명령어를 실행하여 관리자 노드가 Swarm 을 강제로 탈퇴하도록 합니다.
docker swarm leave --force
노드가 Swarm 을 탈퇴했음을 나타내는 출력이 표시됩니다.
Node left the swarm.
이제 노드가 Swarm 을 성공적으로 탈퇴했는지 확인해 보겠습니다. docker info 명령어를 사용할 수 있습니다.
docker info
출력의 "Swarm" 섹션은 이제 Swarm 이 "inactive"임을 나타내야 합니다.
...
Swarm: inactive
...
이는 --force 플래그를 사용하여 관리자 노드가 Docker Swarm 을 성공적으로 탈퇴했음을 확인합니다. Swarm 은 더 이상 이 노드에 존재하지 않습니다.
이 Lab 에서는 docker swarm init 명령어를 사용하여 Docker Swarm 을 초기화하는 방법을 배웠습니다. 이 명령어는 현재 노드를 관리자로 지정하고 다른 노드가 참여할 수 있는 명령어를 제공합니다. 그런 다음 새로 생성된 Swarm 에 작업자 노드를 참여시키는 연습을 했습니다.
이어서 docker swarm leave 명령어를 사용하여 Swarm 에서 노드를 제거하는 방법을 살펴보았습니다. 먼저 작업자 노드가 Swarm 을 탈퇴할 수 있는 방법을 시연했습니다. 그런 다음 force 옵션 없이 동일한 명령어를 관리자 노드에서 사용하려고 시도했으며, 기본적으로 허용되지 않음을 확인했습니다. 마지막으로 --force 플래그를 사용하여 관리자 노드가 Swarm 을 성공적으로 탈퇴하도록 했습니다.