atosatto.docker-swarm

Rol de Ansible: Docker

Estado de Construcción
Licencia
Rol de Ansible
Etiqueta de GitHub

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_)

Acerca del proyecto

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

Instalar
ansible-galaxy install atosatto.docker-swarm
Licencia
mit
Descargas
250.4k
Propietario
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python