美文网首页
一、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快速入门&资产

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