Ansible学习笔记-入门

366 阅读3分钟

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

下面是一个稍微详细的例子:

  1. 安装apache包
  2. 拷贝配置文件httpd,并保证拷贝文件后,apache服务会被重启
  3. 拷贝默认的网页文件index.html
  4. 启动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脚本。可以在本地部署,但是联系官方提供授权。

参考资料