1.Ansible简介

1.1 Ansible介绍

Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。可以用来自动化部署应用、配置、编排 task(持续 交付、无宕机更新等),采用 paramiko 协议库(fabric 也使用这个),通过 SSH 或者 ZeroMQ 等连 接主机。

Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。Ansible的强大在于丰富的模块,目前已经存在的模块有750+,所有的功能是由ansible核心来调度,基于模块来完成和工作的。

1.2 Ansible结构

1.3 Ansible特性

(1)no agents:不需要在被管控主机上安装任何客户端;

(2)no server:无服务器端,使用时直接运行命令即可;

(3)modules in any languages:基于模块工作,可使用任意语言开发模块;

(4)yaml:使用yaml语言定制剧本playbook;

(5)ssh by default:基于SSH工作;

(6)strong multi-tier solution:可实现多级指挥

1.4 Ansible优点
  
(1)轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新操作即可;
  
(2)批量任务执行可以写成剧本(脚本),而且不用分发到远程就可以执行;
  
(3)使用python编写,维护更简单;
  
(4)支持角色(roles)
  
(5)支持sudo

1.5 Ansible工作机制

从图中可以看出ansible分为以下几个部份:

1> Control Node:控制机器

2> Inventory:主机清单,配置管理主机列表

3> Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行。

4> Modules(Core | Custom):模块,用于执行某个具体的任务

5> connection plugin(连接插件):Ansible通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机。

1.6 Ansible执行流程

简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

2.Ansible安装

2.1
安装要求
控制机的需求:
(1)控制机服务器系统:Linux系统
(2)控制机安装python2.6或者python2.7

说明:
由于目前python3.0及以上版本并没有在市场上普及使用,Ansible2.2对python3.0 有个技术预览版,本文章以python2.7 为例。

2.2
常用安装方式

2.2.1
基于redhat/centos安装

YUM安装
方法:
(1) 安装epel源
源地址:http://fedoraproject.org/wiki/EPEL,如下图:

进入epel源页面,选择相应的系统的安装源rpm包,下载之后进行安装,例如centos7.2 系统,
下载源地址为:https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

1 #wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2 #rpm -ivh epel-release-latest-7.noarch.rpm

或者yum install
epel-release (安装扩展yum库)

(2)
安装ansible
1 # yum install ansible -y
     等待完成安装即可。
(3) 测试安装,执行如下命令:
 [root@ ~]# ansible --version
ansible 2.3.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
如果能正确显示ansible的版本,则说明安装成功了。

2.2.2
基于ubuntu安装

PPA安装
方法:
(1)利用PPA软件包管理器进行安装,执行如下:
1 $ sudo apt-get install software-properties-common
2 $ sudo apt-add-repository ppa:ansible/ansible
3 $ sudo apt-get update
4 $ sudo apt-get install ansible
等待安装完成即可。

2.2.3
基于Debian安装
     方法:

Debian安装方式与ubuntu大致形同,也可以利用ubuntu的PPA进行安装;

(1)编辑/etc/apt/sources.list 文件,增加以下内容:

#vi /etc/apt/sources.list
deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main

(2)运行以下执行安装命令
1 $ sudo apt-get update
2 $ sudo apt-get install ansible
等待安装完成即可。

2.3
其他安装方式

2.3.1
pip安装
利用Pip-Python包管理器进行安装,然后安装ansible:
 
$ sudo easy_install
pip
 
$ sudo pip install
ansible

注:pip方式安装不会在/etc/ansible目录下生成默认的相关配置文件

2.3.2
其他安装方式
其他的安装方式较多,请参考官方文档介绍:
http://docs.ansible.com/ansible/intro_installation.html

最时尚的玩法是使用源码安装了。你会拿到最新版,但并非稳定版。所以,使用源码安装时要留意Bug,积极关注社区和版本更新。请从Github上获取最新代码,安装过程如下:

$ git clone git://github.com/ansible/ansible.git

$ cd ansible && sudo make&&make install

使用pip安装Ansible

Pip是专门用来管理Python模块的工具,Ansible会将每次正式发布都更新到pip仓库中。所以通过pip安装或更新Ansible,会比较稳妥的拿到最新稳定版。

值得注意的是升级操作系统时,并不会同时升级Ansible。另外,升级操作系统有可能损坏Ansible环境,毕竟它依赖Python。还有如果你已经基于Ansible开发大量模块,你最好一直使用对应版本。此时不建议你升级到最新版本,以免由于不兼容等问题导致模块功能异常。Pip的安装指令为:

$ pip install ansible

Ansible的升级

利用pip升级ansible

$pip install –upgrade ansible

3.Ansible配置

3.1
Ansible配置

3.1.1
Ansible总配置文件:
Ansible的配置文件其实只有一个文件,相对较简单,配置文件为:ansible.cfg,配置文件路径为:/etc/ansible/ansible.cfg

3.1.2
配置说明:
简单的配置说明如下:

[defaults]
#inventory = /etc/ansible/hosts    #定义inventory
#forks = 5                        #默认开启的并发数
#sudo_user = root                #默认sudo用户
#ask_sudo_pass = True            #是否需要sudo密码
#ask_pass = True                #是否需要密码
#host_key_checking = False       #首次连接是否需要检查key认证

以上为简单需要的配置文件,如果没有特别需要,则保持默认配置即可。

3.2
主机组配置

定义主机和组
inventory的配置文件默认遵循INI文件风格,中括号[]中的名字为主机组名称。其中可以将同一个主机IP放到不同的主机组中,分组的功能给IT 维护人提供了非常强大的便利。此外,如果目标主机使用了非默认的22端口,还可以在主机后面使用冒号加端口来表示连接端口,文件以行来分隔配置。具体请看示例:

以/etc/ansible/hosts为例:
#inventory主机配置可以直接写IP
192.168.100.2
#同样支持hostname主机名的方式
web.test.com
#后跟冒号加端口表示新连接端口
db-a.test.cn:2222

#主机组定义
[web-server]
Web1.test.com
Web[10:20].test.com    #支持数值范围的表示方法

[db-server]
db-b.test.cn
db-[c:f].test.cn        #不仅支持数字,还支持字母表示

3.3
主机/主机组变量配置

主机变量:
     在日常部署和为维护中,我们会经常碰到非标准化的需求配置。
例如:
     配置http环境时候,为了安全,需要将192.168.100.2 这台服务器的http端口设置为8080,默认情况下,我们配置文件的端口都是80端口,那么如何在自动配置过程中我们就设置为8080 端口呢 ?
     可否为192.168.100.2定义一个变量http_port,把端口设置为http_port = 8080,当配置的时候,直接读取这个变量,生成一个8080 的端口配置文件。
那么只需要在hosts文件里面,在192.168.100.2主机后面加上变量即可:
#/etc/ansible/hosts 文件
192.168.100.2   
http_port = 8080

主机组变量:
    Ansible支持给主机组定义变量(相当于此主机组内的全局变量),支持大量机器的变量定义需求,赋予指定主机组内所有主机在执行playbook中的可用变量。
演示案例,/etc/ansible/hosts文件:

[web-server]
Web1.test.com
Web5.test.com
192.168.100.3

[web-server:vars]
http_port=8080
Dns_name=202.106.0.20

以上案例,就是为[web-server]主机组设置了组变量,变量http_port、Dns_name等变量均适用于[web-server]主机组包含的所有主机,当有调用的时候就会获取变量的值。

3.4
定义组嵌套以及组变量

嵌套组:
    inventory中,组可以包含其他组(嵌套),并且也可以向组中的主机指定变量。
    注意:这些嵌套组定义的变量,只能在playbook中使用,直接使用ansible的AD-HOC 是不生效的。
    说明:ansible的AD-HOC
是指使用ansible执行的临时或者一次的命令,例如:
#ansible web-server -m command -a "df -h"
演示例子,/etc/ansible/hosts文件:

[Apache]
http.test.com

[Nginx]
Ngx.test.cn

[webserver:children]        #关键字children
Apache
Nginx

[webserver:vars]
port=22

说明:
以上配置hosts文件,定义了[Apache]、[Nginx]两个主机组,其中[Apache]主机组包含http.test.com主机;[Nginx]主机组包含Ngx.test.cn主机;同时又定义了一个主机嵌套组[webserver],其中[webserver:children]包含了两个子主机组Apache、Nginx,即[webserver:children]包含了Apache、Nginx主机组的所有服务器。同时又为[webserver]主机组定义了变量,port=22
例如:
192.168.100.2 ansible_ssh_port=222 ansible_ssh_pass=123#ewq

3.5
其他参数(内置)
     除了上述的设置变量之外,ansible 在ssh连接主机的时候还设置了一些内置的变量和参数。

#ansible_ssh_host                #指定连接主机
#ansible_ssh_port                #指定连接端口
#ansible_ssh_user                #指定连接用户
#ansible_ssh_pass                #指定ssh连接密码
#ansible_sudo_pass               #是定ssh连接时sudo密码
#ansible_ssh_private_key_file    #指定特有私钥文件

还有其他的一些参数,请参考官网 ansible.com .

4.Ansible配置SSH互信免密码登录

4.1
在控制机上生成公钥
在安装ansible的控制机上生成密钥,命令如下:

[root@ ~]# ssh-keygen -t ras -p
[root@ ~]# cd .ssh/
[root@ .ssh]# ll
total 12
-rw------- 1 root root 1675
Jan  4 21:04 id_rsa
-rw-r--r-- 1 root root 
400 Jan  4 21:04 id_rsa.pub
-rw-r--r-- 1 root root 
175 Jan  4 21:00 known_hosts

其中id_rsa.pub文件就是公钥文件。

或者免回车生成密钥:ssh-keygen -P '' -f ~/.ssh/id_rsa -t rsa

4.2
配置ansible hosts文件
     因为使用ansible 是基于SSH来做通信和管理的,所以需要连接服务器,则必须要配置好密码或者互信。因为我们是第一次连接主机,所以需要在hosts文件里配置好连接方式,建议初次使用明文的访问,为了安全,完成之后建议删除相关的密码。

方法1:
ansible——hosts配位文件如下:
#cat
/etc/ansible/hosts
172.16.12.240 ansible_ssh_pass=ansible2017  (发送公钥后删除密码)
172.16.12.241 ansible_ssh_pass=ansible2017
172.16.12.242 ansible_ssh_pass=ansible2017
完成之后可以使用ansible命令来推送密钥到各个管理服务器了。

ansible批量推送 密钥
前面已经配置了ansible的hosts文件,下面进行推送公钥id_rsa.pub
#ansible all -m copy -a "src=/root/.ssh/id_rsa.pub
dest=/root/.ssh/authorized_key mode=0600 state=force"
#ansible all -m command -a "chmod
700 /root/.ssh"
测试是否可以免密钥登录。可以的话需要删除/etc/ansible/hosts文件中的配置参数ansible_ssh_pass

方法2:

ssh-copy-id 发送公钥
利用ssh-copy-id远程发送id_rsa.pub,命令如下:
根据提示输入密码即可远程推送公钥。

[root@
~]# ssh-copy-id -i .ssh/id_rsa.pub
root@172.16.12.241
注:ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中。

测试是否可以远程无密码登录。
[root@ ~]# ssh 172.16.12.241
Last login: Thu Jan  5 04:46:58 2017 from 172.16.12.240
[root@ ~]#

注意:在首次连接或者重装系统之后会出现检查 keys 的提示

The authenticity of host '192.168.0.5 (192.168.0.5)' can't be established.

ECDSA key fingerprint is 05:51:e5:c4:d4:66:9b:af:5b:c9:ba:e9:e6:a4:2b:fe.

Are you sure you want to continue connecting (yes/no)?

解决办法:

vim /etc/ansible/ansible.cfg 或者 ~/.ansible.cfg

[defaults]

host_key_checking = False

也可以通过设置系统环境变量来禁止这样的提示

export ANSIBLE_HOST_KEY_CHECKING=False

5.Ansible
简单使用

ansible
ping 模块
ansible的ping模块用来检测配置的hosts文件的主机是否网络连通,命令如下:

[root@controller
~]# ansible all -m ping
172.16.12.241 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[root@controller ~]#

如上所示,返回结果为:SUCCESS ,ping结果pong,说明主机连通性正常。

1、Ansible初识简要介绍及安装的更多相关文章

  1. ActiveMQ学习教程/1.简要介绍与安装

    ActiveMQ学习教程(一)——简要介绍与安装 一.名词: 1.JMS:即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的 ...

  2. 二、ansible配置简要介绍

    [defaults] # some basic default values… hostfile = /etc/ansible/hosts \\指定默认hosts配置的位置 # library_pat ...

  3. 自动化运维工具之 Ansible 介绍及安装使用

    一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...

  4. Ansible介绍及安装部署

    本节内容: 运维工具 Ansible特性 Ansible架构图和核心组件 安装Ansible 演示使用示例 一.运维工具 作为一个Linux运维人员,需要了解大量的运维工具,并熟知这些工具的差异,能够 ...

  5. ansible入门一(Ansible介绍及安装部署)

    本节内容: 运维工具 Ansible特性 Ansible架构图和核心组件 安装Ansible 演示使用示例 一.运维工具 作为一个Linux运维人员,需要了解大量的运维工具,并熟知这些工具的差异,能够 ...

  6. Python介绍、安装、使用

    Python介绍.安装.使用 搬运工:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python语言介绍 说到Python语言,就不得不说一下它的创始人Guido van Rossu ...

  7. Android应用程序的Activity启动过程简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6685853 在Android系统中,Activ ...

  8. Android应用程序组件Content Provider简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...

  9. MySQL系列-第一章节:MySQL介绍与安装

    1.数据库介绍 1.1.什么是数据库`<Database>` 简单说存放数据的仓库,这个仓库按照一定的数据结构<数据结构是指数据的组织形式或数据之间的联系>来组织.存储的,我们 ...

随机推荐

  1. [bzoj2002][Hnoi2010]Bounce弹飞绵羊_LCT

    Bounce弹飞绵羊 bzoj-2002 Hnoi-2010 题目大意:n个格子,每一个格子有一个弹簧,第i个格子会将经过的绵羊往后弹k[i]个,达到i+k[i].如果i+k[i]不存在,就表示这只绵 ...

  2. Spring MVC-表单(Form)标签-复选框(Checkbox)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_checkbox.htm 说明:示例基于Spring MVC 4.1.6. 以下示 ...

  3. @RequestParam,@PathVariable等注解区别

    一.@RequestParam和@PathVariable的区别 1.@RequestParam是从uri中request后面的参数串来取得参数的 2.@PathVariable是从uri模板中取得参 ...

  4. 怎样又一次编译linux内核

    linux作为自由软件.在广大爱好者的支持下,内核版本号不断更新. 新的内核修订了就得内核的bug,并添加了很多新的特性.假设用户须要使用这些新的特性或者依据自己的系统量身定做一个更高效或更稳定的内核 ...

  5. MySQL数据库——存储和函数

    一.存储过程1 基本语法CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 格式[I ...

  6. luogu3690 【模板】 Link Cut Tree(动态树)

    题目大意 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号.0.询问从x到y的路径上的点的权值的xor和.保证x到y是联通的.1.代表连接x到y,若x ...

  7. h5-9 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. docker overlay网络实现

    DOCKER的内置OVERLAY网络 内置跨主机的网络通信一直是Docker备受期待的功能,在1.9版本之前,社区中就已经有许多第三方的工具或方法尝试解决这个问题,例如Macvlan.Pipework ...

  9. hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串

    题面 题意:给你n个串,每个串都可以选择它的一个长度为n的环形子串(比如abcdf的就有abcdf,bcdfa,cdfab,dfabc,fabcd),求这个n个串的这些子串的最长公共子序列(每个串按顺 ...

  10. Linux Shell Scripting Cookbook 读书笔记 2

    cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自动化交互 1. cat的用法 压缩连续的空白行 cat -s file 也可以用tr,将 ...