Docker Swarm

コンテナオーケストラツールにKubernetesとDockerSwarmがありますが、OpenFaaSを構築しようとしてDockerSwarmを使った記事をみつけたきっかけで試してみました。

参考) https://kakakakakku.hatenablog.com/entry/2019/01/31/082322

ところが、現在のバージョンではこのやりかたではOpenFaaSを構築できなかったため、これについては次の機会にして、DockerSwarmについてのみ試しました。

参考)
https://zenn.dev/takaha4k/articles/598e7cc4c17bef
https://medium.com/@dibaekhanal101/getting-started-with-docker-swarm-2b4522cd712f

環境は、Docker Playgroundを使用します。(Dockerのアカウント連携で可)

https://labs.play-with-docker.com/

やりたいことは、マスターノード(マネージャ)とワーカーノードがただ接続できる、ということだけでなく、関連している動きを見たかったため、マスターで起動したサービス(docker service create alpine ping www.google.com)がワーカーノードでも確認でき、それを削除すると、また生成される、ということを確かめました。

・マスターノードの作成

・ワーカーノードの作成

(このコンソールがコピペできないためtokenの指定が工夫されています。”EDIT”ボタンからファイルの編集ができるので、ファイルにリダイレクトする方法もありますが、どちらにしろ面倒です。ssh接続は権限なし)

・ノードの増加を確認

・マスターノードでサービスの作成
最初は1プロセスで動かし、次に4プロセスに更新します。

このときプロセスが2つ確認できます。(1,4)

・ワーカーノードのプロセス確認

2プロセスあることが確認できます。(2,3)
(2)のコンテナを削除してもまた起動されたことを確認できます。(すぐにリカバーされる)
※コンテナの削除には(-f)か必要

最後はおまけで、nginxのサービスが他のノードからアクセスできることを確認しました。

Docker Swarmのメモでした。

参考)
https://tech.quartetcom.co.jp/2023/04/07/docker-swarm/

メモ)

$ docker system info

Client:
Version: 24.0.2
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.10.5
Path: /usr/local/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.18.1
Path: /usr/local/libexec/docker/cli-plugins/docker-compose

Server:
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 1
Server Version: 24.0.2
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: active
NodeID: kxofol5uzfv6hbywxf5j95bsi
Is Manager: true
ClusterID: ku94f4z745hjgdor94jdneho3
Managers: 1
Nodes: 2
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 10
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Force Rotate: 0
Autolock Managers: false
Root Rotation In Progress: false
Node Address: 192.168.0.18
Manager Addresses:
192.168.0.18:2377
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 1677a17964311325ed1c31e2c0a3589ce6d5c30d
runc version: v1.1.7-0-g860f061
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
Kernel Version: 4.4.0-210-generic
Operating System: Alpine Linux v3.18 (containerized)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.42GiB
Name: node1
ID: af931548-284f-4e7c-8b73-506a3e247e8b
Docker Root Dir: /var/lib/docker
Debug Mode: true
File Descriptors: 53
Goroutines: 190
System Time: 2023-06-13T02:01:20.478092923Z
EventsListeners: 2
Experimental: true
Insecure Registries:
127.0.0.1
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
Access to the remote API is equivalent to root access on the host. Refer
to the ‘Docker daemon attack surface’ section in the documentation for
more information: https://docs.docker.com/go/attack-surface/
WARNING: No swap limit support
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled