atosatto.docker-swarm

Ansible角色:Docker

构建状态 许可证 Ansible角色 GitHub标签

在RHEL/CentOS和Debian/Ubuntu服务器上设置Docker。
该角色支持Docker引擎的“Swarm模式”(https://docs.docker.com/engine/swarm/),用于创建Docker节点集群。

要求

需要安装Ansible 2.7或更高版本。 该角色使用Ansible的json_filter,需要在Ansible机器上安装jmespath。 有关角色所需的jmespath特定版本的更多详细信息,请查看requirements.txt文件。

依赖关系

无。

角色变量

可用变量列在下面,并附有默认值(请参见[defaults/main.yml](defaults/main.yml)):

docker_repo: "{{ docker_repo_ce_stable }}"

提供Docker软件包的仓库。 其他仓库在[vars/main.yml](vars/main.yml)中定义,包括边缘、测试和夜间仓库。 要跳过仓库配置并使用系统仓库,请设置skip_repo: true

docker_package_name: "docker-ce"

提供Docker守护进程的软件包名称。

docker_package_version: ""

要安装在目标主机上的Docker软件包版本。 设置为""时,将安装最新可用版本。

docker_package_state: present

将其设置为latest,以强制将已安装的Docker软件包升级到最新版本。

docker_dependencies: "{{ default_docker_dependencies }}"

将与Docker一起安装的额外支持包。 有关default_docker_dependencies变量的定义,请参阅[vars/RedHat.yml](vars/RedHat.yml)[vars/Debian.yml](vars/Debian.yml)

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

写入systemd单元覆盖的内容,覆盖默认Docker服务定义。

docker_service_state: "started"
docker_service_enabled: "yes"

Docker服务的状态。

docker_daemon_config: {}

要写入/etc/docker/daemon.json的Docker守护进程配置选项的字典。 有关可用选项的详细文档,请参见 守护进程配置文件

docker_cli_package_name: "docker-ce-cli"

提供Docker CLI的软件包名称。

docker_cli_package_version: ""

要安装的Docker CLI软件包版本。 设置为""时,将安装最新可用版本。

docker_cli_package_state: present

Docker CLI软件包的安装状态。 将其设置为latest以将安装的Docker CLI升级到最新版本。

containerd_package_name: "containerd.io"

提供containerd的软件包名称。

containerd_package_version: ""

要安装的containerd软件包版本。 设置为""时,将安装最新可用版本。

containerd_package_state: present

将其设置为latest以强制将已安装的containerd软件包升级到最新版本。

containerd_service_override: |
  [Service]
  ExecStartPre=

写入systemd单元覆盖的内容,覆盖默认containerd服务定义。

containerd_service_state: "started"
containerd_service_enabled: "yes"

containerd服务的状态。

docker_compose_version: ""

要通过python-pip安装的docker-compose版本。 设置为""时,将安装最新可用版本。

docker_py_package_name: "docker"

提供docker-py的python-pip软件包名称。

docker_py_package_version: ""

要安装的docker-py软件包版本。

docker_py_package_state: present

docker-py软件包的安装状态。 将其设置为'latest'以将Docker CLI升级到最新版本。

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

Docker组的名称,以及要添加到docker_group_name以管理Docker守护进程的用户列表。 注意:用户必须已经存在于系统中。

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

用于集群间通信的网络接口。

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

Swarm raft API的监听地址。 默认情况下,为docker_swarm_interface的IP地址。

docker_swarm_port: 2377

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

允许禁用角色特定功能的开关。 如果您想使用此角色安装docker-engine而不启用swarm-mode,请设置skip_swarm: true

Swarm节点标签

节点标签提供了一种灵活的节点组织方法。您还可以在服务约束中使用节点标签。 创建服务时应用约束,以限制调度程序为服务分配任务的节点。 可以通过swarm_labels变量定义标签,例如:

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

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

在这种情况下:

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

您可以通过使用--tags=swarm_labels在运行剧本时为集群分配标签。

注意:请注意,所有未在清单中定义的标签将被移除。

示例剧本

$ 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: "提供Docker Swarm集群"
  hosts: all
  roles:
    - { role: atosatto.docker-swarm }

测试

测试通过Molecule进行。

$ pip install tox

要测试所有场景,运行

$ tox

要运行自定义的molecule命令,

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

许可证

MIT

作者信息

Andrea Tosatto (@_hilbert_)

关于项目

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

安装
ansible-galaxy install atosatto.docker-swarm
许可证
mit
下载
250.4k
拥有者
Automation fan-boy. Head in the ☁️. Loving Containers, Micro-Services, OpenSource, Golang and Python