ansible的基本原理

1.ansible概述

  Ansible是一种IT自动话的运维工具,是基于python开发,又集成了大量的运维工具(puppet、cfengine、chef、func、fabric)的优点,能够实现批量系统配置,程序部署,命令运行等的功能。

  Ansible主要是基于模块进行工作的,其本身并没有批量部署的能力,ansible仅仅只是提供一种框架。

  Ansible的主要目的是简单易用,它还非常注重安全性很可靠性,具有最少的移动部件,使用OPenSSH进行传输(使用其他的传输和拉取模式作为代替方案)。

  Ansible以无代理方式管理机器。永远不会出现如何升级远程守护进程或无法管理系统的问题,因为卸载了守护进程。由于OpenSSH是最受同行评审的开源组件之一,因此安全风险大大降低。

  Ansible是分散式的 - 它依赖于您现有的操作系​​统凭据来控制对远程计算机的访问。如果需要,Ansible可以轻松连接Kerberos,LDAP和其他集中式身份验证管理系统。

  Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下是基于OPenSSH通信,windows系统下是基于PowerShell,管理端必须是Linux,使用者认证通过后在管理节点通过Ansible工具调用各应用模块指令推送到被管理端执行,并在执行完毕后自动删除产生的临时文件

2. ansible基本架构

 上图是ansible的基本架构,从上图中可以了解到以下部分:

  核心:ansible

  核心模块(Core Modules):是ansible自带的模块

  扩展模块(Custom Modules):是在核心模块不足以满足某种功能的时候,可以添加的扩展模块

  插件(Plugins):完成模块功能的补充

  剧本(playbook):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动去执行

  连接插件(Connaction Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它也是支持其他的连接方法的,所以需要有连接插件

  主机群(Host Inventory):定义ansible管理主机

3. ansible的工作原理

3.1 ansible工作原理(一)

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

  1. 管理端是支持local、ssh、zeromq三种方式连接被管理端,默认是基于ssh的连接
  2. 可以按照应用类型等方式进行Host Inventory(主机群)分类,管理的节点通过各类模块进行实现相应的操作,单个模块,单条命令的批量执行我们称其为ad-hoc
  3. 管理节点可以通过playbook实现多个task的集合实现一类的功能,playbook我们可以理解为系统通过组合多条ad-hoc操作的配置文件

  ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成。其命令行机制同样非常强大,允许大家利用商业许可Web UI实现授权管理与配置。

  ansible自动化管理工具的优点:

  • 轻量级,更新时,只需要在操作机器上进行一次更新即可
  • 采用ssh协议
  • 不需要去客户端安装agent
  • 批量执行任务的时候可以写成脚本,而且不需要分发到远程就可以执行
  • 采用python编写的,可以对其进行二次开发
  • 支持sudo普通用户命令
  • 去中心化管理
  • 模块化,调用特定的模块,完成特定的任务
  • 有Parmiko,PyYAML,Jinjia2(模板语言)三个关键模块
  • 支持自定义模块
  • 部署简单,基于ssh和python(默认安装)
  • 被监控端不需要安装agent
  • 安全,基于OPenssh
  • 幂等性:一个任务执行一遍和执行N遍效果一样,不会因为重复执行带来意外错误
  • 可以使用任何的编程语言写模块

3.2 ansible工作原理(二)

 

   上图可以看到的内容的详细说明:

CMDB:                  配置管理数据库(使用Ansible的一种方式)
USERS:                 管理用户(使用Ansible的人员)
ANSIBLE PLAYBOOK:      Ansible任务剧本(任务集)
INVERTORY:             被管理的主机清单
API:                   供第三方程序调用的应用程序编程接口
MODULES:                AnsIble使用的模块(内置模块,自定义模块)
PLUGINS:                Ansbile使用的插件(模块功能的补充方式,这里包括很多的插件)
HOSTS:                  被控端主机
NETWORKING:             被控端网络设备(交换机,路由器等)

  ansible的主要组成部分:

ANSIBLE PLAYBOOK:      Ansible任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:             被管理的主机清单(在/etc/ansbile/hosts文件中)
MODULES:                AnsIble使用的模块(内置模块,自定义模块)
PLUGINS:                Ansbile使用的插件(模块功能的补充方式,如连接类型插件,循环插件,变量插件,过滤插件等)这个功能很少使用
API:                   供第三方程序调用的应用程序编程接口
ANSIBLE:                组合inventory,api,modules,plugins的绿框,可以理解为是ansible命令工具,其为核心的执行工具

4. ansible的7个命令

4.1 ansible

  ansible是指指令核心部分,其主要是用于执行ad-hoc命令,即单条命令。如果默认不指定模块,使用的是command模块。如:

ansible 174.16.4.110 -m ping

  不过默认使用的模块是可以在ansible.cfg中进行修改的。ansible命令下的部分参数详解如下:

-a                                     命令行参数
-m                                     执行模块的名字,默认是command模块,因此如果只执行单一命令可以不用-m参数
-i PATH                                指定库存主机文件的路径,默认是/etc/ansible/hosts
-u --user=Username                     执行的用户,使用这个远程用户名而不是当前的用户
-U -- sud-user=SUDO_User               sudo到哪一个用户,默认是root
-k --ask-pass                          登陆密码,提示输入SSH密码而不是基于密钥验证
-K --ask-sudo-pass                     提示密码使用sudo
-s --sudo                              sudo运行
-S --su                                用su命令
-l  --list                             显示所支持的模块
-s --snippet                           指定模块显示剧本片段
-f --forks=NUM                         并行任务数,NUM被指定为一个整数,默认是5
--private-key=PRIVATE_KEY_FILE         私钥路径,使用这个文件进行验证连接
-v                                     详细信息
all                                    针对所有主机进行操作
-M --module-path=MODULE_PATH           要执行的模块路径,默认是/usr/share/ansible
--list-hosts                           打印有那些组会执行这个playbook
-o --one-line                          压缩输出,摘要输出,尝试一切都在一行上进行输出
-t --tree=Directory                    将内容保存在该输出目录,结果保存在一个文件中在每台机器上
-B                                     后台运行超时时间
-P                                     调查后台程序时间
-T  -timeout=Seconds                   执行命令超时时间
-P NUM                                 调查背景工作时间每隔数秒,需要-b
-c --connection=Connection             可选为paramiko(ssh)、ssh,主要是用于crontab或者启动
--tags=TAGS                            只执行指定标签任务
--list-tasks                           列出所有将被执行的任务
-C --check                             只是检测会执行什么内容,不会去真正的去执行
--syntax-check                         执行语法检查的剧本,但是不执行它
-l  --limit=SUBSET                     进一步限制所选择的主机/组模式,--limit=192.168.0.15 只对这个ip执行
--skip-tags=SKIP_TAGS                  只运行剧本和任务不匹配这些值的标签 --skip-tags=copy_start

4.2 ansible-doc

  这个指令是用于查看模块信息的,常用的参数有两个-l和-s,具体如下:

ansible-doc -l          列出所有已经安装的模块
ansible-doc -s command  查看具体模块的用法

4.3 ansible-galaxy

  ansible-galaxy指令用于方便的从https://galaxy.ansible.com/站点下载第三方扩展模块。

ansible-galaxy install aeriscloud.docker

4.4 ansible-lint

  ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 。

4.5 ansible-playbook

  该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作.

4.6 ansible-pull

  该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

4.7 ansible-vault

  ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 --ask-vault-pass参数,同样需要输入密码后才能正常执行。  

 

posted @ 2021-07-13 10:36  coffee_kai  阅读(1881)  评论(0编辑  收藏  举报