摘要
由于ansible与agent之间的通信使用的是openssh,每次新增机器之后需要在ansible的inventory文件中添加新增机器的相关配置。虽然配置起来很简单,但是一旦短时间新增大量机器、或者是长时间的维护过程中难免会有遗漏或配置重复的情况出现,因此类似salt的agent自动向server注册的功能就显得十分重要。
目前为至还未发现世面上有这种类似saltstack的agent自动向server端自动注册的机制,其实实现起来很简单,也不需要修改现有的ansible,只需要用到几个服务,以及手写几个脚本就可以按照你自己定义好的规则实现自动注册。
需要用到的服务
- ansible
- etcd
- confd
- python or shell
原理
- 采用etcd作为节点发现数据库
- 提前定义好etcd数据库的目录数据结构
- 制作模板机,配置自动运行脚本
- 通过confd的监控功能监控etcd相关数据,实时生成ansible的inventory文件
本文安装配置过程极为简单
etcd数据结构的定义还很简陋,这部分以及脚本的编写自由度非常高,你可以随意按照你的情况进行修改
实际上本文只是体现一个思路,或者也可以说只是etcd+confd配置管理的一个应用而已。
本文记录的整个过程中一些细节部分没有体现,请你自己注意;本文仅供参考
安装配置
ansible
1 | pip install ansible |
配置文件
1 | # /etc/ansible/ansible.cfg |
etcd安装配置
安装
1 | LOCAL_DIR="/usr/local/src" |
systemd配置
1 | mkdir /etc/etcd/ |
修改 /usr/lib/systemd/system/etcd.service
1 | tee /usr/lib/systemd/system/etcd.service <<-'EOF' |
启动服务
1 | systemctl enable etcd.service |
配置
etcd采用默认的api2接口
1 | export ETCDCTL_API=2 |
创建etcd目录数据结构
1 | etcdctl mkdir /ansible/default |
/ansible/default/*
用于默认的数据存储/ansible/custom
预留作为其他一些自定义的配置
confd安装配置
安装
1 | CONFD_VER="0.16.0" |
配置
1 | mkdir -p /etc/confd/{conf.d,templates} |
1 | cat conf.d/ansible.toml |
启动
1 | systemctl enable confd |
注册脚本
1 | # 脚本目前写的比较简单,后续还会进行修改 |
未来展望
- 目前整个结构比较简单,生成的
inventory
文件结构还很原始 - 实际使用中后续的配置过程还是有些麻烦
- 后续会更新的一些功能(如果有时间和兴趣的话)
- 数据中端口的配置 已添加
- 一些自定义custom的数据结构
- 命令行管理工具
- web管理功能