1、介绍
Ansible是一款IT自动化管理工具,它可以进行系统配置,应用部署,编排更先进的IT任务,如连续部署或零停机时间滚动更新.尽管市面上已经有很多可供选择的配置管理解决方案如puppet saltstack,但他们各有优劣,而 ansible 的特点就在于它的简洁。让ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。ansible默认是基于SSH进行通信的,所以ansible可以很轻松快捷地管理需要被管理的节点。这也是它所吸引我的地方。
大家都知道Facebook是世界上最大的社交网站,服务器数量惊人,具Facebook数据中心运维主管 Delfina Eberly介绍说,每个Facebook 数据中心的运维工作人员管理了至少 2万台服务器,就连她本人也要管理2万台的服务器 其中部分员工会管理数量高达 2万6千台。(最让我惊讶的是她竟然是位女性)如此庞大的数量如果不借助一些有效的解决方案,可能他们的服务器的数量和运维人员的数量就不是10000:1了。掌握一款自动化管理工具应该是运维人员所必要的一个技能了。 OK下面我们进入正题,这是我基于对ansible理解画出的一张结构图,我们可以分为左右两边来看,从图中可以看出来ansbile的核心还是比较简单的。下面我们来逐步讲解。
Control machine :管理控制中心,也就是我们的Ansible所在的机器,它可以存在在服务器上也可以存在我们的个人PC和笔记本上,如果你的个人设备硬件性能足够牛的话。ansible不需要像nginx一样启动服务才能工作,它就如同我们系统的ls命令一样,在命令行执行即可。足够方便吧!
managed node:被管理节点。在被管理节点上ansible所需要的环境也是非常的简单,系统只需要支持python2.5以上的版本即可,当然现在的linux支持python2.5以上的版本几乎都是可以的。
Control machine与managed node之间采用SSH来进行通信,所以在使用Ansible前需要先做密钥对认证。
Inventory file:主机清单,主机列表。是定义Ansible被管理主机信息的文件,它给ansible提供可执行对象的信息。这个文件需要自己手工定义编写,通常这个文件位于ansible安装目录下的hosts文件中。这里的hosts文件与我们系统中/etc/hosts完全是两回事情,请大家不要混淆。
playbooks:剧本 playbook是一个yml格式的文件,它通过调用Inventory file中定义的主机信息,把要对被管理节点操作的动作写playbook文件,和shell脚本有点类似。
注:Inventory file和playbooks文件编写会在之后的文章中讲到。
Ansible 有两种运作模式:Push和Pull Push是将ansible主机上的信息推送到被管理节点,而Pull模式刚好和Push相反,是在被管理节点从ansble拉取信息。ansible默认是用push模式。
2、安装Ansible
pip install ansible
yum install ansible
apt-get install ansible
brew install ansible
源码安装暂不作介绍,源码包可从Github获取
注:yum安装需要epel源
3、小试牛刀
Ansible安装完成后需要先与配管理节点配置密钥对认证
ansible生成公钥文件
-
[root@iC25zuql1azZ ~]ssh-keygen -t rsa
-
Generating public/private rsa key pair.
-
Enter file in which to save the key (/root/.ssh/id_rsa):
-
Created directory '/root/.ssh'.
-
Enter passphrase (empty for no passphrase):
-
Enter same passphrase again:
-
Your identification has been saved in /root/.ssh/id_rsa.
-
Your public key has been saved in /root/.ssh/id_rsa.pub.
-
The key fingerprint is:
-
0f:d9:e0:1b:ae:27:d9:41:ea:8c:c4:bb:8f:d9:47:24 root@iZ25zuql1bzZ
-
The key
配置Inventory file
-
vim /etc/ansible/hosts #添加如下三行
-
[test] #定义主机组名称
-
node1 192.168.1.2 #node1为被管理主机的别名
-
node2 192.168.1.3
这里的Inventory file先简单的进行配置一下,下篇详细讲解
-
[root@iC25zuql1azZ ~]# ansible test -m ping
-
node1 | SUCCESS => {
-
"changed": false,
-
"ping": "pong"
-
}
-
node2 | SUCCESS => {
-
"changed": false,
-
"ping": "pong"
-
}
Ping一下两台被管理的机器,返回“pong”则表示成功
查看远程主机/root/下的文件信息
-
[root@iC25zuql1azZ ~]# ansible test -m command -a "ls -l /root/"
-
node1 | SUCCESS | rc=0 >>
-
total 68
-
-rw------- 1 root root 918 May 13 14:19 test.letter
-
-rwxr-xr-x 1 root root 831 May 20 10:55 nginx.sh
-
-rw-r--r-- 1 root root 47313 Feb 26 13:24 dump.cnf
-
-
node2 | SUCCESS | rc=0 >>
-
total 4
-
-rw-r--r-- 1 root root 2266 Jun 12 16:00 dump.cnf
OK也是可以的
下面对ansible的参数做下介绍
ansibles是基于模块工作的,其自身自带很多内建模块,我们可以通过ansible-doc -l来查看内建模块
通过ansible-doc 模块名,来查看详细参数用法
ansible 主机名 -m 模块名 -a “模块参数”
不指定-m时 默认模块为command模块
阅读(2754) | 评论(0) | 转发(0) |