zoukankan      html  css  js  c++  java
  • ansible笔记(一)--架构图以及工作原理

    一、ansible架构图

     上图为ansible的基本架构,从上图可以了解到其由以下部分组成:

    • 核心:ansible
    • 核心模块(Core Modules):这些都是ansible自带的模块
    • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
    • 插件(Plugins):完成模块功能的补充
    • 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
    • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
    • 主机群(Host Inventory):定义ansible管理的主机

    二、ansibles工作原理

    以上是从网上找到的两张ansible工作原理图,两张图基本都是在架构图的基本上进行的拓展。从上面的图上可以了解到:

    1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;

    2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;

    3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。

    三、ansible主要组成部分

    ansible命令执行来源:

    • USER,普通用户,即system administrator
    • CMDB,(配置管理数据库)API调用
    • PUBLIC / PRIVATE CLOUD  API调用
    • USER -> ansile playbook -> ansible

    利用ansible实现管理的方式:

    • Ad-Hoc,即ansible命令,主要用于临时命令使用场景
    • Ansible-playbook,主要用于长期规划好的,大型项目的场景,需要有前提的规划

    ansible-playbook(剧本)执行过程:

    • 将已有编排好的任务集写入ansible-playbook
    • 通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

    ansible主要操作对象:

    • HOSTS  主机
    • NETWORKING  网络设备

    注意事项:

    • 执行ansible的主机一般称为主控端,中控,master或堡垒机
    • 主控端python版本需要在2.6或以上
    • 被控端python版本小于2.4需要安装python-simplejson
    • 被控端如开启SELinux需要安装libselinux-python
    • windows不能作为主控端

     

     

     

    playbook核心元素

    • Hosts:执行的远程主机列表
    • Tasks:任务集
    • Varniables: 内置变量或自定义变量在playbook中调用
    • Templates:模板,可替换模板文件中的变量并实现一些简单逻辑的文件
    • Handlersnotity 结合使用,由特定条件触发的操作,满足条件才执行,否则不执行
    • Tags:标签 指定某条任务执行,用于选择运行playbook中的部分代码,ansible具有幂等性,
    • 因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依
    • 然会非常地长,此时,如果确信其没有变化,就可以通过tags跳过此些代码片段

      ansible-playbook -t tagsname useradd.yml

    一、Hosts:

    playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。hosts

    用于指定要执行指定任务的主机,须事先定义在主机清单中

    可以是如下形式:

    1、正常写法,name1为别名:
    [test1]
    name1 ansible_ssh_host=192.168.1.111 ansible_ssh_user="root" ansible_ssh_pass="1234" ansible_ssh_port=22
    name2 ansible_ssh_host=192.168.1.222 ansible_ssh_user="root" ansible_ssh_pass="1234" ansible_ssh_port=22

    2、连续的IP写法,表示192.168.1.20到192.168.1.50,共31台主机:
    [test1]
    name1 ansible_ssh_host=192.168.1.[20:50] ansible_ssh_user="root" ansible_ssh_pass="1234" ansible_ssh_port=22

    3、带参数的群组,vars底下为群组共同便变量,包括已定义变量和自定义变量:
    [test1]
    name1 ansible_ssh_host=192.168.1.[20:50]
    [test1:vars]
    ansible_ssh_user=root
    ansible_ssh_pass="1234"
    testvar="test"

    4、群组整合,children底下为父群组test的子群组,调用方式为ansible test -m ping:
    [dbtest]
    name1 ansible_ssh_host=192.168.1.[20:50] ansible_ssh_user="root" ansible_ssh_pass="1234" ansible_ssh_port=22
    [webtest]
    name2 ansible_ssh_host=192.168.2.[20:50] ansible_ssh_user="root" ansible_ssh_pass="1234" ansible_ssh_port=22
    [test:children]
    dbtest
    webtest

    5、调用两个主机组的写法,以下webservers和dbservers都会被调用:
    ansible webservers:dbservers -m win_ping

    6、在webservers组中但不在dbsersers中的调用:
    ansible webservers:!dbservers -m win_ping

    7、在webservers组中并且在dbservers组中的才会调用:
    ansible webservers:&dbservers -m win_ping

    8、在调用前加~,代表正则表达式:
    ansible ~(web|db).*.91it.org -m win_ping

    9、组合的例子:
    webserver:dbservers:&nginx:!ntp

    10、hosts文件中没有定义的IP或别名,在进行调用中,会提示错误。ansible对单台服务器的调用,服务器IP或域名必须有写在hosts里。

  • 相关阅读:
    update inner join
    Centos 7安装docker
    使用Let's Encrypt搭建永久免费的HTTPS服务
    upstream timed out (10060: A connection attempt failed because the connected party did not properly respond
    MySQL死锁分析一例
    solr定时更新索引遇到的问题(SolrDataImportProperties Error loading DataImportScheduler properties java.lang.NullPointerException)
    Java中的关键字 transient
    Spring 4 使用Freemarker模板发送邮件&添加附件
    Spring 4 创建REST API
    Spring 4 异常处理
  • 原文地址:https://www.cnblogs.com/lizhewei/p/11684204.html
Copyright © 2011-2022 走看看