zoukankan      html  css  js  c++  java
  • Ansible之路——第一章:概念

    1.1 简介

    Ansible 是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具 Chef、Puppet、Saltstack。Ansible 是通过 Python 语言开发。

    Ansible 默认通过 SSH 协议管理机器,所以 Ansible 不需要安装客户端程序在服务器上。

    Ansible 可以实现以下目标:

    • 自动化部署应用
    • 自动化管理配置
    • 自动化的持续交付
    • 自动化的(AWS)云服务管理

    1.2 Ansible特性:

    • no agents:不需要在被管控主机上安装任何客户端;
    • no server:无服务器端,使用时直接运行命令即可;
    • modules in any languages:基于模块工作,可使用任意语言开发模块;
    • yaml,not code:使用yaml语言定制剧本playbook;
    • ssh by default:基于SSH工作;
    • strong multi-tier solution:可实现多级指挥。

    1.3 Ansible总体架构:

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

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

    1.4 基于模块的设计

    Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

    • 连接插件connection plugins:负责和被监控端实现通信;
    • host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
    • 各种模块核心模块、command模块、自定义模块;
    • 借助于插件完成记录日志邮件等功能;
    • playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

    1.5 工作原理

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

    1. 管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;
    2. 可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;
    3. 管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。

    1.6 ansible 执行流程

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

    1.7 ansible 命令执行过程

    a) 加载自己的配置文件,默认/etc/ansible/ansible.cfg;

    b) 查找对应的主机配置文件,找到要执行的主机或者组;

    c) 加载自己对应的模块文件,如 command;

    d) 通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;

    e) 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;

    f) 给文件 +x 执行权限;

    g) 执行并返回结果;

    h) 删除临时py文件,sleep 0退出;

    天道酬勤
  • 相关阅读:
    玩转git分支
    python元组、列表的异同总结
    IOS推送通知測试工具PushMeBaby
    Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
    Jmeter变量参数化及函数应用
    在Jmeter中使用自定义编写的Java测试代码
    使用LoadRunner监控Apache的步骤 (转)
    mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
    Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
    JVM调优总结-调优方法
  • 原文地址:https://www.cnblogs.com/wangwei1/p/12787739.html
Copyright © 2011-2022 走看看