ansible 简介

ansible 是什么?

  ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
  ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远
程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

ansible 特点

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  2. 默认使用SSH协议对设备进行管理;
  3. 有大量常规运维操作模块,可实现日常绝大部分操作;
  4. 配置简单、功能强大、扩展性强;
  5. 支持API及自定义模块,可通过Python轻松扩展;
  6. 通过Playbooks来定制强大的配置、状态管理;
  7. 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  8. 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

ansible 架构图


  上图中我们看到的主要模块如下:

Ansible:Ansible核心程序。
HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules核心模块,主要操作是通过调用核心模块来完成管理任务。
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
ConnectionPlugins:连接插件,Ansible和Host通信使用

ansible 任务执行

ansible 任务执行模式

  Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhocplaybook

  • ad-hoc模式(点对点模式)
      使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
  • playbook模式(剧本模式)
      是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

ansible 执行流程


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

ansible 命令执行过程

  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
  2. 查找对应的主机配置文件,找到要执行的主机或者组;
  3. 加载自己对应的模块文件,如 command;
  4. 通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;
  5. 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;
  6. 给文件 +x 执行权限;
  7. 执行并返回结果;
  8. 删除临时py文件,sleep 0退出;

ansible 配置详解

ansible 安装方式

  ansible安装常用两种方式,yum安装pip程序安装。下面我们来详细介绍一下这两种安装方式。

使用 pip(python的包管理模块)安装

  首先,我们需要安装一个python-pip包,安装完成以后,则直接使用pip命令来安装我们的包,具体操作过程如下:

 yum install python-pippip install ansible

使用 yum 安装

  yum 安装是我们很熟悉的安装方式了。我们需要先安装一个 epel-release包,然后再安装我们的 ansible 即可。

   yum install epel-release -yyum install ansible –y

ansible 程序结构

安装目录如下(yum安装):
  配置文件目录:/etc/ansible/
  执行文件目录:/usr/bin/
  Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
  Help文档目录:/usr/share/doc/ansible-X.X.X/
  Man文档目录:/usr/share/man/man1/

ansible配置文件查找顺序

  ansible与我们其他的服务在这一点上有很大不同,这里的配置文件查找是从多个地方找的,顺序如下:

  1. 检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
  2. ~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
  3. /etc/ansible.cfg检查etc目录的配置文件。

ansible配置文件

  ansible 的配置文件为/etc/ansible/ansible.cfg,ansible 有许多参数,下面我们列出一些常见的参数:

 inventory = /etc/ansible/hosts     #这个参数表示资源清单inventory文件的位置library = /usr/share/ansible      #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以forks = 5       #并发连接数,默认为5sudo_user = root     #设置默认执行命令的用户remote_port = 22       #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全host_key_checking = False       #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例timeout = 60       #设置SSH连接的超时时间,单位为秒log_path = /var/log/ansible.log       #指定一个存储ansible日志的文件(默认不记录日志)

ansuble主机清单

  在配置文件中,我们提到了资源清单,这个清单就是我们的主机清单,里面保存的是一些 ansible 需要连接管理的主机列表。我们可以来看看他的定义方式:

1、 直接指明主机地址或主机名:
    ## green.example.com#
    # blue.example.com#
    # 192.168.100.1
    # 192.168.100.10
2、 定义一个主机组[组名]把地址或主机名加进去[mysql_test]192.168.253.159192.168.253.160192.168.253.153

  需要注意的是,这里的组成员可以使用通配符来匹配,这样对于一些标准化的管理来说就很轻松方便了。
  我们可以根据实际情况来配置我们的主机列表,具体操作如下:

[root@server ~]# vim /etc/ansible/hosts[web]192.168.37.122192.168.37.133

ansible 常用命令

ansible 命令集

/usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault  Ansible 文件加密工具
/usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具

  其中,我们比较常用的是/usr/bin/ansible/usr/bin/ansible-playbook

ansible-doc 命令

  ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:

  ansible-doc -l              #获取全部模块的信息ansible-doc -s MOD_NAME       #获取指定模块的使用帮助

  我们也可以查看一下ansible-doc的全部用法:

[root@server ~]# ansible-doc
Usage: ansible-doc [options] [module...]

Options:
-h, –help show this help message and exit  # 显示命令参数API文档
-l, –list List available modules  #列出可用的模块
-M MODULE_PATH, –module-path=MODULE_PATH  #指定模块的路径
specify path(s) to module library (default=None)
-s, –snippet Show playbook snippet for specified module(s)  #显示playbook制定模块的用法
-v, –verbose verbose mode (-vvv for more, -vvvv to enable  # 显示ansible-doc的版本号查看模块列表:
connection debugging)
–version show program’s version number and exit

  我们可以来看一下,以mysql相关的为例:

[root@server ~]# ansible-doc -l |grep mysql
mysql_db                           Add or remove MySQL databases from a remote...
mysql_replication                  Manage MySQL replication
mysql_user                         Adds or removes a user from a MySQL databas...
mysql_variables                    Manage MySQL global variables
[root@server ~]# ansible-doc -s mysql_user

ansible 命令详解

  命令的具体格式如下:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

  也可以通过ansible -h来查看帮助,下面我们列出一些比较常用的选项,并解释其含义:

-a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS #后台运行超时时间
-C #模拟运行环境并进行预运行,可以进行查错测试
-c CONNECTION #连接类型使用
-f FORKS #并行任务数,默认为5
-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #查看有哪些主机组
-m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,同时支持-vvv-vvvv可查看更详细信息

ansible 配置公私钥

  上面我们已经提到过 ansible 是基于 ssh 协议实现的,所以其配置公私钥的方式与 ssh 协议的方式相同,具体操作步骤如下:

#1.生成私钥
[root@server ~]# ssh-keygen
#2.向主机分发私钥
[root@server ~]# ssh-copy-id root@192.168.37.122
[root@server ~]# ssh-copy-id root@192.168.37.133

  这样的话,就可以实现无密码登录,我们的实验过程也会顺畅很多。
  注意,如果出现了一下报错:

 -bash: ssh-copy-id: command not found

  那么就证明我们需要安装一个包:

 yum -y install openssh-clientsansible

  把包安装上即可。

ansible 常用模块

1)主机连通性测试

  我们使用ansible web -m ping命令来进行主机连通性测试,效果如下:

[root@server ~]# ansible web -m ping
192.168.37.122 | SUCCESS => {"changed": false, "ping": "pong"
}
192.168.37.133 | SUCCESS => {"changed": false, "ping": "pong"
}

  这样就说明我们的主机是连通状态的。接下来的操作才可以正常进行。

2)command 模块

  这个模块可以直接在远程主机上执行命令,并将结果返回本主机。
  举例如下:

[root@server ~]# ansible web -m command -a 'ss -ntl'
192.168.37.122 | SUCCESS | rc=0 >>
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN     0      128          *:111                      *:*
LISTEN     0      5      192.168.122.1:53                       *:*
LISTEN     0      128          *:22                       *:*
LISTEN     0      128    127.0.0.1:631                      *:*
LISTEN     0      128          *:23000                    *:*
LISTEN     0      100    127.0.0.1:25                       *:*
LISTEN     0      128         :::111                     :::*
LISTEN     0      128         :::22                      :::*
LISTEN     0      128        ::1:631                     :::*
LISTEN     0      100        ::1:25                      :::*

192.168.37.133 | SUCCESS | rc=0 >>
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :111 :
LISTEN 0 128 :22 :
LISTEN 0 128 127.0.0.1:631 :
LISTEN 0 128 :23000 :
LISTEN 0 100 127.0.0.1:25 :
LISTEN 0 128 :::111 :::

LISTEN 0 128 :::22 :::

LISTEN 0 128 ::1:631 :::

LISTEN 0 100 ::1:25 ::

自动化运维-Ansible详解相关推荐

  1. 大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]

    文章目录 ansible 自动化运维工具 详解 关于作者 作者介绍 一.ansible 概述 1.1 ansible 概述 1.2 是什么要使用 ansible 1.3 ansible 功能 1.4 ...

  2. linux自动化运维ansible

    linux自动化运维ansible 一.概述 二.安装 1.配置安装源 2.安装 3.查询版本信息 三.设置主机清单 1.添加ip及账号信息 2.修改主配置文件 3.测试是否成功 四.模块应用 1.模 ...

  3. 自动化运维—ansible

    2019独角兽企业重金招聘Python工程师标准>>> 自动化运维-ansible 一.Ansible介绍 Ansilbe是一个部署一群远程主机的工具.远程的主机可以是远程虚拟机或物 ...

  4. 自动化运维---ansible常用模块之文件操作(findreplace模块)

    自动化运维-ansible常用模块之文件操作(find&replace模块) 文章目录 自动化运维---ansible常用模块之文件操作(find&replace模块) 1.find模 ...

  5. 企业自动化运维ansible

    自动化运维工具ansible 运维自动化发展历程及技术应用 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输 命令执行 应用部署 配置管理 任务流编排 企业实际应用场景 ...

  6. 自动化运维-Ansible 运维自动化 ( 配置管理工具 )

    当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开源平台 ...

  7. 自动化运维: Ansible

    文章目录 为什么选择 Ansible Ansible 基本架构 Ansible 基本组成 Ansible 工作原理 Ansible 安装 主机清单 1. 简单的主机和组 2. 端口与别名 3. 指定主 ...

  8. 【运维】详解 /etc/fstab

    接上一篇文章linux硬盘空间不足,扩容硬盘,挂载目录,并永久挂载 /dev/sda /home_expand ext4 defaults 1 2 详解 /etc/fstab fstab中存放了与分区 ...

  9. IT运维巡检详解?(含巡检模板)

    更多专业文档请访问 www.itilzj.com 目 录 1.  概述 1.1  范围定义 1.2  内容说明 2.  巡检维度 2.1  基础设施状况 2.2  容量状况 2.3  性能状况 2.4 ...

最新文章

  1. 基于matlab的人脸五官边缘检测方法,基于MATLAB的人脸识别系统的设计
  2. PHP对Excel导入导出操作
  3. 让博客园博客中的图片支持fancybox浏览
  4. C Looooops POJ - 2115
  5. Mysql递归查询,无限级上下级菜单
  6. Linux网络编程一步一步学-异步通讯聊天程序select
  7. 九、一篇文章帮助你读懂CSS属性:vertical-align 垂直对齐
  8. 高温津贴:关键是消除劳动者“权利贫困”
  9. android 图片预览动画,Android图片上传实现预览效果
  10. 使用 Win 7 必须知道的快捷键
  11. java语言打印上三角和下三角,进一步得到九九乘法表
  12. 文字转语音怎么做?分享三种配音方法,真人语音很逼真
  13. 4K60帧!RayLink远程控制软件如何帮助设计师远程办公?
  14. 计算机基础知识文件的复制移动,如何复制文件
  15. 使用计算机打印资料时需要安装打印机驱动,详细教您如何在计算机上安装打印机驱动程序...
  16. vue、Steps 步骤条、Steps 属性、vue Steps 所有步骤条样式、vue Steps 步骤条全部属性
  17. child_process使用记录
  18. visual studio程序打包发布的方法
  19. 数据可视化-----标签云的实现
  20. 计算机的网络ip相同,同一Wi-Fi网络上的两台计算机是否具有相同的IP地址? | MOS86...

热门文章

  1. pygame小项目 ~ 2 :Python完成简易乒乓球游戏
  2. 如何在Mac上拨打和接听电话
  3. 原来网上还有;网络学堂
  4. 离线数仓(1):什么是数据仓库
  5. 如何隐藏任务栏图标小结
  6. 在云服务器中云磁盘如何挂载
  7. 同花顺2015校园招聘笔试题
  8. 【智慧气象】道路气象监测系统
  9. 《趣学算法》目录及签名版
  10. 雷达系统与技术行业研究分析