1、什么是ansible
ansible是一种比较常用自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。远程执行命令只需要打通节点ssh登录即可。是一个开源软件供应,配置管理和应用程序部署工具。可以管理成百上千的节点。
由于python语言开发,大多数linux系统都支持良好。很多互联网公司运维团队都比较喜欢使用。ansible官网:Ansible is Simple IT Automation。ansible帮助文档:Ansible Documentation。
2、ansible包含哪些模块
自动化部署主要模块,包括command、shell、copy、fetch、file、archive、unarchive、cron、yum_repository、dnf、service、firewalld、user、group、lineinfile、replace、setup、debug等模块。下面简单列举两个模块的示例。
2.1、command模块
建立文件: ansible test_host -m command -a “touch /mnt/test_file ”
删除文件:ansible test_host -m command -a “rm -fr /mnt/test_file ”
参数 | 功能 |
cmd | 执行某个命令 |
creates | 判断文件是否存在,存在则不运行 |
removes | 判断文件是否存在,存在则运行 |
chdir | 进入目录 |
2.2、file模块
创建文件:ansible test_host -m file -a ‘path=/mnt/test_host state=touch’
创建目录:ansible test_host -m file -a ‘path=/mnt/test_host state=directory’
创建软连接:ansible test_host -m file -a ‘path=/mnt/test_host.link state=link src=/mnt/test_host’
创建硬链接:ansible test_host -m file -a ‘path=/mnt/test_host.hard state=hard src=/mnt/test_host’
修改目录权限:ansible test_host -m file -a ‘path=/mnt/test_host mode=777’
修改目录权限并且目录中子文件的权限:ansible test_host -m file -a ‘path=/mnt/test_host mode=777 recurse=yes’
3、ansible使用场景
用户与组相关批量操作
远程执行系统命令
与jenkins和gitlab打通CICD
批量管理配置文件
批量部署安装大数据集群组件
批量启停进程
以上均可按角色主机组进行执行
4、ansible使用案例
用户与组相关批量操作
创建用户:ansible test_host -m user -a ‘name=test_user state=present’
修改主组:ansible test_host -m user -a ‘name=test_user group=1000 state=present’
修改附加组:ansible test_host -m user -a ‘name=test_user groups=1002 state=present’
添加附加组:ansible test_host -m user -a ‘name=test_user groups=1001 state=present append=yes’
指定shell:ansible test_host -m user -a ‘name=test_user shell=/sbin/nologin’
修改uid:ansible test_host -m user -a ‘name=test_user uid=1111’
修改注释:ansible test_host -m user -a ‘name=test_user comment=“test_user user”’
删除用户并且删除家目录:ansible test_host -m user -a ‘name=test_user state=absent remove=yes’
生成密钥:ansible test_host -m user -a ‘name=test_user state=present’
openssl passwd -6
修改密码:ansible test_host -m user -a ‘name=test_user password=“密钥”’
用户生成ssh密钥在~/.ssh/:ansible test_host -m user -a ‘name=test_user generate_ssh_key=yes’
创建组,也可指定gid=8888:ansible test_host -m group -a ‘name=test state=present’
删除组:ansible test_host -m group -a ‘name=test state=absent’
5、与其他自动化运维工具比较
Ansible功能特点:
部署较为简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,对于运维人员使用门槛低。
- 被管控节点无需安装Agent
- 无服务端,使用是直接调用控制端命令或者脚本。
- 基于模块工作, 可以使用任意语言开发模块
- 基于yaml语法编写playbook
- 定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook是安全的
Ansible缺点:
- 学习成本:需要学习Ansible自定义的脚本语法规则。
- 安装成本:控制主机需是一台非Windows远程主机,也就是说至少要有1台远程Server。
- 易用性:因为必须有远程主控机,若本地有文件需同步,则需先将文件传输到对应的主控机,才能够做分发同步。
特点 | saltstack | ansible | BatchShell |
开发语言 | Python | Python | Java |
是否有客户端 | 有 | 无 | 有 |
是否支持二次开发 | 支持 | 支持 | 支持 |
服务器与远程机器是否相互验证 | 是 | 是 | 是 |
服务器与远程机器的通信是否加密 | 是,使用AES加密 | 是,使用OpenSSH | 是,使用OpenSSH、FTPS等多种加密协议 |
平台支持 | BSD, Linux , Mac OS X,Solaris,Windows | AIX , BSD , HP-UX , Linux,Mac OS X ,Solaris | AIX , BSD , HP-UX , Linux,Mac OS X, Solaris |
是否提供Web UI | 提供 | 商业版本提供 | 提供 |
配置文件格式 | YAML | YAML | 原生Shell |
命令行执行 | 支持 | 支持 | 支持 |
是否有客户端 | 有 | 无 | 有 |
是否支持二次开发 | 支持 | 支持 | 支持 |
可视化文本编辑、查询、替换 | 无 | 无 | 支持 |