ansible自动部署
Ansible是一种IT自动化工具。它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新。Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言,可以完美地描述IT应用程序基础结构。
1.简介
Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile。
ansible 基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
- 连接插件connection plugins:负责和被监控端实现通信;
- host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
- 各种模块核心模块、command模块、自定义模块;
- 借助于插件完成记录日志邮件等功能;
- playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
示意图
2.安装与使用
环境
服务 主机名称 IP地址 服务端 master 192.168.2.3 客户端 node1 192.168.2.4 客户端 node2 192.168.2.5 服务端安装ansible
1
2
3
4
5
6
7
8
9yum install -y epel-release
yum install ansible -y
//查看ansible的版本
ansible --version
yum install -y tree
tree /etc/ansible/配置公私钥
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17ssh-keygen -t rsa
将生成的公钥发给所有机器,包括自己
ssh-copy-id root@192.168.2.3
ssh-copy-id root@192.168.2.4
ssh-copy-id root@192.168.2.5
---这样的话从3访问4和5就都不要输入密码了
4. 配置hosts文件
```shell
vim /etc/ansible/hosts
[webserver]
192.168.2.4
192.168.2.5主机连通测试
1
2
3
4
5
6
7
8
9
10
11
12ansible webserver -m ping
[root@c1 ~]# ansible webserver -m ping
192.168.2.4 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.2.4 | SUCCESS => {
"changed": false,
"ping": "pong"
}常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18ansible-doc -l #查看支持的模块
ansible-doc -s MODEL_NAME #查看模块用法
ansible命令应用基础
ansible <host-pattern> [options]
-f fork:启动并发 线程数
-m model_name:要使用的模块
-a args:特有的参数
ansible all -m ping #查看client端是否正常ping通
ansible webserver -m setup #查看客户端信息
ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test' #copy文件到client端
ansible webserver -m user -a "name=test state=present" #创建test用户
ansible webserver -m user -a "name=test state=absent" #删除test用户
ansible webserver -m yum -a 'name=epel-relese state=latest' #yum安装
ansible webserver -m systemd -a 'name=httpd state=stopped enabled=no' #停止httpd服务
ansible webserver -m script -a '/tmp/test,sh' #运行脚本
ansible webserver -m command 'date' #查看时间
3. playbook
- 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作的时候,执行的ad-hoc命令是不合适的,这时候最好使用playbook。
- 就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式
- 使用playbook可以方便的重复使用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写playbook,之后管理服务器会变得很简单。
例如一个安装并运行nginx的任务:
1 |
|
运行
1 | [root@ansible ansible]# ansible-playbook nginx.yml |
以上只是一个简单的实现,使用ansible还能做更加复杂的事情。