Ansible服务
第1章 Ansible介绍
1.1 什么是Ansible?
ansible
是一种自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,默认通过SSH协议管理机器。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架,不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
1.2 为什么需要Ansible?
批量管理功能:
1)可以实现批量系统操作配置
2)可以实现批量软件服务部署
3)可以实现批量文件数据分发
4)可以实现批量系统信息收集
管理服务意义:
1)提高工作的效率(部署综合架构)
2)提高工作准确度
3)减少维护的成本
4)减少重复性工作
ansible 安装部署简单:
1)没有配置文件(不需要配置)
2)不需要启动服务
3)客户端没有需要部署任务
第2章 ansible 安装部署
Ansible的安装部署十分简单,只需要在管理机yum安装就行
1 | [root@ssh-61 ~]# yum -y install ansible |
第3章 ansible 主机清单
主机资产清单 /etc/ansible/hosts
文件,用于定义被管理主机的认证信息, 例如 ssh 登录用户名、密码以及 key相关信息。
1 | 1.主机支持主机名通配以及正则表达式,例如 web[1:3].oldboy.com 代表三台主机 |
3.1 指定主机组相关配置
1 | #主机组 第一种方式 (已经配置好ssh) |
我们一般使用,先配置好ssh
服务,分发公钥后,再指定主机组
1 | [root@ssh-61 ~]# cat /etc/ansible/hosts |
第4章 ansible 常用模块
ansible 官方网站 : https://docs.ansible.com
模块的应用语法格式:
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) “执行什么动作”
4.1 ping
应用场景:测试主机和ansible之间的连通性
举例:对webserver主机组测试是否连通
1 | [root@ssh-61 ~]# ansible webserver -m ping |
4.2 command 简单模块
应用场景:
类似shell,但是只能执行简单的命令,复杂的命令和有些符号并不能识别,用的比较少
01.查看主机名,可以执行成功
1 | [root@ssh-61 ~]# ansible webserver -m command -a "hostname" |
02.使用awk拼接查看主机IP执行失败
1 | [root@ssh-61 ~]# ansible webserver -m command -a "ifconfig eth1|awk 'NR==2{print $2}'" |
4.3 shell 万能模块
万能模块,所有命令都可以执行,和本地执行效果一样
4.3.1 使用管道查询IP地址
1 | [root@ssh-61 ~]# ansible webserver -m shell -a "ifconfig eth1|awk 'NR==2'" |
4.3.2 批量执行脚本
在其他主机上创建一个脚本,内容为打印主机名
1 | cat > echo.sh << EOF |
然后使用ansible的shell模块批量执行
1 | [root@ssh-61 ~]# ansible webserver -m shell -a "/bin/bash /root/echo.sh" |
4.4 copy 拷贝文件
1.拷贝ssh-61的/etc/hostname文件到其他主机的/tmp目录下
1 | [root@ssh-61 ~]# ansible webserver -m copy -a "src=/etc/hostname dest=/tmp" |
2.在copy 文件时修改文件属主和属组信息
1 | [root@ssh-61 ~]# ansible webserver -m copy -a "src=/etc/hostname dest=/tmp owner=oldboy group=oldboy" |
3.在copy文件时修改文件的权限信息
1 | [root@ssh-61 ~]# ansible webserver -m copy -a "src=/etc/hostname dest=/tmp mode=0666" |
4.创建文件并直接写入内容
1 | [root@ssh-61 ~]# ansible webserver -m copy -a "content='oldboy' dest=/root/oldboy.txt" |
5.复制目录
src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制
1 | ansible webservser -m copy -a "src=/data dest=/data" |
src后面目录有/: 只将目录下面的内容都进行远程传输复制
1 | ansible webservser -m copy -a "src=/data/ dest=/data" |
参数说明:
1 | src #推送数据的源文件信息 |
4.5 file 设置文件属性
4.5.1 创建文件夹
1 | [root@ssh-61 ~]# ansible webserver -m file -a "path=/root/oldboy state=directory" |
4.5.2 创建文件并更改属性
1 | [root@ssh-61 ~]# ansible webserver -m file -a "path=/tmp/oldboy.txt state=touch mode=666 owner=oldboy group=oldboy" |
4.5.3 创建软链接
1 | [root@ssh-61 ~]# ansible webserver -m file -a "src=/root/oldboy.txt path=/root/oldboy.txt_link state=link" |
4.5.4 参数说明
1 | path #指定远程主机目录或文件信息 |
4.6 script模块
1 | # 编写脚本 |
4.7 cron定时任务模块
1.创建一条定时任务,添加定时任务时注释信息,防止重复,方便修改
1 | [root@ssh-61 ~]# ansible webserver -m cron -a "name='主机名' job='/bin/bash /root/echo.sh >/dev/null 2>&1'" |
2.删除相应定时任务
1 | [root@ssh-61 ~]# ansible webserver -m cron -a "name='主机名' state=absent" |
3.注释相应定时任务,使定时任务失效
1 | [root@ssh-61 ~]# ansible webserver -m cron -a "name='主机名' job='/bin/bash /root/echo.sh >/dev/null 2>&1' disabled=yes" |
4.8 user 和group
创建用户组
1 | [root@ssh-61 ~]# ansible webserver -m group -a "name=BBB gid=777 state=present" |
创建用户,并属于组BBB
1 | [root@ssh-61 ~]# ansible webserver -m user -a "name=BBB uid=777 group=777 shell=/sbin/nologin create_home=no" |
user参数说明:
1 | uid #指定用户的 uid |
group参数说明:
1 | name #指定创建的组名 |
4.9 yum
yum安装ntpdate服务
1 | [root@ssh-61 ~]# ansible webserver -m yum -a "name=ntpdate state=installed" |
参数说明:
1 | name #指定要安装的软件包名称 |
4.10 service
启动或关闭服务
1 | [root@ssh-61 ~]# ansible webserver -m service -a "name=nfs state=restarted enabled=yes" |
参数说明:
1 | name # 定义要启动服务的名称 |
4.11 mount
1 | ansible webservser -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults |
参数说明:
1 | present # 开机挂载,仅将挂载配置写入/etc/fstab |
4.12 unarchive 解压
1.解压远程服务器的压缩包到指定目录
远程backup服务器创建压缩包:
1 | [root@backup ~]# cd / && tar zcf /root/sys.tar.gz etc/fstab etc/hosts |
ansible本地执行命令
1 | [root@ssh-61 ~]# ansible backup -m unarchive -a "src=/root/sys.tar.gz dest=/tmp/ remote_src=yes" |
2.把本地文件解压到目标机器指定目录
创建命令
1 | [root@ssh-61 ~]# cd / && tar zcf /root/sys.tar.gz etc/fstab etc/hosts |
执行命令
1 | [root@ssh-61 ~]# ansible nfs -m unarchive -a "src=/root/sys.tar.gz dest=/backup/" |
4.13 archive 压缩
压缩单个文件
1 | [root@ssh-61 ~]# ansible nfs -m archive -a "path=/root/1.txt dest=/tmp/1.tar.gz format=gz force_archive=true" |
4.14 setup
1 | [root@ssh-61 ~]# ansible webserver -m setup |
第5章 查看帮助
1 | ansible-doc -l #查看所有模块说明信息 |
第6章 ansible输出信息颜色解释
1 | 01. 绿色信息: 查看主机信息/对主机未做改动 |