2014技术雷达之Ansible简介
介绍
Ansible是一个开源的基于Python的服务器配置管理工具。
在众多配置管理工具中,最著名的当属Puppet, Chef, Salt和Ansible这四大金刚。
其中Puppet最老牌,开创了配置管理软件这一领域。其初始版本发布于2005年,由ruby实现而成。 Chef后来据上,初始版本发布于2009年,由ruby和erlang实现而成。 Salt和Ansible算是后起之秀,近两年成长势头很猛。它们都是由python实现而成的。
本文主要介绍Ansible,它是由Puppet的前员工自立门户而创建的,相比其它几位,有一些独门秘籍。
不得不说,随着云计算的飞速发展,管理配置工具也得到了突飞猛进的进步,大大简化了云服务器的管理。 依靠它,可以帮你简化以下这些工作:
- 应用部署
- 应用配置管理
- 持续部署,将CI生成的包部署到远程服务器
- 管理AWS
- 管理Docker容器
工作原理
Ansible默认使用SSH来管理机器。
一旦Ansible安装后,它不需要添加数据库,也不会有守护进程启动或在后台运行。 你只需要在一台机器上安装,然后它可以以该机器为中心管理多台远程机器。 当Ansible管理远程机器时,它不需要在远程机器上安装软件,所以也不用考虑Ansible版本升级的问题。
用作管理的机器成为控制机器(Control Machine),被管理的机器称为管理节点(Managed Node)。
macOS安装
使用Homebrew来安装最新版本,目前最新版本是2.4(2017-12-28)
brew install ansible
Linux安装
我们以Ubuntu 12.04操作系统为例,将Ansible安装到控制主机上。
通过APT-GET安装
配置
准备节点机器
先通过VirtualBox安装一个CentOS的虚机。 系统为CentOS 6.5。如果你使用过Vagrant的话,新建一个虚机将变得十分简单。
安装完成后,登录虚机,用ifconfig命令获取虚机的IP地址。假设IP为192.168.56.10,登录用户名为user。
配置节点机器地址
打开编辑/etc/ansible/hosts文件,将默认的地址都先注释掉,然后在[webservers]下面添加一行192.168.56.10。
$ sudo nano /etc/ansible/hosts
将SSH公钥添加到节点机器
如果你的机器当前用户下已经生成过SSH密钥对的话,则可以跳过这一步。否则请参考该网页的第一和第二步生成一个无密码的私钥和公钥。
接下来,需要将公钥添加到节点机器的authorized_keys文件中(~/.ssh/authorized_keys ),这样就可以通过SSH在不输入密码的情况下登录远程节点机器。 执行以下命令:
$ ssh-copy-id user@192.168.56.10
user就是节点机器已有的用户。
成功后,尝试输入$ ssh user@192.168.56.10
,看看是不是不需要输入密码就能远程登录该机器了。
最后结束该远程登录,输入$ logout
。
实践
第一个命令Ping
在命令行输入:
$ ansible all -m ping -u user
可以得到返回结果:
至此,我们已经成功地用ansible把控制主机和管理节点连接起来了。接下来我们要进行一些管理操作。
如果报错的话,说明你hosts文件有问题或者SSH密钥没有生成好。
随机命令
随机命令可以为我们提供以下功能来管理远程节点:
- 文件拷贝:
$ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"
- 安装包管理:
$ ansible webservers -m yum -a "name=acme state=removed"
- 用户和组管理:
$ ansible all -m user -a "name=foo password=<crypted password here>"
- 服务管理:
ansible webservers -m service -a "name=httpd state=started"
Playbook
前面介绍的随机命令,可以方便地进行节点机器的日常管理。 如果要执行批量操作来安装软件和部署应用的话,就需要借助Playbook了。
可以说Playbook是ansible的精髓所在。通过它可以实现很复杂的部署任务。
由于本文只是浅显的介绍,对Playbook的使用就不展开了。以后会写一些专题来分享一些实战经验。
下面我们直接使用ansible附带的例子来展示下它的强大。
Use playbook to install wordpress
用GIT克隆https://github.com/ansible/ansible-examples
可以输入以下命令:
接下去,等待命令结束后,一台部署了wordpress的服务器就好了。是不是很容易啊?
和Jenkins集成需要注意的地方
关于SSH密钥
如果ubuntu下是用apt-get安装jenkins的话,jenkins会被安装到var/lib/jenkins下。jenkins服务进程会用jenkins用户启动。
所有我们需要切换到jenkins用户后,再执行生成密钥和添加密钥到远程节点的操作。
可以使用如下命令切换到jenkins用户: $ sudo su - jenkins
。
这样就可以CD到var/lib/jenkins/.ssh去查看密钥情况了。
Job
编辑Job时,只需要选择执行Shell脚本任务,然后输入ansible或者ansible-playbook的命令行就可以了。