目录
一、安装部署
二、 配置
Ansible最基础的模块为ping模块,主要用于判断远程客户端是否在线,用于ping本身服务器,返回值为changed、ping。
三、ansible批量管理
Ⅰ、shell模块
Ⅱ、copy模块
Ⅲ、yum模块
Ⅳ、file模块
Ⅴ、cron模块
Ⅵ、user模块
Ⅶ、service模块
Ⅷ、synchronize
四、ansible剧本
yum install epel-release
#Centso 需要设置EPEL仓库
yum install ansible
#安装ansible
ansible --version
#查看ansible版本
测试环境
ansible 192.168.116.26
test server 192.168.116.27
cd /etc/ansible
ls
ansible.cfg hosts roles
在hosts文件中写入记录
如果想要对主机组使用root权限的操作,需要做以下设置
vim /etc/ansible/ansible.cfg
然后在./hosts文件中相应主机组下进行设置
[test]
192.168.11.13 ansible_become_pass=12345678
192.168.11.14 ansible_become_pass=12345678
或者
[test]
192.168.11.13
192.168.11.14
[test:vars]
ansible_become_pass=12345678
分发ssh密钥
ssh-keygen -t rsa
ssh-copy-id 192.168.116.27
测试组群testserver下的机器能否ping通
ansible -i /etc/ansible/hosts 'testserver' -m ping
或者ping某一网段的机器
ansible 192.168.116.* -w ping
# Ansible shell模块主要用于远程客户端上执行各种Shell命令或者运行脚本,远程执行命令通过/bin/sh环境来执行,支持比command更多的指令,Shell模块使用详解:
# 常用参数
chdir 执行命令前,切换到目录;
creates 当该文件存在时,则不执行该步骤;
executable 换用shell环境执行命令;
free_form 需要执行的脚本;
removes 当该文件不存在时,则不执行该步骤;
warn 如果在ansible.cfg中存在告警,如果设定了False,不会警告此行。
命令格式
ansible [组群名] -m shell -a "shell命令"
例如,创建目录/查看
ansible testserver -m shll -a "mkdir test;ls /"
# Ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能,copy模块使用详解:
# 常用参数
src Ansible端源文件或者目录,空文件夹不拷贝;
content 用来替代src,用于将指定文件的内容,拷贝到远程文件内;
dest 客户端目标目录或者文件,需要绝对路径;
backup # 拷贝之前,先备份远程节点上的原始文件;backup=yes
directory_mode 用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
follow 支持link文件拷贝;
force 覆盖远程主机不一致的内容;
group 设定远程主机文件夹的组名;
mode 指定远程主机文件及文件及的权限;
owner 设定远程主机文件夹的用户名,拥有者。
例如,将ansible主机上的文件复制到目标主机
ansible testserver -m copy -a "src=/test.txt dest=/ mode=755"
定义文件,目的位置和权限
#Ansible yum 模块主要用于软件的安装、升级、卸载,支持红帽.rpm软件的管理,YUM模块使用详解:
# 常用参数
conf_file 设定远程yum执行时所依赖的yum配置文件
disable_gpg_check 安装软件包之前是否坚持gpg key;
name 需要安装的软件名称,支持软件组安装;
update_cache 安装软件前更新缓存;
enablerepo 指定repo源名称;
skip_broken 跳过异常软件节点;
state #软件包状态,包括:installed、present、latest、absent、removed。
下载 、卸载
ansible testserver -m yum -a "name=httpd state=installed/removed"
# Ansible file模块主要用于对文件的创建、删除、修改、权限、属性的维护和管理,File模块使用详解:
# 常用参数介绍
src Ansible端源文件或者目录;
follow 支持link文件拷贝;
force 覆盖远程主机不一致的内容;
group 设定远程主机文件夹的组名;
mode 指定远程主机文件及文件及的权限;
owner 设定远程主机文件夹的用户名;
path 目标路径,也可以用dest,name代替;
state #状态包括:file、link、directory、hard、touch、absent;
attributes 文件或者目录特殊属性。
创建文件或目录,可以指定文件/目录名、权限以及所属
ansible testserver -m file -a "path=/opt/test.txt state=directory/touch
mode=644 owner=paul "
# Ansible cron模块主要用于添加、删除、更新操作系统Crontab任务计划,Cron模块使用详解:
# 常用参数
name 任务计划名称;
cron_file 替换客户端该用户的任务计划的文件;
minute 分( 0-59 ,* ,*/2 );
hour 时( 0-23 ,* ,*/2 );
day 日( 1-31 ,* ,*/2 );
month 月( 1-12 ,* ,*/2 );
weekday 周( 0-6 或 1-7 ,* );
job 任何计划执行的命令,state要等于present;
backup 是否备份之前的任务计划;
user 新建任务计划的用户;
state 指定任务计划present、absent。
例如:
一分钟一次的输出yes到test.txt中
ansible testserver -m cron -a "name='cornname' minute=1 job='/sbin/echo yes >> test.txt'"
# Ansible user模块主要用于操作系统用户、组、权限、密码等操作,user模块使用详解:
system 默认创建为普通用户,为yes则创建系统用户;
append 添加一个新的组;
comment 新增描述信息;
createhome 给用户创建家目录;
force 用于删除强制删除用户;
group 创建用户主组;
groups 将用户加入组或者附属组添加;
home 指定用户的家目录;
name 表示状态,是否create、remove、modify;
password 指定用户的密码,此处为加密密码;
remove 删除用户;
shell 设置用户的shell登录环境;
uid 设置用户id;
update_password 修改用户密码;
state 用户状态,默认为present表示新建用户。absent表示删除
例如,创建一个mysql用户
ansible testserver -m user -a "name=mysql home=/usr/local/mysql
shell=/sbin/nologin"
# Ansible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等,service模块使用详解:
# 常用参数
enabled 是否开启启动服务;
name 服务名称;
runlevel 服务启动级别;
arguments 服务命令行参数传递;
state 服务操作状态,状态包括started, stopped, restarted, reloaded。
与yum类似
例如,组群开启nginx服务,并加入开机自启
ansible testserver -m service -a "name=nginx.service state=started enabled=yes"
# Ansible synchronize模块主要用于目录、文件同步,基于Rsync命令同步目录,Synchronize模块使用详解:
# 常用参数
compress 开启压缩,默认为开启;
archive 是否采用归档模式同步,保证源和目标文件属性一致;
checksum 是否效验;
dirs 以非递归的方式传输目录;
links 同步链接文件;
recursive 是否递归yes/no;
rsync_opts 使用rsync 的参数;
copy_links 同步的时候是否复制连接;
delete 删除源中没有而目标存在的文件;
src 源目录及文件;
dest 目标目录及文件;
dest_port 目标接受的端口;
rsync_path 服务的路径,指定 rsync 命令来在远程服务器上运行;
rsync_timeout 指定rsync操作的IP超时时间;
set_remote_user 设置远程用户名;
--exclude=.log 忽略同步.log结尾的文件;
mode 同步的模式,rsync同步的方式PUSH、PULL,默认都是推送push。
# 将本地/tmp 目录远程同步到 docker服务器上(增量同步)
ansible docker -m synchronize -a 'src=/tmp/ dest=/tmp/'
# 完全同步
ansible docker -m synchronize -a 'src=/tmp/ dest=/tmp/ delete=yes'
通过Playbook任务,能够集中管理多个任务,将多个任务关联起来,从而实现更加复杂工作,满足生产环境的各个需求,提高运维人员管理服务器效率;Playbook剧本的产物YAML文件,类似XML接口(Tomcat)文件,内部有固定语法、参数等,要掌握常用的YAML语法编写,掌握满足运维管理方向的语法即可
运行剧本命令:ansible-playbook **.yaml