atosatto.docker-swarm

Rola Ansible: Docker

Status budowy Licencja Rola Ansible Tag GitHub

Ustaw Docker na serwerach RHEL/CentOS oraz Debian/Ubuntu.
Roza wspiera "Tryb Swarm" silnika Docker (https://docs.docker.com/engine/swarm/), aby stworzyć klaster węzłów Docker.

Wymagania

Instalacja Ansible w wersji 2.7 lub wyższej. Ta rola korzysta z json_filter w Ansible, który wymaga zainstalowania jmespath na maszynie Ansible. Szczegóły dotyczące wersji jmespath wymaganej przez rolę znajdują się w pliku requirements.txt.

Zależności

Brak.

Zmienne roli

Dostępne zmienne są wymienione poniżej wraz z wartościami domyślnymi (zobacz [defaults/main.yml](defaults/main.yml)):

docker_repo: "{{ docker_repo_ce_stable }}"

Repozytorium zawierające pakiety Docker. Dodatkowe repozytoria są zdefiniowane w [vars/main.yml](vars/main.yml), w tym repozytoria edge, testowe i nocne. Aby pominąć konfigurację repozytorium i użyć repozytoriów systemowych, ustaw skip_repo: true.

docker_package_name: "docker-ce"

Nazwa pakietu dostarczającego demon Docker.

docker_package_version: ""

Wersja pakietu Docker, który ma być zainstalowany na docelowych hostach. Gdy ustawi się na "", zostanie zainstalowana najnowsza dostępna wersja.

docker_package_state: present

Ustaw na latest, aby wymusić aktualizację zainstalowanego pakietu Docker do najnowszej wersji.

docker_dependencies: "{{ default_docker_dependencies }}"

Dodatkowe pakiety wsparcia, które mają być zainstalowane wraz z Dockerem przez rolę. Zobacz [vars/RedHat.yml](vars/RedHat.yml) i [vars/Debian.yml](vars/Debian.yml) dla definicji zmiennej default_docker_dependencies.

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

Zawartość napisana do jednostki systemd, nadpisująca domyślną definicję usługi Docker.

docker_service_state: "started"
docker_service_enabled: "yes"

Stan usługi Docker.

docker_daemon_config: {}

Słownik opcji konfiguracyjnych demona Docker do zapisania w /etc/docker/daemon.json. Zobacz Plik konfiguracyjny demona dla szczegółowej dokumentacji dostępnych opcji.

docker_cli_package_name: "docker-ce-cli"

Nazwa pakietu dostarczającego interfejs CLI Docker.

docker_cli_package_version: ""

Wersja pakietu CLI Docker, który ma być zainstalowany na docelowych hostach. Gdy ustawi się na "", zostanie zainstalowana najnowsza dostępna wersja.

docker_cli_package_state: present

Ustaw na latest, aby wymusić aktualizację zainstalowanego pakietu CLI Docker do najnowszej wersji.

containerd_package_name: "containerd.io"

Nazwa pakietu dostarczającego containerd.

containerd_package_version: ""

Wersja pakietu containerd, który ma być zainstalowany. Gdy ustawi się na "", zostanie zainstalowana najnowsza dostępna wersja.

containerd_package_state: present

Ustaw na latest, aby wymusić aktualizację zainstalowanego pakietu containerd do najnowszej wersji.

containerd_service_override: |
  [Service]
  ExecStartPre=

Zawartość napisana do jednostki systemd, nadpisująca domyślną definicję usługi containerd.

containerd_service_state: "started"
containerd_service_enabled: "yes"

Stan usługi containerd.

docker_compose_version: ""

Wersja docker-compose, która ma być zainstalowana przez python-pip. Gdy ustawi się na "", zostanie zainstalowana najnowsza dostępna wersja.

docker_py_package_name: "docker"

Nazwa pakietu python-pip dostarczającego docker-py.

docker_py_package_version: ""

Wersja pakietu docker-py, który ma być zainstalowany.

docker_py_package_state: present

Stan instalacji pakietu docker-py. Ustaw na 'latest', aby zaktualizować Docker CLI do najnowszej wersji.

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

Nazwa grupy Docker i lista użytkowników, którzy mają być dodani do docker_group_name, aby zarządzać demonem Docker. NB: Użytkownicy muszą już istnieć w systemie.

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

Interfejs sieciowy do użycia do komunikacji w klastrze.

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

Adres, na którym nasłuchuje API raft Swarm. Domyślnie jest to adres IP docker_swarm_interface.

docker_swarm_port: 2377

Port, na którym nasłuchuje 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

Przełączniki umożliwiające wyłączenie określonych funkcji roli. Jeśli chcesz użyć tej roli do zainstalowania docker-engine bez aktywacji swarm-mode, ustaw skip_swarm: true.

Etykiety węzłów Swarm

Etykiety węzłów zapewniają elastyczną metodę organizacji węzłów. Możesz także używać etykiet węzłów w ograniczeniach usług. Zastosuj ograniczenia, gdy tworzysz usługę, aby ograniczyć węzły, do których harmonogram przydziela zadania dla usługi. Możesz zdefiniować etykiety za pomocą zmiennej swarm_labels, np.:

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

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

W takim przypadku:

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

Możesz przypisać etykiety do klastra podczas uruchamiania playbooka z --tags=swarm_labels.

NB: Pamiętaj, że wszystkie etykiety, które nie są zdefiniowane w inwentarzu, zostaną usunięte.

Przykładowy 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: "Provisionowanie klastra Docker Swarm"
  hosts: all
  roles:
    - { role: atosatto.docker-swarm }

Testowanie

Testy są przeprowadzane przez Molecule.

$ pip install tox

Aby przetestować wszystkie scenariusze, uruchom

$ tox

Aby uruchomić własne polecenie molekuły

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

Licencja

MIT

Informacje o autorze

Andrea Tosatto (@_hilbert_)

O projekcie

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

Zainstaluj
ansible-galaxy install atosatto.docker-swarm
Licencja
mit
Pobrania
250.4k
Właściciel
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python