docker-swarm

Ansible Роль: Docker

Статус сборки Лицензия Ansible Роль GitHub тег

Настройка Docker на серверах RHEL/CentOS и Debian/Ubuntu.
Роль поддерживает "Swarm Mode" (https://docs.docker.com/engine/swarm/) Docker Engine для создания кластера узлов Docker.

Требования

Необходима установка Ansible версии 2.7 или выше.
Эта роль использует json_filter Ansible, для которого необходимо установить jmespath на машине Ansible.
Дополнительные детали о конкретной версии jmespath, необходимой для роли, смотрите в файле requirements.txt.

Зависимости

Отсутствуют.

Переменные Роли

Доступные переменные перечислены ниже, вместе с их значениями по умолчанию (см. [defaults/main.yml](defaults/main.yml)):

docker_repo: "{{ docker_repo_ce_stable }}"

Репозиторий, предоставляющий пакеты Docker.
Дополнительные репозитории определены в [vars/main.yml](vars/main.yml), включая edge, test и nightly репозитории.
Чтобы пропустить настройку репозитория и использовать системные репозитории, установите skip_repo: true.

docker_package_name: "docker-ce"

Имя пакета, предоставляющего демон Docker.

docker_package_version: ""

Версия пакета Docker, который будет установлен на целевых хостах.
Когда установлено "", будет установлена последняя доступная версия.

docker_package_state: present

Установите latest, чтобы принудительно обновить установочный пакет Docker до последней версии.

docker_dependencies: "{{ default_docker_dependencies }}"

Дополнительные вспомогательные пакеты, которые будут установлены вместе с Docker ролью.
Смотрите [vars/RedHat.yml](vars/RedHat.yml) и [vars/Debian.yml](vars/Debian.yml) для определения переменной default_docker_dependencies.

docker_service_override: ""
# docker_service_override: |
# [Service]
# ExecStart=
# ExecStart=/usr/bin/dockerd

Контент, записанный в систему по замене стандартного определения сервиса Docker.

docker_service_state: "started"
docker_service_enabled: "yes"

Состояние сервиса Docker.

docker_daemon_config: {}

Словарь опций конфигурации демона Docker, которые будут записаны в /etc/docker/daemon.json.
Смотрите Конфигурационный файл демона для подробной документации доступных опций.

docker_cli_package_name: "docker-ce-cli"

Имя пакета, предоставляющего CLI Docker.

docker_cli_package_version: ""

Версия пакета Docker CLI, который будет установлен на целевых хостах.
Когда установлено "", будет установлена последняя доступная версия.

docker_cli_package_state: present

Установите latest, чтобы принудительно обновить установочный пакет CLI Docker до последней версии.

containerd_package_name: "containerd.io"

Имя пакета, предоставляющего containerd.

containerd_package_version: ""

Версия пакета containerd, который будет установлен.
Когда установлено "", будет установлена последняя доступная версия.

containerd_package_state: present

Установите latest, чтобы принудительно обновить установочный пакет containerd до последней версии.

containerd_service_override: |
  [Service]
  ExecStartPre=

Контент, записанный в систему по замене стандартного определения сервиса containerd.

containerd_service_state: "started"
containerd_service_enabled: "yes"

Состояние сервиса containerd.

docker_compose_version: ""

Версия docker-compose, которую нужно установить через python-pip.
Когда установлено "", будет установлена последняя доступная версия.

docker_py_package_name: "docker"

Имя пакета python-pip, предоставляющего docker-py.

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_group_name для управления демоном Docker.
Примечание: Пользователи должны уже существовать в системе.

docker_swarm_interface: "{{ ansible_default_ipv4['interface'] }}"

Сетевой интерфейс, который будет использоваться для внутренней связи кластера.

docker_swarm_addr: "{{ hostvars[inventory_hostname]['ansible_' + docker_swarm_interface]['ipv4']['address'] }}"

Адрес прослушивания для Swarm raft API.
По умолчанию это IP адрес docker_swarm_interface.

docker_swarm_port: 2377

Порт прослушивания для Swarm 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

Переключатели, позволяющие отключить конкретную функциональность роли.
Если вы хотите использовать эту роль для установки docker-engine без включения swarm-mode, установите skip_swarm: true.

Ярлы узлов Swarm

Ярлы узлов обеспечивают гибкий способ организации узлов. Вы также можете использовать ярлы узлов в ограничениях сервиса.
Применяйте ограничения, когда создаете сервис, чтобы ограничить узлы, на которые планировщик назначает задачи для сервиса.
Вы можете определить ярлы с помощью переменной 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: "Provision Docker Swarm Cluster"
  hosts: all
  roles:
    - { role: atosatto.docker-swarm }

Тестирование

Тестирование выполняется с помощью Molecule.

$ pip install tox

Чтобы протестировать все сценарии, запустите

$ tox

Чтобы выполнить пользовательскую команду molecule

$ 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/ansible-dockerswarm
Лицензия
mit
Загрузки
249706
Владелец
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python