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