[Docker][swarm][ARM][自分用メモ] 今さらながらDocker swarmに入門してみた。

AIX、UNIX、LinuxContainer
docker-whales
Screenshot_2019-02-08_e_maji

はじめに


何周遅れなのかわかりませんが、自宅の環境をDocker swarmに置き換えることにしました。

今さら手を出すのであれば、Kubernetes (k8s) の方が良いのでしょうが、とりあえず管理方法などを学ぶ点でこちらにしました。
※イラストが雑くてすみません。

公式ドキュメントは以下にあり、基本的にこのドキュメントを読むだけで大丈夫だと思います。

うちでは以下のようになりました。

確認環境:

$ docker version
Client:
	Version: 18.09.1
	API version: 1.39
	Go version: go1.10.6
	Git commit: 4c52b90
	Built: Wed Jan 9 19:42:36 2019
	OS/Arch: linux/arm64
	Experimental: false
Server: Docker Engine - Community
	Engine:
		Version: 18.09.1
		API version: 1.39 (minimum version 1.12)
		Go version: go1.10.6
		Git commit: 4c52b90
		Built: Wed Jan 9 19:03:16 2019
		OS/Arch: linux/arm64
		Experimental: false
$ docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
vjh474a30s6upsit2fz5s5zts * dns02 Ready Active Leader 18.09.1
s3m37xdq15bt2rnoudzdkousg k8s-work1 Ready Active 18.09.1
q33fsja53dni46wnf77lyr6so k8s-work2 Ready Active 18.09.1
eruk3dzsej4q2kw0628yudqah k8s-work3 Ready Active 18.09.1
k1zchrvf4ie6l6s86uhxduwho k8s-work4 Ready Active 18.09.1

host名にk8sが含まれているのは、以前にk8sを構築しようとしたときの名残です。
以前から自宅で検証しているDNS関連をこちらに移しています。
workerについては、自宅で遊んでいる以下のArm SBCをpoolしている形になります。これにManagerはRock64を足して5台のリソースプールで稼働しています。

実際の構成

  • Libre Computer Board ROC-RK3328-CC (Renegade)
  • Banana Pi M64
  • Odroid C2
  • Libre Computer Board ALL-H3-CC (Tritium)
home_docker_swarm
簡単な構成図

サービス自体も以前から検証で作成しているcontainerをそのまま乗せ換える形です。

$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
8vaswda0y1mr portainer-agent_agent global 5/5 portainer/agent:latest
kas37rlk74pd stack_bind_bind replicated 5/5 kometchtech/bind:latest *:9853->53/tcp, *:9853->53/udp
ktu1d70jzjzq stack_coredns_coredns replicated 5/5 kometchtech/coredns:latest *:9653->53/tcp, *:9653->53/udp
ku2llhfutyig stack_dnscrypt-proxy_dnscrypt-proxy replicated 5/5 kometchtech/dnscrypt-proxy:latest *:9953->53/tcp, *:9953->53/udp
7fkspkdrvw5n stack_dnsdist_dnsdist global 5/5 kometchtech/dnsdist:latest *:53->53/tcp, *:53->53/udp
yjr8d3coc4fq stack_knot_knot global 5/5 kometchtech/knot:latest *:10153->53/tcp, *:10153->53/udp
uggls3ilw9z1 stack_kresd_kresd replicated 0/1 kometchtech/kresd:latest *:9553->53/tcp, *:9553->53/udp
t0fdwzv6ykur stack_nsd_nsd global 5/5 kometchtech/nsd:latest *:10053->53/tcp, *:10053->53/udp
102i7mr9rraa stack_pdnsrec_pdns_rec replicated 5/5 kometchtech/pdnsrec:latest *:9453->53/tcp, *:9453->53/udp
mzs0tw5dj0an stack_stubby_stubby replicated 5/5 kometchtech/stubby:latest *:8053->53/tcp, *:8053->53/udp
gd4irpvfz6l0 stack_unbound_unbound replicated 5/5 kometchtech/unbound:latest *:9753->53/tcp, *:9753->53/udp

これらを別のストレージサーバから、設定ディレクトリだけをNFSマウントする形で共有するようにしています。
最初、docker volume createすれば、スケールしたcontainerすべてからマウントできるのか勘違いしていました・・・(よくよく考えたら、docker volume createされるのは、そのコマンドを発行したホストだけで有効になりますもんね・・・)。
この辺りは、docker networkのoverlayと混同していました。

また、以前と同じようにDocker networkでIPv6を有効にする方法も、少し悩んでいました。
こちらもDocker stack deployするとき、対象になるDocker compose fileのバージョンが3以降なんですね・・・ Docker composeでIPv6の設定が有効になるのは、Docker composeの2系までなので、そのままではデプロイ出来ないという・・・
こちらも予めIPv6を有効にしたoverlayネットワークを作成したうえで、docker stack deployするcontainerを、そのネットワークに所属させる、という手段で解決しました。

今はManagerノードが1台だけなので、現在、secondaryで独立しているサーバをManagerノードに追加して、負荷分散をさせるかどうかを検討中です。

あとは、業務で関係するHPC向けのスケジューラなどをdockerを使って構築できないか、を検討中です。

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました