atosatto.docker-swarm

Ansible Rolle: Docker

Build-Status Lizenz Ansible Rolle GitHub-Tag

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

Über das Projekt

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

Installieren
ansible-galaxy install atosatto.docker-swarm
Lizenz
mit
Downloads
250.4k
Besitzer
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python