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