自动化运维—Ansible

Download Report

Transcript 自动化运维—Ansible

自动化运维—Ansible
常用自动化运维工具
• CFengine
• Chef
• Puppet
– 基于Ruby开发,采用C/S架构,扩展性强,基于SSL认证
• SaltStack
– 基于Python开发,采用C/S架构,相对于puppet更轻量级,配
置语法采用YMAL,使得配置脚本更为简单
• Ansible
– 基于Pyton开发,分布式,无需客户端,轻量级,配置语言采用
YAML
为什么选择Ansible
• 相对于puppet和saltstack,ansible无需客户端,更轻
量级
• ansible甚至都不用启动服务,仅仅只是一个工具,可以
很轻松的实现分布式扩展
• 更强的远程命令执行操作
• 不输于puppet和saltstack的其他功能
Ansible基本架构
Asible基本组成
• 核心:ansible
• 核心模块(Core Modules):这些都是ansible自带的模块
• 扩展模块(Custom Modules):如果核心模块不足以完成某种功能
,可以添加扩展模块
• 插件(Plugins):完成模块功能的补充
• 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在
剧本中,由ansible自动执行
• 连接插件(Connectior Plugins):ansible基于连接插件连接到各
个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持
其他的连接方法,所以需要有连接插件
• 主机群(Host Inventory):定义ansible管理的主机
ansible工作原理
ansible安装
• 配置好epel源
• yum install -y ansible
ansible常用模块
•
•
•
•
•
•
•
•
•
•
•
•
file:用于配置文件属性
yum:用于安装软件包
cron:配置计划任务
copy:复制文件到远程主机
command:在远程主机上执行命令
raw:类似于command模块,支持管道
user:配置用户
group:配置用户组
service:用于管理服务
ping:用于检测远程主机是否存活
setup:查看远程主机的基本信息
mount:配置挂载点
file
•
•
•
•
•
•
group:定义文件/目录的属组
owner:定义文件/目录的属主
mode:定义文件/目录的权限
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效
state:定义文件状态
– directory:如果目录不存在,创建目录
– touch:如果文件不存在,创建一个新文件
– absent:删除文件或目录
• 示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab
state=link"
–
ansible test -m file -a "path=/tmp/fstab state=absent"
–
ansible test -m file -a "path=/tmp/test state=touch"
–
yum
• enablerepo:启用某个源
• name:要进行操作的软件包的名字,也可以传递一个url
或者一个本地的rpm包的路径
• state:定义软件包状态
– present:安装
– absent:删除
– latest:安装最新的
• 示例:
ansible test -m yum -a 'name=httpd state=latest'
ansible test -m yum -a 'name="@Development tools"
state=present'
–
ansible test -m yum -a
'name=http://nginx.org/packages/centos/6/noarch/RPM
S/nginx-release-centos-6-0.el6.ngx.noarch.rpm
state=present'
–
–
cron
•
•
•
•
•
•
•
•
•
•
•
•
backup:对远程主机上的原任务计划内容修改之前做备份
day:日(1-31,*,*/2,……)
hour:小时(0-23,*,*/2,……)
minute:分钟(0-59,*,*/2,……)
month:月(1-12,*,*/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:
reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
示例:
–
–
ansible test -m cron -a 'name="check dirs" hour="5,2" job="ls -alh > /dev/null"'
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
copy
•
•
•
•
•
•
•
src:源文件
dest:目标路径
backup:覆盖之前,是否备份原文件
owner:设定文件/目录的属主
group:设定文件/目录的属组
mode:设定文件/目录的权限
示例:
– ansible test -m copy -a "src=/srv/myfiles/foo.conf
dest=/etc/foo.conf owner=foo group=foo mode=0644"
– ansible test -m copy -a "src=/mine/ntp.conf
dest=/etc/ntp.conf owner=root group=root mode=644
backup=yes"
command
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不
执行
• 示例:
•
•
•
•
– ansible test -a "/sbin/reboot"
service
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(
started,stopped,restarted,reloaded)
• 示例:
•
•
•
•
•
•
– ansible test -m service -a "name=httpd state=started
enabled=yes"
– ansible test -m service -a "name=foo pattern=/usr/bin/foo
state=started"
– ansible test -m service -a "name=network state=restarted
args=eth0"
user
•
•
•
•
•
•
•
•
•
•
home:指定家目录,需要createhome为yes
groups:用户组
uid:用户UID
password:指定用户密码
name:用户名
createhome:是否创建家目录
system:是否创建为系统用户
remove:但state=absent时,删除家目录
state:创建或者删除
shell:指定用户shell环境
模块帮助
• ansible-doc -l
• ansible-doc -s module_name