atosatto.docker-swarm

Ansible ロール: Docker

ビルドステータス ライセンス Ansible ロール GitHub タグ

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_

プロジェクトについて

Setup a Docker Swarm Cluster on Centos/RHEL, Ubuntu/Debian.

インストール
ansible-galaxy install atosatto.docker-swarm
ライセンス
mit
ダウンロード
250.4k
所有者
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python