playbook组织
应该按项目组织playbook, 而不是按组件.
比如一个畅通的web应用, api-server, db, 负载均衡, redis-cache, 日志收集 应该在一个playbook里写,而不是分成四个play,每个装一块.
playbook的粒度控制在项目级别.
在hosts中列出host,之后按项目分好组.设置好组变量和全局变量.一般如果需要设置太多host变量,多半都是ansible组织出现问题. 简单变量可是使用hosts来完成,配合部分group vars_files, 少使用host vars_files
需要加密的信息使用ansible-vault
playbook编写注意
尽量保证每个playbook考虑周全,不然出现第一次跑ok,第二次跑就挂的情况.
还有可以考虑实现判断某一步是否已完成,避免每次都重复在一遍,也要考虑通过命令传参来强制跳过判断重复执行.
个人更喜欢用supervisor取代systemctl/init.d, supervisor加载新配制的方式是, 使用service supervisor restart的方式有不少问题.
- name: reload supervisor
cmd: supervisorctl reread && supervisorctl update
- name: ensure programming running
supervisorctl:
name: program
state: started
supervisor记得设置minfds, 避免因为ulimits的问题无法启动进程,如elasticsearch
ansible系统加固
ansible有个用来加固系统的roles, 建议加上. 包亏一些sysctl配置都是运行linux server需要的.
常用module
debug/ping
copy/file/template/content_in_file
user/group
services/supervisorctl
roles
多使用roles, 使用ansible-galaxy查找roles, 每个roles记得查看支持的系统版本, 看看role的源码, 也可适当作出修改.
测试
molecule官方推出的测试roles, playbook的工具, 文档比较少. 基于docker自动跑roles,完成测试.
本地也可以使用vagrant来测试.
best practice
TODO link