kuuty 发表于 2016-4-14 13:04:12

自动化运维工具之ansible

一、什么样的情形需要批量部署1、操作系统的安装常见的有collber,red hat satelite(redhat)系统专用。2、操作系统的配置常见的有cfengine,puppet,chef,func。其中puppet最受欢迎3、批量程序的部署4、批量命令的运行查看状态信息二、ansible介绍ansible的架构大致如下ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。
运维工具常见的工作模式
1、agent模式: 基于ssl实现。代理工作在被监控端。像puppet。
2、agentless模式: 基于ssh服务实现工作在被监控端。监控端是ssh的客户端。

ansible是工作在agentless模式下具有幂等性。ansible在控制端只需要告诉监控端的期望状态就可以实现批量部署。名词解释
幂等性不会重复执行相同的指令。例如不会重复安装软件
期望状态只需要告诉被监控端的期望状态
ansible是基于模块工作的ansible本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块ansible只是提供一种框架。架构包括
[*]连接插件connection plugins负责和被监控端实现通信。
[*]Host Inventory:指定操作的主机,是一个配置文件里面定义监控的主机
[*]各种模块核心模块command模块自定义模块
[*]借助于插件完成记录日志邮件等功能
[*]PlayBooks:剧本执行多个任务时。并非必需可以让节点一次性运行多个任务
三、ansible的基本使用
安装软件yum install ansible -y # 对应的软件在 epel 仓库中也可自己手动编译

查看模块
ansible-doc -l
ansible-doc -s 模块名

ansible <Host-partten> [-f forks][-m module_name][-a args]
                        -f forks: 启动时并线程
                                     -m module_name 要使用的模块
                                                       -a args:模块参 常见模块:command:默认模块,用来执行远程命令
# ansible all -m command -a 'cat /etc/passwd
# ansible all -a 'date'
# ansible 192.168.2.35 -m command -a 'yum remove mysql -y'

查看模块参数
# ansible-doc -s 模块名

cron:计划模块
ansible 192.168.2.35 -m cron -a 'minute="*/10" job="/bin/echo fcuk you" name="test cron job"'
         present:安装
                     absent:移出

user模块,用来添加删除用户
# ansible all -m user -a 'name=test1'
# ansible all -m user -a 'name=test1 state=absent'移除user

group 组模块,添加删除组
# ansible all -m group -a 'name=mysql gid=306 system=yes'

copy 模块,拷贝文件
   sec:本地源文件路径
   dest:远程存取路径
   content:取代src=,直接用来生成目标文件内容。
# ansible all -m copy -a 'src=/etc/fstab dest=/tmp/'
# ansible all -m copy -a 'content="Hello\nHi test.com" dest=/tmp/test.txt'

file 模块,主要用来改权限,做连接,
范例:把文件fstab 属主改成mysql 组改为mysql 权限是600
ansible 192.168.2.35 -m file -a 'owner=mysql mode=600 group=mysql path=/tmp/fstab'

给fstab创建一个连接fstab.link
src=:源文件
path=:产成符号连接的路径
# ansible 192.168.2.35 -m file -a 'path=/tmp/fstab.link src=/tmp/fstab state=link'

ping模块远程主机在线否
# ansible all -m ping

service模块指定运行的程序:
enabled=:是否开机自启动,取值为ture或者false;
name=:服务器名
state=状态,取值有started,stoped,restarted
# ansible-doc -m service
# ansible all -a 'service httpd status'
# ansible all -a 'chkconfig --list httpd'

# ansible-doc -s shell
shell 模块:在远程主机上运行模块,尤其用到管道有等功能时
范例:创建user1用户并添加密码
# ansible web1 -m user -a 'user=user1'
# ansible web1 -m shell -a 'echo 123456 | passwd --stdin user1'

script模块
# ansible-doc -s script
将本地脚本复制到远程并运行
# ansible web1 -m script -a '/root/test.sh'

yum模块:
# ansible-doc -s yum
   name=:指明安装的软件名,可以带上版本号
   state=absent:卸载
# ansible all-m yum -a ’name=mysql-server‘
# ansible all-m yum -a ‘name=mysql-server state=absent’

setup:收集远程的facts
       facts:每个被管理主机在被管理前,会把自己主机相关信息报告给ansible主机


页: [1]
查看完整版本: 自动化运维工具之ansible