Ansible简介及使用

Ansible简介及使用

一、Ansible简介

1. 什么是Ansible

Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。主要包括:

  1. 连接插件connection plugins:负责和被监控端实现通信;
  2. host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  3. 各种模块核心模块、command模块、自定义模块;
  4. 借助于插件完成记录日志邮件等功能;
  5. playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

2. Ansible安装

Ansible默认通过 SSH 协议管理机器.

安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库.只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的机器.在远程被管理的机器上,不需要安装运行任何软件

2.1 Ansible安装要求
2.1.1 管理节点的要求

目前,只要机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.

主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本,等等.

自2.0版本开始,Ansible使用了更多句柄来管理它的子进程,对于OS X系统,你需要增加ulimit值才能使用15个以上子进程,方法 sudo launchctl limit maxfiles 1024 2048,否则你可能会看见”Too many open file”的错误提示.

2.1.2 托管节点要求

通常我们使用 ssh 与托管节点通信,默认使用 sftp.如果 sftp 不可用,可在 ansible.cfg 配置文件中配置成 scp 的方式. 在托管节点上也需要安装 Python 2.4 或以上的版本.如果版本低于 Python 2.5 ,还需要额外安装一个模块:

  • python-simplejson
2.2 Ansible安装
sudo yum install ansible

注释:Ansible支持多种安装方式,参考Ansible安装

3. Ansible使用

3.1 配置inventory

Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts。
除默认文件外,你还可以同时使用多个 inventory 文件,可以在/etc/ansible/ansible.cfg配置。

一个主机文件的例子:

some_host         ansible_ssh_port=2222     ansible_ssh_user=manager

#主机分组
[group1]
some_host         ansible_ssh_port=2222     ansible_ssh_user=manager
aws_host          ansible_ssh_private_key_file=/home/example/.ssh/aws.pem

#主机分组
[group2]
freebsd_host      ansible_python_interpreter=/usr/local/bin/python
ruby_module_host  ansible_ruby_interpreter=/usr/bin/ruby.1.9.3

inventory的参数说明:

ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user
      默认的 ssh 用户名

ansible_ssh_pass
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
      sudo 命令路径(适用于1.8及以上版本)

ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.

ansible_ssh_private_key_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_shell_type
      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.

ansible_python_interpreter
      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).

      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

更多Inventory信息,Inventory文件

3.2 控制托管节点

Ansible提供两种方式控制托管节点:

  • Ad-Hoc Commands
  • Playbooks
3.2.1 Ad-Hoc Commands

Ad-Hoc Commands 可以理解为简短地指令,以常见的 ping 为例。

$ ansible all -m ping
server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
3.2.2 Playbooks

Playbook 就字面上的意思为剧本。我们可以通过事先写好的剧本 (Playbooks) 来让各个托管节点进行指定的动作 (Plays) 和任务 (Tasks)。

简而言之,Playbooks 是 Ansible 的脚本 (Script),而且还是个比传统 Shell Script 还强大数百倍的脚本!

在一份 Playbook 中,可以有多个 Play、多个 Task 和多个 Module。

  • Play:通常为某个特定的目的,例如:
    • Setup a official website with Drupal (借由 Drupal 建置官网)
    • Restart the API service (重开 API 服务)
  • Task:是要实行 Play 这个目地所需做的每个步骤,例如:
    • Install the Nginx (安裝 Nginx)
    • Kill the djnago process (强制停止 django 的行程)
  • Module:Ansible 所提供的各种操作方法,例如:
    • apt: name=vim state=present (使用 apt 套件安装 vim)
    • command: /sbin/shutdown -r now (使用 shutdown 的指令重新开机)

如下,编写一个playbook:

$ vi hello_world.yml
---

- name: say 'hello world'
  hosts: all
  tasks:

    - name: echo 'hello world'
      command: echo 'hello world'
      register: result

    - name: print stdout
      debug:
        msg: ""

执行playbook:

ansible-playbook hello_world.yml

掌握上面的这些内容,基本上就可以使用Ansible控制托管节点了。Ansible还有一些进阶特性,如变量,module,Templates系统,Role等,如需了解,请参考Ansible中文权威指南

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值