ansible的安装及常用模块详解
一、ansible简介
1.1 什么是ansible
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile。
1.2 ansible的特点
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 有大量常规运维操作模块,可实现日常绝大部分操作;
- 配置简单、功能强大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
1.3 ansible模块
- Ansible:Ansible核心程序。
- HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
- Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
- CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
- CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
- ConnectionPlugins:连接插件,Ansible和Host通信使用
二、安装ansible
ansible安装在管理端,管理后端节点,而在节点上无需进行操作
2.1、安装epel源
1 yum -y install epel-release
2 yum -y install ansible
3 #查看ansible版本
4 ansible --version
2.2、树状结构展示工作目录
1 tree /etc/ansible/
2 /etc/ansible/
3 ├── ansible.cfg #ansible的配置文件
4 ├── hosts #ansible的主仓库,用于存储需要管理的远程主机的相关信息
5 └── roles #角色
2.3、配置主机清单
1 vi /etc/ansible/hosts
2 添加主机模块
3 可对节点进行分组,便于针对性的统一管理
4 [webserver] #设置组名
5 20.0.0.20 #节点ip
6 20.0.0.30
7 [mysql]
8 20.0.0.40
9
10 [webserver2] #一般用FQDN,完全合格域名,像www.baidu.com
11 www1.example.org #定义被监控主机,需要修改/etc/hosts文件
12 www2.example.org:2222 #冒号后定义远程连接端口,默认是ssh的22端口
13 www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456
14 #列表方式标识主机,代表50台节点,www01到www50的主机。以root和123456密钥ssh登录,此方式不安全
15 db-[a:f].example.org #也支持匹配a b c ... f,代表六台主机
2.4、主机清单变量
①主机变量
[webserver]
www1.magedu.com http_port=80 maxRequestsChild=808
www2.magedu.com http_port=8080 maxRequestsChild=909
②组变量
[servers:vars]
ntp_server=ntp.example.org
nfs_server=nfs.example.org
③组嵌套
[apache]
http1.example.org
http2.example.org
[nginx]
ngx1.example.org
ngx2.example.org
[webservers:children] #可包含多个主机组
apache
nginx
④inventory变量参数
1 ansible_ssh_host 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
2 ansible_ssh_port ssh端口号.如果不是默认的端口号,通过此变量设置.
3 ansible_ssh_user 默认的 ssh 用户名
4 ansible_ssh_pass ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
5 ansible_ssh_private_key_file ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
6 ansible_ssh_common_args 此设置附加到sftp,scp和ssh的缺省命令行
7 ansible_sftp_extra_args 此设置附加到默认sftp命令行。
8 ansible_scp_extra_args 此设置附加到默认scp命令行。
9 ansible_ssh_extra_args 此设置附加到默认ssh命令行。
10 ansible_ssh_pipelining 确定是否使用SSH管道。 这可以覆盖ansible.cfg中得设置。
11 ansible_shell_type 目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
12 ansible_python_interpreter 目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
13 ansible_*_interpreter 这里的"*"可以是ruby 或perl 或其他语言的解释器,作用和ansible_python_interpreter 类似
14 ansible_shell_executable 这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh。
2.5、配置密钥对验证
与所要管理的节点,进行密钥对验证,可ssh登录节点
1 ssh-keygen -t rsa #回车,输入密钥密码
2 ssh-copy-id root@20.0.0.20 #输入20节点密码
2.6、配置免交互代理(临时的不需要输入密码就可执行ansible)
1 ssh-agent bash
2 ssh-add #输入密钥密码
三、ansible的命令行模块
ansible命令格式
1 ansible 主机标识(IP) -m 模块 -a ‘参数’ 默认模块是command
常用模块
1 ----cron---周期性计划任务
2 ansible-doc -s 模块名 #模块用法
3 ansible -m cron -a 'minute=*/1 job=/usr/bin/echo ... name=test1'
4 ansible -m cron -a 'name=test1 state=absent' #删除任务
5
6 ----user---用户设置
7 ansible -m user -a 'name=aa uid=1111' #创建用户
8 ansible mysqI -m user -a 'name="test01" state=absent' #删除用户
9
10 ----group---组设置
11 ansible mysqI -m group -a 'name =mysq| gid=306 system=yes'
12 ansible mysqI -m user -a 'name=test01 uid= 306 system=yes group=mysql'
13 ansible mysq| -a 'id test01'
14
15 ----copy---拷贝工具,也可创建由内容的文件,无法使用path
16 ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' #将本地文件拷贝至节点, fetch与之相反,将节点文件拷贝至管理端(本地)
17 ansible mysqI -m copy -a 'content="hello heihei!" dest =/opt/fstab.back' #创建有内容的文件
18
19 ----file---文件操作,建立空文件,目录
20 ansible mysq| -m file -a 'owner=mysq| group=mysqI mode= 644 path=/opt/fstab.back'
21 ansible mysqI -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link' #软链接
22 ansible mysql -m file -a 'path=/opt/fstab.back state=absent' #删除
23 ansible mysqI -m file -a 'path=/opt/test state=touch' #建空文件
24 ansible webserver -m file -a ' path=/opt/temp state=directory mode=755'
25
26 ----ping---用在检测管理端与节点的连通性
27 ansible all -m ping
28
29 -----yum----安装卸载工具
30 ansible mysql -m yum -a 'name=httpd'
31 ansible mysql -m yum -a 'name=httpd state=absent' #卸载
32 ansible mysql -a 'rpm -q httpd'
33
34 ----service---服务模块
35 ansible webserver -a 'systemctl status httpd' //查看web服务器httpd运行状态
36 ansible webserver -m service -a 'enabled=true name=httpd state= started' #开机自启,并开启
37 ansible all -m service -a 'name=firewalld state=stopped' //关闭防火墙
38
39 ----shell---与command有区别
40 shell #可执行多条语句,支持重定向,而command只支持追加,一条语句
41 chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
42 creates: 指定一个文件,当指定的文件存在时,就不执行对应命令,还是会进行创建文件
43 removes:使用此参数指定-个文件,当指定的文件不存在时,就不执行对应命令。
44 ansible mysqI -m shell -a 'chdir=/opt/share echo heihei > heihei.txt'
45 ansible mysqI -m shell -a 'chdir=/opt/share Is'
46
47 ----script----用于执行脚本
48 vi test.sh //在ansible管理端创建脚本
49 #!/bin/bash
50 echo "hello ansible from script" > /opt/script.txt
51 chmod +x test.sh
52 ansible all -m script -a 'test.sh' #可在多主机批量执行
53
54 ----setup----
55 ansible mysq| -m setup #获取mysq|组主机的facts信息