atosatto.docker-swarm
Rôle Ansible : Docker
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_)
ansible-galaxy install atosatto.docker-swarm