atosatto.docker-swarm

Rôle Ansible : Docker

Statut de construction Licence Rôle Ansible Tag GitHub

Installez Docker sur des serveurs RHEL/CentOS et Debian/Ubuntu.
Le rôle prend en charge le "Mode Swarm" de Docker (https://docs.docker.com/engine/swarm/) pour créer un cluster de nœuds Docker.

Exigences

Une installation d'Ansible 2.7 ou supérieure. Ce rôle utilise le json_filter d'Ansible qui nécessite que jmespath soit installé sur la machine Ansible. Voir le fichier requirements.txt pour plus de détails sur la version spécifique de jmespath requise par le rôle.

Dépendances

Aucune.

Variables du Rôle

Les variables disponibles sont listées ci-dessous, avec leurs valeurs par défaut (voir [defaults/main.yml](defaults/main.yml)):

docker_repo: "{{ docker_repo_ce_stable }}"

Le dépôt fournissant les paquets Docker. D'autres dépôts sont définis dans [vars/main.yml](vars/main.yml) incluant les dépôts edge, test et nightly. Pour ignorer la configuration du dépôt et utiliser les dépôts système, définissez skip_repo: true.

docker_package_name: "docker-ce"

Nom du paquet fournissant le démon Docker.

docker_package_version: ""

Version du paquet Docker à installer sur les hôtes cibles. Lorsqu'il est défini sur "", la dernière version disponible sera installée.

docker_package_state: present

Définissez-le sur latest pour forcer la mise à niveau du paquet Docker installé vers la dernière version.

docker_dependencies: "{{ default_docker_dependencies }}"

Paquets de support supplémentaires à installer avec Docker par le rôle. Voir [vars/RedHat.yml](vars/RedHat.yml) et [vars/Debian.yml](vars/Debian.yml) pour la définition de la variable default_docker_dependencies.

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

Contexte écrit dans le dépôt unit systemd pour remplacer la définition par défaut du service Docker.

docker_service_state: "started"
docker_service_enabled: "yes"

État du service Docker.

docker_daemon_config: {}

Dictionnaire des options de configuration du démon Docker à écrire dans /etc/docker/daemon.json. Voir Fichier de configuration du démon pour la documentation détaillée des options disponibles.

docker_cli_package_name: "docker-ce-cli"

Nom du paquet fournissant la CLI Docker.

docker_cli_package_version: ""

Version du paquet CLI Docker à installer sur les hôtes cibles. Lorsqu'il est défini sur "", la dernière version disponible sera installée.

docker_cli_package_state: present

Définissez-le sur latest pour forcer la mise à niveau du paquet CLI Docker installé vers la dernière version.

containerd_package_name: "containerd.io"

Nom du paquet fournissant containerd.

containerd_package_version: ""

Version du paquet containerd à installer. Lorsqu'il est défini sur "", la dernière version disponible sera installée.

containerd_package_state: present

Définissez-le sur latest pour forcer la mise à niveau du paquet containerd installé vers la dernière version.

containerd_service_override: |
  [Service]
  ExecStartPre=

Contexte écrit dans le dépôt unit systemd pour remplacer la définition par défaut du service containerd.

containerd_service_state: "started"
containerd_service_enabled: "yes"

État du service containerd.

docker_compose_version: ""

Version de docker-compose à installer via python-pip. Lorsqu'il est défini sur "", la dernière version disponible sera installée.

docker_py_package_name: "docker"

Nom du paquet python-pip fournissant docker-py.

docker_py_package_version: ""

Version du paquet docker-py à installer.

docker_py_package_state: present

État d'installation du paquet docker-py. Définissez-le sur 'latest' pour mettre à niveau la CLI Docker vers la dernière version.

docker_group_name: "docker"
docker_group_users:
  - "{{ ansible_user }}"

Nom du groupe Docker et liste des utilisateurs à ajouter à docker_group_name pour gérer le démon Docker. NB : Les utilisateurs doivent déjà exister sur le système.

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

Interface réseau à utiliser pour la communication entre les nœuds du cluster.

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

Adresse d'écoute pour l'API Raft Swarm. Par défaut, l'adresse IP de docker_swarm_interface.

docker_swarm_port: 2377

Port d'écoute pour l'API Raft 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

Commutateurs permettant de désactiver certaines fonctionnalités du rôle. Si vous souhaitez utiliser ce rôle pour installer docker-engine sans activer swarm-mode, définissez skip_swarm: true.

Étiquettes des nœuds Swarm

Étiquettes des nœuds fournissent une méthode flexible d'organisation des nœuds. Vous pouvez également utiliser des étiquettes de nœud dans des contraintes de service. Appliquez des contraintes lors de la création d'un service pour limiter les nœuds où le planificateur assigne des tâches pour le service. Vous pouvez définir des étiquettes à l'aide de la variable swarm_labels, par exemple :

$ cat inventory
...
[docker_swarm_manager]
swarm-01 swarm_labels=deploy

[docker_swarm_worker]
swarm-02 swarm_labels='["libvirt", "docker", "foo", "bar"]'
swarm-03
...

Dans ce cas :

$ docker inspect --format '{{json .Spec.Labels}}'  swarm-02 | jq
{
   "bar": "true",
   "docker": "true",
   "foo": "true",
   "libvirt": "true",
}

Vous pouvez attribuer des étiquettes au cluster en exécutant le playbook avec --tags=swarm_labels.

NB : Veuillez noter que toutes les étiquettes qui ne sont pas définies dans l'inventaire seront supprimées.

Exemple 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: "Provisionner le Cluster Docker Swarm"
  hosts: all
  roles:
    - { role: atosatto.docker-swarm }

Tests

Des tests sont effectués par Molecule.

$ pip install tox

Pour tester tous les scénarios, exécutez

$ tox

Pour exécuter une commande molecule personnalisée

$ tox -e py36-ansible29 -- molecule test -s swarm-singlenode

Licence

MIT

Informations sur l'Auteur

Andrea Tosatto (@_hilbert_)

À propos du projet

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

Installer
ansible-galaxy install atosatto.docker-swarm
Licence
mit
Téléchargements
250.4k
Propriétaire
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python