atosatto.docker-swarm
Ansible Rolle: Docker
Installiere Docker auf RHEL/CentOS und Debian/Ubuntu Server.
Die Rolle unterstützt den "Swarm-Modus" von Docker (https://docs.docker.com/engine/swarm/) zur Erstellung eines Clusters von Docker-Knoten.
Voraussetzungen
Eine Ansible-Installation in Version 2.7 oder höher.
Diese Rolle nutzt den Ansible json_filter
, der jmespath
benötigt, um auf der Ansible-Maschine installiert zu sein.
Siehe die Datei requirements.txt
für weitere Details zur spezifischen Version von jmespath
, die von der Rolle benötigt wird.
Abhängigkeiten
Keine.
Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe [defaults/main.yml](defaults/main.yml)
):
docker_repo: "{{ docker_repo_ce_stable }}"
Das Repository, das die Docker-Pakete bereitstellt.
Zusätzliche Repositories sind in [vars/main.yml](vars/main.yml)
definiert, einschließlich der Edge-, Test- und Nachtabrepositories.
Um die Konfiguration des Repositories zu überspringen und die System-Repositories zu verwenden, setze skip_repo: true
.
docker_package_name: "docker-ce"
Name des Pakets, das den Docker-Daemon bereitstellt.
docker_package_version: ""
Version des Docker-Pakets, das auf den Ziel-Hosts installiert werden soll.
Wenn auf ""
gesetzt, wird die neueste verfügbare Version installiert.
docker_package_state: present
Setze es auf latest
, um das installierte Docker-Paket auf die neueste Version zu aktualisieren.
docker_dependencies: "{{ default_docker_dependencies }}"
Zusätzliche unterstützende Pakete, die zusammen mit Docker von der Rolle installiert werden.
Siehe [vars/RedHat.yml](vars/RedHat.yml)
und [vars/Debian.yml](vars/Debian.yml)
für die Definition der Variable default_docker_dependencies
.
docker_service_override: ""
# docker_service_override: |
# [Service]
# ExecStart=
# ExecStart=/usr/bin/dockerd
Inhalt, der in die systemd-Unit-Drop-in geschrieben wird, um die Standarddefinition des Docker-Dienstes zu überschreiben.
docker_service_state: "started"
docker_service_enabled: "yes"
Status des Docker-Dienstes.
docker_daemon_config: {}
Dictionär für Konfigurationsoptionen des Docker-Daemons, die in /etc/docker/daemon.json
geschrieben werden sollen.
Siehe Daemon-Konfigurationsdatei für die detaillierte Dokumentation der verfügbaren Optionen.
docker_cli_package_name: "docker-ce-cli"
Name des Pakets, das die Docker-CLI bereitstellt.
docker_cli_package_version: ""
Version des Docker-CLI-Pakets, das auf den Ziel-Hosts installiert werden soll.
Wenn auf ""
gesetzt, wird die neueste verfügbare Version installiert.
docker_cli_package_state: present
Setze es auf latest
, um das installierte Docker-CLI-Paket auf die neueste Version zu aktualisieren.
containerd_package_name: "containerd.io"
Name des Pakets, das containerd bereitstellt.
containerd_package_version: ""
Version des containerd-Pakets, das installiert werden soll.
Wenn auf ""
gesetzt, wird die neueste verfügbare Version installiert.
containerd_package_state: present
Setze es auf latest
, um das installierte containerd-Paket auf die neueste Version zu aktualisieren.
containerd_service_override: |
[Service]
ExecStartPre=
Inhalt, der in die systemd-Unit-Drop-in geschrieben wird, um die Standarddefinition des containerd-Dienstes zu überschreiben.
containerd_service_state: "started"
containerd_service_enabled: "yes"
Status des containerd-Dienstes.
docker_compose_version: ""
Version von docker-compose, die über python-pip installiert werden soll.
Wenn auf ""
gesetzt, wird die neueste verfügbare Version installiert.
docker_py_package_name: "docker"
Name des python-pip-Pakets, das docker-py bereitstellt.
docker_py_package_version: ""
Version des docker-py-Pakets, das installiert werden soll.
docker_py_package_state: present
Installationsstatus des docker-py-Pakets. Setze es auf 'latest', um die Docker-CLI auf die neueste Version zu aktualisieren.
docker_group_name: "docker"
docker_group_users:
- "{{ ansible_user }}"
Name der Docker-Gruppe und Liste der Benutzer, die zur Verwaltung des Docker-Daemons zu docker_group_name
hinzugefügt werden sollen.
NB: Die Benutzer müssen bereits im System existieren.
docker_swarm_interface: "{{ ansible_default_ipv4['interface'] }}"
Netzwerkschnittstelle, die für die Interkommunikation im Cluster verwendet werden soll.
docker_swarm_addr: "{{ hostvars[inventory_hostname]['ansible_' + docker_swarm_interface]['ipv4']['address'] }}"
Zuhören-Adresse für die Swarm-Raft-API.
Standardmäßig die IP-Adresse von docker_swarm_interface
.
docker_swarm_port: 2377
Zuhören-Port для der 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
Schalter, die spezifische Funktionen der Rolle deaktivieren können.
Wenn du diese Rolle verwenden möchtest, um docker-engine
ohne Aktivierung des swarm-mode
zu installieren, setze skip_swarm: true
.
Swarm-Knoten-Labels
Knoten-Labels bieten eine flexible Methode zur Organisation von Knoten. Du kannst Knoten-Labels auch in Dienstbeschränkungen verwenden.
Wende Einschränkungen an, wenn du einen Dienst erstellst, um die Knoten zu begrenzen, auf denen der Scheduler Aufgaben für den Dienst zuweist.
Labels können über die Variable swarm_labels
definiert werden, z.B.:
$ cat inventory
...
[docker_swarm_manager]
swarm-01 swarm_labels=deploy
[docker_swarm_worker]
swarm-02 swarm_labels='["libvirt", "docker", "foo", "bar"]'
swarm-03
...
In diesem Fall:
$ docker inspect --format '{{json .Spec.Labels}}' swarm-02 | jq
{
"bar": "true",
"docker": "true",
"foo": "true",
"libvirt": "true",
}
Du kannst Labels zu einem laufenden Playbook mit --tags=swarm_labels
zuweisen.
NB: Bitte beachte, dass alle Labels, die nicht im Inventar definiert sind, entfernt werden.
Beispiel-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: "Provisioniere Docker Swarm Cluster"
hosts: all
roles:
- { role: atosatto.docker-swarm }
Tests
Tests werden von Molecule durchgeführt.
$ pip install tox
Um alle Szenarien zu testen, führe aus:
$ tox
Um einen benutzerdefinierten Molecule-Befehl auszuführen:
$ tox -e py36-ansible29 -- molecule test -s swarm-singlenode
Lizenz
MIT
Autoreninformationen
Andrea Tosatto (@_hilbert_)
ansible-galaxy install atosatto.docker-swarm