atosatto.docker-swarm
Ansible ロール: Docker
RHEL/CentOS および Debian/Ubuntu サーバーに Docker をセットアップします。
このロールは Docker Engine の「スウォームモード」(https://docs.docker.com/engine/swarm/) をサポートしており、Docker ノードのクラスターを作成します。
必要条件
Ansible 2.7 以上がインストールされていること。
このロールは Ansible の json_filter
を使用しており、jmespath
が Ansible マシンにインストールされている必要があります。
必要な jmespath
のバージョンの詳細については、requirements.txt
ファイルを参照してください。
依存関係
なし。
ロール変数
利用可能な変数は以下にリストされています(デフォルト値を参照):(ファイル [defaults/main.yml](defaults/main.yml)
を参照してください)
docker_repo: "{{ docker_repo_ce_stable }}"
Docker パッケージを提供するリポジトリです。
追加のリポジトリは [vars/main.yml](vars/main.yml)
に定義されています。エッジ、テスト、ナイトリーニュースのリポジトリが含まれています。
リポジトリの設定をスキップしてシステムリポジトリを使用するには、skip_repo: true
に設定してください。
docker_package_name: "docker-ce"
Docker デーモンを提供するパッケージの名前です。
docker_package_version: ""
ターゲットホストにインストールされる Docker パッケージのバージョンです。
""
に設定すると、最新の利用可能なバージョンがインストールされます。
docker_package_state: present
インストールされた Docker パッケージを最新バージョンにアップグレードするには latest
に設定してください。
docker_dependencies: "{{ default_docker_dependencies }}"
ロールによって Docker と一緒にインストールされる追加のサポートパッケージです。
default_docker_dependencies
変数の定義については [vars/RedHat.yml](vars/RedHat.yml)
と [vars/Debian.yml](vars/Debian.yml)
を参照してください。
docker_service_override: ""
# docker_service_override: |
# [Service]
# ExecStart=
# ExecStart=/usr/bin/dockerd
デフォルトの Docker サービス定義を上書きする systemd ユニットドロップインに書き込まれる内容です。
docker_service_state: "started"
docker_service_enabled: "yes"
Docker サービスの状態です。
docker_daemon_config: {}
/etc/docker/daemon.json
に書き込まれる Docker デーモン構成オプションの辞書です。
利用可能なオプションの詳細なドキュメントについては、デーモン構成ファイル を参照してください。
docker_cli_package_name: "docker-ce-cli"
Docker CLI を提供するパッケージの名前です。
docker_cli_package_version: ""
ターゲットホストにインストールされる Docker CLI パッケージのバージョンです。
""
に設定すると、最新の利用可能なバージョンがインストールされます。
docker_cli_package_state: present
インストールされた Docker CLI パッケージの状態です。
latest
に設定すると、Docker CLI を最新バージョンにアップグレードします。
containerd_package_name: "containerd.io"
containerd を提供するパッケージの名前です。
containerd_package_version: ""
インストールされる containerd パッケージのバージョンです。
""
に設定すると、最新の利用可能なバージョンがインストールされます。
containerd_package_state: present
インストールされた containerd パッケージを最新バージョンにアップグレードするには latest
に設定してください。
containerd_service_override: |
[Service]
ExecStartPre=
デフォルトの containerd サービス定義を上書きする systemd ユニットドロップインに書き込まれる内容です。
containerd_service_state: "started"
containerd_service_enabled: "yes"
containerd サービスの状態です。
docker_compose_version: ""
python-pip を介してインストールされる docker-compose のバージョンです。
""
に設定すると、最新の利用可能なバージョンがインストールされます。
docker_py_package_name: "docker"
docker-py を提供する python-pip パッケージの名前です。
docker_py_package_version: ""
インストールされる docker-py パッケージのバージョンです。
docker_py_package_state: present
docker-py パッケージのインストール状態です。
latest
に設定すると、Docker CLI を最新バージョンにアップグレードします。
docker_group_name: "docker"
docker_group_users:
- "{{ ansible_user }}"
Docker グループの名前と、Docker デーモンを管理するために docker_group_name
に追加されるユーザーのリストです。
注意:ユーザーはすでにシステムに存在している必要があります。
docker_swarm_interface: "{{ ansible_default_ipv4['interface'] }}"
クラスター間の通信に使用されるネットワークインターフェイスです。
docker_swarm_addr: "{{ hostvars[inventory_hostname]['ansible_' + docker_swarm_interface]['ipv4']['address'] }}"
スウォーム raft API のリスンアドレスです。
デフォルトでは docker_swarm_interface
の IP アドレスとなります。
docker_swarm_port: 2377
スウォーム raft API のリスンポートです。
skip_repo: false
skip_containerd: false
skip_engine: false
skip_cli: false
skip_swarm: false
skip_group: false
skip_docker_py: false
skip_docker_compose: false
ロールの特定の機能を無効にするためのスイッチです。
swarm-mode
を有効にせずに docker-engine
をインストールするためにこのロールを使用したい場合は、skip_swarm: true
に設定してください。
スウォームノードラベル
ノードラベルは、ノードの整理方法を柔軟に提供します。
サービスの制約にノードラベルを使用することもできます。
サービスを作成する際に制約を適用し、スケジューラがサービスのタスクを割り当てるノードを制限します。
swarm_labels
変数によってラベルを定義できます。例:
$ cat inventory
...
[docker_swarm_manager]
swarm-01 swarm_labels=deploy
[docker_swarm_worker]
swarm-02 swarm_labels='["libvirt", "docker", "foo", "bar"]'
swarm-03
...
この場合:
$ docker inspect --format '{{json .Spec.Labels}}' swarm-02 | jq
{
"bar": "true",
"docker": "true",
"foo": "true",
"libvirt": "true",
}
スワームラベルを含むプレイブックを実行する場合、--tags=swarm_labels
を用いてラベルを割り当てることができます。
注意:インベントリに定義されていないすべてのラベルは削除されます。
例プレイブック
$ cat inventory
swarm-01 ansible_ssh_host=172.10.10.1
swarm-02 ansible_ssh_host=172.10.10.2
swarm-03 ansible_ssh_host=172.10.10.3
[docker_engine]
swarm-01
swarm-02
swarm-03
[docker_swarm_manager]
swarm-01 swarm_labels=deploy
[docker_swarm_worker]
swarm-02 swarm_labels='["libvirt", "docker", "foo", "bar"]'
swarm-03
$ cat playbook.yml
- name: "Docker Swarm クラスターをプロビジョニング"
hosts: all
roles:
- { role: atosatto.docker-swarm }
テスト
テストは Molecule を使用して実施します。
$ pip install tox
すべてのシナリオをテストするには、次のコマンドを実行します。
$ tox
カスタムモレキュールコマンドを実行するには、
$ tox -e py36-ansible29 -- molecule test -s swarm-singlenode
ライセンス
MIT
著者情報
アンドレア・トザット(@_hilbert_)
ansible-galaxy install atosatto.docker-swarm