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 | | }}} |