美文网首页
一、Ansible快速入门&资产

一、Ansible快速入门&资产

作者: 胖虎喜欢小红 | 来源:发表于2020-01-14 19:26 被阅读0次

第 1 章 Ansible 介绍及安装

1.1 介绍

Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。Ansible 用 Python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt、Puppet、Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。
让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构。

1.2 工作原理

QQ20180304-112731@2x.png
1、在ANSIBLE 管理体系中,存在"管理节点" 和 "被管理节点" 两种角色。
2、被管理节点通常被称为"资产"
3、在管理节点上,Ansible将 AdHoc 或 PlayBook 转换为Python脚本。并通过SSH将这些Python
 脚本传递到   被管理服务器上。在被管理服务器上依次执行,并实时的将结果返回给管理节点。

1.3 如何安装

QQ20180304-112411@2x.png

管理节点

确保存在OpenSSH
确保Python 版本 >= 2.6
确保安装ansible

被管理节点

确保存在OpenSSH
确保Python 版本 >= 2.4 //若为2.4 版本,确保安装了python-samplesjson 扩展
不需要安装ansible

安装Ansible

# pip install ansible   // 确保最新版本ansible 或者 pip3 install ansible

# yum -y install ansible  // (运维推荐使用)不一定是最新版本ansible

确保管理节点与被管理节点之间SSH 信任关系

// 生成公私钥对
# ssh-keygen -t rsa
# cd ~/.ssh && ls 
id_rsa  id_rsa.pub
// 将公钥 id_rsa.pub copy 到 被管理服务器上 authorized_keys 文件中, 确保文件的权限为 0600
// managedhost 为被管理服务器,copy的过程中需要用户名及密码
# ssh-copy-id root@managedhost

1.4 快速入门
场景假设

管理节点:
10.3.134.2
被管理节点(资产):
10.3.134.4
10.3.134.98
且管理节点 和 被管理节点之间的节点已经打通 SSH 信任关系。

场景一

在管理节点上,确保同所有被管理节点的网络连通性。

# ansible all -i 10.3.134.4,10.3.134.98 -m ping
// 注意 -i 参数后面接的是一个列表(List)。因此当为一个被管理节点时,#我们后面一定要加一个逗号(,)#告知是List
# ansible all -i 10.3.134.4, -m ping

场景二

在管理节点上,确保文件/tmp/a.conf 发布到所有被管理节点

# ansible all -i 10.3.134.4,10.3.134.98 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"

参数解释

-i  // 指定Ansible 的资产,也就是被管理服务器。
-m  // 指定要运行的模块,比如这里的 ping 模块和 copy 模块
-a  // 指定模块的参数, 这里模块 ping 没有指定参数。 模块 copy 指定了 src 和 dest 参数
all // ansible 中, 将其叫做pattern , 即匹配。我通常称它为资产选择器。
    // 就是匹配资产(-i 参数指定) 中的一部分。这里的 all 是匹配所有指定的所有资产。
    // 在资产的章节中,我们将详细阐述。

第 2 章 Ansible 资产

在快速入门的场景中,我们一共管理了两台服务器。但是在实际场景中,我们要管理的服务器往往要多得多。难道依然要在Ansible 的 -i 参数后面一个个追加IP指定吗? 这显然不合乎常理。因此这一节我们主要去介绍一下Ansible的资产。Ansible 的资产分为静态资产和动态资产。

1.1 静态资产

顾名思义它本身是一个文本文件,一个格式类似INI的文件。默认情况下,Ansible的资产文件位于 /etc/ansible/hosts。
我们这里给出一个自定义的静态资产实例,然后再具体解释其含义。

# cat inventory
1.1.1.1
2.2.2.2
3.3.3.[1:15]
test01.biudefor.com
test03.biudefor.com
test[05:09].biudefor.com

[web_servers]
10.3.134.4
10.3.134.3
10.3.134.5

[db_servers]
10.3.134.4
10.3.134.3
10.3.134.5

[all_servers]
[all_servers:children]
db_servers
web_servers
    1、Ansible 的资产文件中,可以以IP地址的形式或者主机名的形式存在
    2、Ansible 的资产若连续,可以使用[stat:end] 的形式去表达
    3、可以将服务器按照业务场景定义成组,比如db_servers 和 web_servers
    4、组和组之间可以存在继承关系,比如db_servers 和 web_servers 同时继承all_servers 组

如何使用自定义资产

// 通过 -i 参数指定自定义资产的位置即可(可以是全路径,也可以是相对路径)。
# ansible all -i inventory.ini ... // 伪指令,不可执行

如何验证自定义资产

// 假如我们刚刚定义的资产为 inventory.ini
// 列举出所有资产
# ansible all -i inventory.ini  --list-hosts

// 列举出选定资产,比如这里列举出`web-servers短横线是错误写法`   web_servers 
// 注意这里使用的了资产选择器(pattern),我们将会在下面对他进行详细的阐述
# ansible web_servers -i inventory.ini --list-hosts

// 以上指令,若能列举出我们在资产中定义的服务器,那么你的自定义资产也就生效了。

生产实战

生产中一般会改变配置文件,将资产指定一个目录,然后将资产进行分批管理。实际生产中不可能只有几台服务器,可能是几十台,几百台,这时候就需要进行统一管理,管理时还需要分服务器服务类别方便运维人员进行管理。

[root@biudefor ~]# vim /etc/ansible/ansible.cfg 
[defaults]

# some basic default values...

inventory      = /etc/ansible/duan/
将原来的注释取消,把原来的hosts改为指定目录

[root@biudefor ~]# ls /etc/ansible/duan/
dbserver  webserver
#将不同功能服务器放在统一文件里方便管理

1.2 动态资产

动态资产, -i 参数后面接的是一个可运行的脚本。脚本的结果为一个 Ansible 可理解的 JSON 格式字符串。

为什么要存在动态资产呢? 往往我们在使用 Ansible 管理服务器前,公司中有可能已经将服务器信息存储在了特定位置,比如 CMDB, 数据库等系统。
此时若我们再使用静态资产去管理服务器,势必会造成资产管理入口不统一的问题。

因此我们只能抛弃原先的静态资产,通过脚本从已存在的系统中获取要管理的节点,并按照特定的形式传给 Ansible。这样既解决了公司资产统一入
口, 也解决了Ansible 的服务器管理来源。

动态资产实例

{
  "_meta": {
    "hostvars": {
      "10.3.134.3": {
        "host_var": "hoge"
      },
      "10.3.134.4": {
        "host_var": "fuga"
      }
    }
  },
  "sample-servers": {
    "hosts": [
      "10.3.134.3",
      "10.3.134.4"
    ],
    "vars": {
      "group_var": "hogefuga"
    }
  }
}

1.3 资产选择器

有时操作者希望只对资产中的一部分服务器进行操作,而不是资产中列举的所有服务器。此时我们该如何选择呢?
这里我们将学习 Ansible 的资产选择器 PATTERN,通过资产选择器,我们可以灵活的选择想要操作的服务器。

格式

# ansible PATTERN -i inventory -m module -a argument  // 伪代码,勿执行

选择一台或者几台服务器

# ansible 1.1.1.1 -i inventory.ini --list-hosts
# ansible test01.biudefor.com -i inventory.ini --list-hosts
# ansible 1.1.1.1,2.2.2.2 -i inventory.ini --list-hosts

选择所有服务器

# ansible '*' -i  inventory.ini --list-hosts
# ansible all -i inventory.ini --list-hosts

选择一组服务器

# ansible web-servers -i inventory.ini --list-hosts

使用 * 匹配

# ansible 3.3.3.* -i inventory.ini --list-hosts

使用逻辑匹配

// web_servers 和 db_servers 的并集
# ansible 'web_servers:db_servers' -i inventory.ini --list-hosts
// web_servers 和 db_servers 的交集
# ansible 'web_servers:&db_servers' -i inventory.ini --list-hosts
// 在 web_servers 中, 但不在 db_servers 的服务器
# ansible 'web_servers:!db_servers' -i inventory.ini --list-hosts

相关文章

  • 一、Ansible快速入门&资产

    第 1 章 Ansible 介绍及安装 1.1 介绍 Ansible 是一个 IT 自动化工具。它能配置系统、部署...

  • 进击的 Ansible(二):如何快速搞定生产环境 Ansibl

    Tips:与前文 《进击的 Ansible(一):Ansible 快速入门》 一样,本文使用的 Ansible 版...

  • ansible 快速入门

    一、为什么选择ansible 二、ansible工作原理 三、安装 四、配置文件 五、常用参数 六、模块 七、ad...

  • ansible 快速入门

    ansible 简介: Ansible是一个IT自动化工具。它可以配置系统、部署软件和编排任务,是一个简单易用的 ...

  • Ansible快速入门

    1.什么是Ansible Ansible是python 中的一套模块,系统中的一套自动化工具,只需要使用ssh协议...

  • 快速入门 Ansible

  • Ansible 快速入门

    Ansible 是什么? Ansible是一个配置管理和配置工具,它使用SSH连接到服务器并运行配置好的任务,服务...

  • Ansible-3 ansible Ad-Hoc

    场景假设 我们在快速入门中执行的Ansible 命令,类似于我们的批处理命令。在Ansible 中统称为Ansib...

  • 快速上手 Ansible

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible 命令

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

网友评论

      本文标题:一、Ansible快速入门&资产

      本文链接:https://www.haomeiwen.com/subject/aulaactx.html