Ansible: 自动化管理IT资源的工具(实现语言:python)
功能:1:系统环境配置
2:安装软件
3:持续集成
4:热回滚
优点:
1:无客户端
2:推送式
3:丰富的module模块
4:基于YAML的playbook
5:商业化支持,比较稳定
缺点:
1:基于ssh,效率低
一、ansible的安装
环境准备 1python的解释器。
pip安装:1 安装pip easy_install pip
2 安装ansible pip install ansible
源码安装:1 获取源码、(从githup下载源码)
2 source ./hacking/env-setup
从系统的源安装 centos yum install ansible
ubantu
安装ansible源 然后安装ansible
1) apt-get install software-properties-common
2) apt-add-repository ppa:ansible/ansible
3) apt-get update
4) apt-get install ansible
二、ansible运行
ansible配置文件 ansible工具寻找配置文件的优先级
* export ANSIBLE/CONFIG(全局变量文件)
* ./ansible.cfg
*~/.ansible.cfg
* /etc/ansible/ansible.cfg
如果没找到,会在ansible默认路径创建一个配置文件
ansible配置文件详解:https://www.imooc.com/video/15232
添加机器
1 编辑/etc/ansible/hosts (如果没有该文件可以创建)
2 添加本机的公钥到目标机器的authorized_keys
3 将本机的私钥到ansible(可省略)
4 ansible all -m ping(测试是否成功)
* ansible all -m ping 命令解析 ansible 命令主体 all 正则表达式 去hosts文件匹配需要操作的服务器
-m ping 指定要使用的模块 4 传入的参数:(此处没用) eg ansible all -a "ls"
ansible 默认的是command模块,可以执行shell命令 此时 -a 指定将"ls" 当成参数传递给command模块
所以ls能在目标机器执行成功
ansible ip1:ip2 -m ping 两台服务器中间用:隔开
-a 指定传入模块的参数
-C -D 两个一起使用就,检查hosts规则文件的修改
-I 限制匹配的主机数
--list-hosts 显示所有匹配的主机数
-m -M 指定所使用的模块和模块路径
--syntax-check 检查语法
-v 显示详细的日志
hosts主机分组 Inventory(对所管理服务器进行分组,默认路径为/etc/ansible/hosts)
eg
10.113.190.12
[webservers]
10.113.190.12
10.113.190.12
上面三台服务器,第一台不属于任何一个组,中括号里面是一个组名,里面包括下面两台机器,中括号下面的机器都属于总括号这个组 操作时候 ansible webservers -a "ls" 如果ssh不是22端口 可在ip后面加:port
如果多个都是一样的端口,可以起别名
jumper ansible_ssh_port=5555 ansible_ssh_host=192.168.1.60 ansible_ssh_user=pa 指定端口,ip,用户名
ansible_ssh_pass 密码 ansible_sudo_pass sudo密码 ansible_sduo_exe_sudo sudo路径
机器太多,但是连续的,写起来比较麻烦
10.113.190.[1:50] 1到50
vim[a-f].com a到f
ad-hoc
* 这其实是一个概念性的名字,是相对于ansible playbook来说的,类似于在命令行敲入shell命令和写shell scripts两者之间的关系
* 如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些命令特别保存下来,这样的命令就叫做ad-hoc命令。
eg ansible atlanta -a "/sbin/reboot" -f 10
解析:这个命令中,atlanta是一个组,这个组里面有很多服务器,"/sbin/reboot"命令会在atlanta组下所有服务器执行。这里ssh-agent会fork出10个子进程(bash)以并行的方式执行reboot命令。每次重启10个。
指定用户使用shell命令
ansible webservers -a "/usr/bin/foo" -u username --sudo[--ask-sudo-pass]
创建文件夹
ansible webservers -m file -a "dest=/path/to/chmod=755 owner=python group=python state=directory"
拷贝文件夹
ansible webservers -m copy -a "src=/etc/hosts dest=/tmp/hosts"
软件包管理
确认一个软件包已经安装但不想升级
ansible webservers -m yum -a 'name=acme state=present'
确认一个软件包还没有安装
ansible webservers -m "yum" -a "name=acme state=absent"
模块 git模块 services模块 setup模块
如果执行一个耗时的模块
ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"
-B 1800 表示最多运行60分钟 -P 0 表示不获取状态
palybook简介
playbook是一种简单的配置管理系统与多机器部署系统的基础,与现有的其他系统有不同之处,且非常适合于复杂应用的部署。
playbook可用于声明配置,更强大的地方在于,在playbook中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤。并且可以同步或异步的发起任务。
比较复杂(暂时不了解)