Ansible是什么?
我们做应用部署的时候,最原始的方式是一台台机器远程过去,复制相应的文件,启动相应的命令,应用就起来了。后来就有脚本, 有相应的工具支撑应用的一键部署。Ansible就是其中一个。
Ansible是一个自动化的运维工具,可以部署远程主机。远程主机可以是远程虚拟机或物理机,也可以是本地主机。Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上来说,只要管理员通过SSH登录到一台远程主机上的能做的操作,Ansible都可以做到。
通俗一点来说,就是通过Ansible可以管理一群机器,对这些机器进行操作。 它的特点在于:
- 拥有模块化的设计,Ansible能够调用特定的模块来完成待定的任务,本身是核心组件,短小精悍;
- Ansible的部署比较简单,agentless无客户端工具;
- 以主从模式式作;
- 支持自定义模块功能;
- 支持playBook,连续任务按先后顺序完成;
- 期望每个命令都有幂等性;
同类型的工具有:Puppet, SaltStack, Chef。找的时候大概看过SaltStack。其它的不了解了。
github地址:github.com/ansible/ans…
Ansible的安装
管理员的机器:
- 安装Ansible软件
$ # Redhat/CentOS Linux上,Ansible目前放在的epel源中
$ # Fedora默认源中包含ansible,直接安装包既可
$ sudo yum install epel-release
$ sudo yum install ansible -y
- 配置Ansible管理节点和主机的连接
$ # 生成ssh key
$ ssh-keygen
$ # 拷贝ssh key到远程主机,ssh的时候就不需要输入密码了
$ ssh-copy-id remoteuser@remoteserver
$ # ssh的时候不会提示是否保存key
$ ssh-keyscan remote_servers >> ~/.ssh/known_hosts
验证的话,可以通过下面的命令进行测试验证
$ ssh remoteuser@remoteserver
被管理的远程主机: 不需要安装特殊的包,只需要Python>2.4, 一般的linux系统都会默认安装。
Ansible 例子
- Ansible Hello World 设置好ssh后,直接在管理节点上运行如下命令:
$ ansible all -a "/bin/echo helloWorld"
这样会在所有机器上打印输出 helloWorld。
- Ansible PlayBook例子 Ansible执行playBook的脚本
$ansible-playbook deploy.yml
下面是一个稍微详细的例子:
- 安装apache包
- 拷贝配置文件httpd,并保证拷贝文件后,apache服务会被重启
- 拷贝默认的网页文件index.html
- 启动apache服务
# hosts-主机IP,主机组名(Inventory里配置的)或关键字all。
- hosts: web
vars:#变量定义
http_port: 80
max_clients: 200
remote_user: root #远程操作用户名
tasks: #tasks-要执行的任务列表
- name: ensure apache is at the latest version #执行任务的描述
yum: pkg=httpd state=latest
- name: Write the configuration file
template: src=templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify:
- restart apache #执行完成后要通知的hanler
- name: Write the default index.html file
template: src=templates/index.html.j2 dest=/var/www/html/index.html
- name: ensure apache is running
service: name=httpd state=started
handlers: #要处理的Handler列表
- name: restart apache
service: name=httpd state=restarted
Ansible相关概念
- Host Inventory:主机清单文件,告诉Ansible管理哪些server, 和Server的分类分组信息。默认文件在/etc/ansible/hosts。
- Playbook:是可以被ansible执行的yml文件,ansible管理主机有两种方式:Ad-Hoc Commands(命令行的方式),Playbook。Playbook更强大,可以设置更多的参数。
- Role:Playbook中的“Package”, 可以重用一组文件形成完整的功能。
- Ansible Tower: 提供图形化的配置页面去配置或管理Ansible脚本。可以在本地部署,但是联系官方提供授权。
参考资料
- getansible.com/
- galaxy.ansible.com:Ansible共享平台