atosatto.docker-swarm
Rol de Ansible: Docker
Configura Docker en servidores RHEL/CentOS y Debian/Ubuntu.
Este rol soporta el "Modo Swarm" de Docker (https://docs.docker.com/engine/swarm/) para crear un clúster de nodos Docker.
Requisitos
Una instalación de Ansible 2.7 o superior.
Este rol utiliza el json_filter
de Ansible, que requiere que jmespath
esté instalado en la máquina con Ansible.
Consulta el archivo requirements.txt
para más detalles sobre la versión específica de jmespath
requerida por el rol.
Dependencias
Ninguna.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con los valores predeterminados (ver [defaults/main.yml](defaults/main.yml)
):
docker_repo: "{{ docker_repo_ce_stable }}"
El repositorio que proporciona los paquetes de Docker.
Repositorios adicionales se definen en [vars/main.yml](vars/main.yml)
, incluyendo repositorios de edge, prueba y nocturnos.
Para omitir la configuración del repositorio y usar los repositorios del sistema, establece skip_repo: true
.
docker_package_name: "docker-ce"
Nombre del paquete que proporciona el daemon de Docker.
docker_package_version: ""
Versión del paquete Docker que se instalará en los hosts objetivo.
Cuando se establece en ""
, se instalará la versión más reciente disponible.
docker_package_state: present
Establece en latest
para forzar la actualización del paquete Docker instalado a la última versión.
docker_dependencies: "{{ default_docker_dependencies }}"
Paquetes de soporte adicionales que se instalarán junto a Docker mediante este rol.
Consulta [vars/RedHat.yml](vars/RedHat.yml)
y [vars/Debian.yml](vars/Debian.yml)
para la definición de la variable default_docker_dependencies
.
docker_service_override: ""
# docker_service_override: |
# [Service]
# ExecStart=
# ExecStart=/usr/bin/dockerd
Contenido escrito en la unidad drop-in de systemd que anula
la definición del servicio Docker por defecto.
docker_service_state: "started"
docker_service_enabled: "yes"
Estado del servicio Docker.
docker_daemon_config: {}
Diccionario de opciones de configuración del daemon de Docker que se escribirán en /etc/docker/daemon.json
.
Consulta Archivo de configuración del daemon para la documentación detallada de las opciones disponibles.
docker_cli_package_name: "docker-ce-cli"
Nombre del paquete que proporciona la CLI de Docker.
docker_cli_package_version: ""
Versión del paquete CLI de Docker que se instalará en los hosts objetivo.
Cuando se establece en ""
, se instalará la versión más reciente disponible.
docker_cli_package_state: present
Establece en latest
para forzar la actualización del paquete CLI de Docker instalado a la última versión.
containerd_package_name: "containerd.io"
Nombre del paquete que proporciona containerd.
containerd_package_version: ""
Versión del paquete containerd que se instalará.
Cuando se establece en ""
, se instalará la versión más reciente disponible.
containerd_package_state: present
Establece en latest
para forzar la actualización del paquete containerd instalado a la última versión.
containerd_service_override: |
[Service]
ExecStartPre=
Contenido escrito en la unidad drop-in de systemd que anula
la definición del servicio containerd por defecto.
containerd_service_state: "started"
containerd_service_enabled: "yes"
Estado del servicio containerd.
docker_compose_version: ""
Versión de docker-compose que se instalará a través de python-pip.
Cuando se establece en ""
, se instalará la versión más reciente disponible.
docker_py_package_name: "docker"
Nombre del paquete python-pip que proporciona docker-py.
docker_py_package_version: ""
Versión del paquete docker-py que se instalará.
docker_py_package_state: present
Estado de instalación del paquete docker-py.
Establece en 'latest' para actualizar la CLI de Docker a la última versión.
docker_group_name: "docker"
docker_group_users:
- "{{ ansible_user }}"
Nombre del grupo Docker y lista de usuarios que se añadirán a docker_group_name
para gestionar el daemon de Docker.
Nota: Los usuarios deben existir previamente en el sistema.
docker_swarm_interface: "{{ ansible_default_ipv4['interface'] }}"
Interfaz de red que se utilizará para la comunicación entre clústeres.
docker_swarm_addr: "{{ hostvars[inventory_hostname]['ansible_' + docker_swarm_interface]['ipv4']['address'] }}"
Dirección de escucha para la API raft de Swarm.
Por defecto, la dirección IP de docker_swarm_interface
.
docker_swarm_port: 2377
Puerto de escucha para la API raft de Swarm.
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
Interruptores que permiten deshabilitar funcionalidades específicas del rol.
Si deseas usar este rol para instalar docker-engine
sin habilitar swarm-mode
, establece skip_swarm: true
.
Etiquetas de nodos Swarm
Las etiquetas de nodos proporcionan un
método flexible para la organización de nodos. También puedes usar etiquetas de nodos en restricciones de servicio.
Aplica restricciones al crear un servicio para limitar los nodos donde el programador asigna tareas para el servicio.
Puedes definir etiquetas utilizando la variable swarm_labels
, por ejemplo:
$ cat inventory
...
[docker_swarm_manager]
swarm-01 swarm_labels=deploy
[docker_swarm_worker]
swarm-02 swarm_labels='["libvirt", "docker", "foo", "bar"]'
swarm-03
...
En este caso:
$ docker inspect --format '{{json .Spec.Labels}}' swarm-02 | jq
{
"bar": "true",
"docker": "true",
"foo": "true",
"libvirt": "true",
}
Puedes asignar etiquetas al clúster ejecutando el playbook con --tags=swarm_labels
Nota: Ten en cuenta que todas las etiquetas que no se definan en el inventario serán eliminadas.
Ejemplo de Playbook
$ 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: "Provisionar Clúster Docker Swarm"
hosts: all
roles:
- { role: atosatto.docker-swarm }
Pruebas
Las pruebas se realizan mediante Molecule.
$ pip install tox
Para probar todos los escenarios ejecuta
$ tox
Para ejecutar un comando personalizado de molecule
$ tox -e py36-ansible29 -- molecule test -s swarm-singlenode
Licencia
MIT
Información del Autor
Andrea Tosatto (@_hilbert_)
ansible-galaxy install atosatto.docker-swarm