docker-swarm
Ansible Роль: Docker
Настройка 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_)
ansible-galaxy install atosatto/ansible-dockerswarm