| 315 | | |
| 316 | | |
| 317 | | = Swarmの設定 |
| 318 | | |
| 319 | | 詳しくは[ここ https://docs.docker.com/swarm/install-manual/]に書いてある。構成は、次のような構成を考えておく。 |
| 320 | | |
| 321 | | {{{ |
| 322 | | swarm consul swarm consul swarm |
| 323 | | manager server join agent join |
| 324 | | +------------------------+ +---------------------+ |
| 325 | | | DockerHost1 | | DockerHost2 | ... |
| 326 | | | 192.168.100.1 | | 192.168.100.2 | |
| 327 | | | 管理ノード&Dockerホスト| | Dockerホスト | |
| 328 | | +------------------------+ +---------------------+ |
| 329 | | }}} |
| 330 | | |
| 331 | | DockerHost1は管理ノード兼Dockerホスト、DockerHost2はDockerホストとする。管理ノードをDockerホストとして利用しないのであれば、DockerHost1上のswarm joinは不要。 |
| 332 | | |
| 333 | | |
| 334 | | == 事前準備 |
| 335 | | |
| 336 | | 最初にクラスタのトークンを作成する。 |
| 337 | | |
| 338 | | {{{ |
| 339 | | # docker pull swarn |
| 340 | | # docker run --rm swarm create |
| 341 | | a8440712cd4709e5edbf701506189c3c |
| 342 | | }}} |
| 343 | | |
| 344 | | 以下、ノードを起動する際には、上記のトークンを利用するので、メモしておく。 |
| 345 | | |
| 346 | | === VMコピー時の注意 |
| 347 | | |
| 348 | | VMをコピーしてDockerホストを複数作成すると正しくクラスタに登録できない。 |
| 349 | | /etc/docker/key.jsonファイルでDockerは自身のIDを識別するようになっている。 |
| 350 | | VMをコピーしてDockerホストを作成した場合、下記のように、キーを削除して |
| 351 | | Dockerを再起動する。 |
| 352 | | |
| 353 | | {{{ |
| 354 | | # rm /etc/docker/key.json |
| 355 | | # service docker restart |
| 356 | | }}} |
| 357 | | |
| 358 | | == 管理ノード(consulサーバの起動) |
| 359 | | |
| 360 | | 次のようなconsule-server.jsonファイルを作成し、consulサーバを起動する。 |
| 361 | | {{{ |
| 362 | | { |
| 363 | | "datacenter": "docker", |
| 364 | | "addresses" : { |
| 365 | | "http": "0.0.0.0" |
| 366 | | }, |
| 367 | | "bind_addr": "192.168.100.1", |
| 368 | | "node_name": "dockerhost1", |
| 369 | | "domain": "consul", |
| 370 | | "server": true, |
| 371 | | "bootstrap_expect": 1, |
| 372 | | "data_dir": "/var/lib/consul" |
| 373 | | } |
| 374 | | }}} |
| 375 | | |
| 376 | | {{{ |
| 377 | | # mkdir -p /var/log/consul |
| 378 | | # consul agent -config-file consul-server.json >> /var/log/consul/consul.log |
| 379 | | }}} |
| 380 | | |
| 381 | | == 各ノードの設定 |
| 382 | | |
| 383 | | === Consulクライアントの設定 |
| 384 | | |
| 385 | | 次のようなconsule-client.jsonファイルを作成し、consulエージェントを起動する。bind_addrには、Dockerホストの各IPを設定する。 |
| 386 | | (consulサーバを起動したノードでは実行しないので注意!)a |
| 387 | | {{{ |
| 388 | | { |
| 389 | | "datacenter": "docker", |
| 390 | | "addresses" : { |
| 391 | | "http": "0.0.0.0" |
| 392 | | }, |
| 393 | | "bind_addr": "192.168.100.2", |
| 394 | | "node_name": "dockerhost2", |
| 395 | | "domain": "consul", |
| 396 | | "retry_join": [ "192.168.100.1"], |
| 397 | | "server": false, |
| 398 | | "data_dir": "/var/lib/consul" |
| 399 | | } |
| 400 | | }}} |
| 401 | | |
| 402 | | {{{ |
| 403 | | # mkdir -p /var/log/consul |
| 404 | | # consul agent -config-file consul-client.json >> /var/log/consul/consul.log |
| 405 | | }}} |
| 406 | | |
| 407 | | /etc/default/dockerに下記の設定を追加しホストの2375ポートを |
| 408 | | コンテナにバインドできるようにする。 |
| 409 | | {{{ |
| 410 | | DOCKER_OPTS="--cluster-store=consul://localhost:8500 --cluster-advertise=192.168.100.1:2376 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" |
| 411 | | }}} |
| 412 | | |
| 413 | | Swarmエージェントを起動する。ホストIDは、ノードのIP。 |
| 414 | | |
| 415 | | {{{ |
| 416 | | # docker run -d swarm join --addr=<ホストIP>:2375 token://<トークンID> |
| 417 | | }}} |
| 418 | | |
| 419 | | 例えば、次のような感じ。 |
| 420 | | |
| 421 | | {{{ |
| 422 | | # docker run -d swarm join --addr=192.168.100.2:2375 token://a8440712cd4709e5edbf701506189c3c |
| 423 | | }}} |
| 424 | | |
| 425 | | == 管理ノード(クラスタマネージャの設定) |
| 426 | | |
| 427 | | 管理ノードで下記のコマンドを実行し、クラスタマネージャを起動する。 |
| 428 | | Dockerホストのどこかのノードでもよい。 |
| 429 | | |
| 430 | | {{{ |
| 431 | | # docker run -d -p 2376:2375 swarm manage token://a8440712cd4709e5edbf701506189c3c |
| 432 | | }}} |
| 433 | | |
| 434 | | == 動作確認 |
| 435 | | |
| 436 | | 起動できたら下記のコマンドでクラスタの動作を確認できる。 |
| 437 | | |
| 438 | | {{{ |
| 439 | | # docker -H tcp://192.168.100.1:2376 info |
| 440 | | Containers: 9 |
| 441 | | Images: 4 |
| 442 | | Role: primary |
| 443 | | Strategy: spread |
| 444 | | Filters: health, port, dependency, affinity, constraint |
| 445 | | Nodes: 2 |
| 446 | | dockerhost1: 192.168.100.1:2375 |
| 447 | | └ Status: Healthy |
| 448 | | └ Containers: 8 |
| 449 | | └ Reserved CPUs: 0 / 1 |
| 450 | | └ Reserved Memory: 0 B / 1.018 GiB |
| 451 | | └ Labels: executiondriver=native-0.2, kernelversion=3.19.0-28-generic, operatingsystem=Ubuntu 14.04.1 LTS, storagedriver=aufs |
| 452 | | dockerhost2: 192.168.100.2:2375 |
| 453 | | └ Status: Healthy |
| 454 | | └ Containers: 1 |
| 455 | | └ Reserved CPUs: 0 / 1 |
| 456 | | └ Reserved Memory: 0 B / 1.018 GiB |
| 457 | | └ Labels: executiondriver=native-0.2, kernelversion=3.19.0-28-generic, operatingsystem=Ubuntu 14.04.1 LTS, storagedriver=aufs |
| 458 | | CPUs: 2 |
| 459 | | Total Memory: 2.037 GiB |
| 460 | | Name: 49a004525d21 |
| 461 | | }}} |