Ansible 工作架构和原理| 学习笔记

简介: 快速学习 Ansible 工作架构和原理

开发者学堂课程【自动化运维工具 Ansible 实战 Ansible 工作架构和原理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/577/detail/7974


Ansible 工作架构和原理


内容介绍

一、常用自动化运维工具

二、Ansible 发展史

三、Ansible 特性

四、Ansible 架构

五、Ansible 主要组成部分

六、安装

七、安装实例

八、相关文件

九、主机清单 inventory

一、常用自动化运维工具

在安装系统时,可以实现操作系统的自动部署自动安装,但在生产中的环境是多变的,之后要根据不同的环境来加装系统软件,那自动化运维工具就派上了用场。

IAAS 买虚拟机时给了一个虚拟机的硬件环境相当优越,只需在上面部署希望部署的系统后续的安装以及软件的配置都需要自己操作

PAAS 是硬件和开发环境都给提供,这样可以直接在上面做相应的开发做一些相应工作,不需要从头到尾去部署系统,相对而言也是比较方便。

SAAS 是包括硬件、软件、操作系统、开发环境都做完,甚至软件都做好了就拿过来用就行,目前很多软件都是基于 SAAS

首先配置两台虚拟机,当在多个虚拟机中要执行某一操作,如想在两个虚拟机中执行ls命令,在不用 ansible 时可以右键最下面窗口选择 command window,会新生成一个窗口,在窗口中输入 ls 右键选 send commands to all sessions 就可以在窗口所有虚拟机中执行,这样虽然可以批量执行,但是有些不通虚拟机的细微操作无法完成,至就要用到 ansible。

常用运维工具如下:

1、Ansible:python,Agentless,中小型应用环境(一般主机少)。

2、Saltstack:python, 一般需部署 agent(需要代理),执行效率更高(一般适合主机多)。

3、Puppet:ruby, 功能强大,配置复杂,重型,适合大型环境

4、Fabric:python, agentless

5、Chef:ruby,国内应用少

6、Cfengine

7、func

Ansible 是基于 python 来开发的,它与 Saltstack 区别是一般不需要配置代理,之前学过软件是基于 c/s 结构的,有客服端和服务器,有多个客户端访问服务器,现在运维工具是一个主机去控制多个主机,这一个主机就是主控端,被控制的就是被控端,被控端实现控制要么靠被控制软件就是代理,要么就是用无代理程序(如Ansible 的 SSH 服务),Saltstack 需部署代理 agent,但 Saltstac 功能要更强大,这就是为什么 Ansible 适合中小型应用环境

思考若公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。

公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案?

这时 ansible 就发挥了巨大作用。


二、Ansible 发展史

Ansible 创始人, MichaelDeHaan ( Cobbler 与 Func 的作者)

2012-03-09,发布0.0.1版,红帽收购2015-10-17,Red Hat 宣布收购。


三、Ansible 特性

现大部分软件都是模块化的,都是一个个模块开发出来的,基于什么功能,提供一个什么框架,需要用到什么功能单独针对这样的功能开发一个模块关联到系统上就行了,目前 ansible 模块现在已经1000多个,可以理解成 ansible 的模块当于 Linux 里的命令,一个模块相当于一个命令,当然每个命令有好多参数选项,ansible 的模块也是有选项的,

常用的也就二三十个另外还有三个关键模块,Paramiko(基于 python 开发基于 SSH 的远程通讯模块),PyYAMLYAML 语言,剧本编写就是借助于这种语言,Jinja2 (模板语言)三个关键模块不同的语言他就是不同语法而已功能上都有类似。

我们用单条模块或者是单个命令去执行操作就像在 Linux 里执行单挑命令一样那显而易见它只是临时性的,做一些是临时性,如果说是例行性的周期性的定时的要去执行某个操作这时单条命令太麻烦,所以要编写 playbook这里面还有有一个非常重要的特性叫幂等性,幂等性就是一任务执行一遍和执行 n 遍效果是一样的不会因为重复执行带来错误,ansible 执行的命令如果是重复的,ansible 就不会执行,而不是执行后报错。

特性如下:

1、模块化:调用特定的模块,完成特定任务。

2、有 Paramiko(基于 python 开发基于 SSH 的远程通讯模块),PyYAMLYAML语言),Jinja2 (模板语言)三个关键模块

3、支持自定义模块。

4、基于 Python 语言实现

5、部署简单,基于 python 和 SSH (默认已安装),agentless

6、安全,基于 OpenSSH

7、支持 playbook 编排任务

8、幂等性:一个任务执行1遍和执行 n 遍效果一样,不因重复执行带来意外情况。ansible 执行重复后就不会执行,而不是执行后报错。

9、无需代理不依赖  PKI( 无需 ssl)

10、可使用任何编程语言写模块(当然用 Python 更契合)。

11、YAML  格式,编排任务,支持丰富的数据结构

12、较强大的多层解决方案。

ansible 用单一模块的命令执行,playbook 编排多个命令,更多的操作就编辑角色来实现各种功能操作。


四、Ansible 架构

 image.png


如图看到 users(用户)用 Ansible 去控制多个 host(主机),在控制时有 host inventory(主机清单)来明确控制哪些主机,控制是可以用单一的模块控制,但如果是例行性的经常性的命令时可用 playbooks 来控制,实现与各主机的连接用的 connection plugins。

Ansible 工作原理


五、Ansible 主要组成部分

1、ANSIBLEPLAYBOOKS :

任务剧本(任务集),编排定义 Ansible 任务集的配置文件,由 Ansible 顺序依次执行,通常是 JSON 格式的 YML 文件

2、INVENTORY:

Ansible 管理主机的清单 /etc/anaible/hosts

3、MODULES:

Ansible 执行命令的功能模块,多数为内置核心模块,也可自定义

4、PLUGINS:

模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用

5、API:

供第三方程序调用的应用程序编程接口

6、ANSIBLE:

组合 INVENTORY、API、MODULES、PLUGINS 的绿框,可以理解为是 ansible 命令工具,其为核心执行工具

7、Ansible 命令执行来源:

USER,普通用户,即 SYSTEMADMINISTRATOR

CMDB (配置管理数据库) API 调用

PUBLIC/ PRIVATECLOUDAPI 调用

USER->Ansible Playbook->Ansible

8、利用 ansible 实现管理的方式:

Ad-Hoc 即 ansible 命令,主要用于临时命令使用场景

Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划9、Ansible-playbook (剧本)执行过程:

将已有编排好的任务集写入 Ansible-Playbook

通过 ansible-playbook 命令分拆任务集至逐条 ansible 命令,按预定规则逐条执行

10、Ansible 主要操作对象:

HOSTS 主机

NETWORKING 网络设备

11、注意事项:

执行 ansible 的主机一般称为主控端,中控,master 或堡垒机

主控端 Python 版本需要2.6或以上

被控端 Python 版本小于2.4需要安装 python-simple json

被控端如开启  SELinux 需要安装 libselinux -python

windows 不能做为主控端。


六、安装

最简单可以直接去官网下载

1、rpm 包安装:EPEL 源

yum install ansible

2、编译安装: 

yum-y install python- jinja2PyYAML  python-paramiko python-babel python-crypto tar xf ansible-1.5.4.tar.gz

cd ansible-1.5.4

python setup. py build

python setup,py install

mkdir/etc/ansible

cp-r examples/*/etc/ansible

3、Git 方式:

gitclone git:// github.com/ansible/ansible.git--recursive  cd./ansible

source./hacking/env-setup

4、pip 安装:pip 是安装 Python 包的管理器,类似 yum

yum install python-pip python-devel

yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel

pip install-upgrade pip

pip install ansible--upgrade

5、确认安装:ansible--version


七、安装实例

建立一个主机192.168.30.7和三个被控主机192.168.30.101(hostname noda1)、192.168.30.102(hostname noda2)、192.168.30.103(hostname noda3)。

在要安装的主机上接入 EPEL 源,输入 yum info ansible 可看到版本号此时在EPEL源里是2.5.3,是基于 ssh 实现配置管理部署任务执行任务系统。

继续输入 yum install ansible -y 便开始安装。安装完成后,可以输入 rpm -ql ansible | less 查看文件列表:

/etc/ansible

/etc/ansible/ansible.cfg

/etc/ansible/hosts

/etc/ansible/roles

/usr/bin/ansible

/usr/bin/ansible-2

/usr/bin/ansible-2.7

/usr/bin/ansible-config

/usr/bin/ansible-connetion

/usr/bin/ansible-console

/usr/bin/ansible-console-2

/usr/bin/ansible-console-2.7

/usr/bin/ansible-doc

/usr/bin/ansible-doc-2

/usr/bin/ansible-doc-2.7

/usr/bin/ansible-galaxy

/usr/bin/ansible-galaxy-2

/usr/bin/ansible-galaxy-2.7

/usr/bin/ansible-inventory

/usr/bin/ansible-playbook

/usr/bin/ansible-p1aybook-2

/usr/bin/ansible-p1aybook-2.7

/usr/bin/ansible-pull

/usr/bin/ansible-pu11-2

/usr/bin/ansible-pull-2.7

/usr/bin/ansible-vault

/usr/bin/ansible-vault-2

/usr/bin/ansible-vault-2.7/usr/1ib/python2.7/site-packages/ansible 等等很多文件各有各的用处。

输入  ansible-version 可以查看到一些信息,配置文件,模块文件的路径等等。


八、相关文件

1、配置文件:

/etc/ansible/ansible. cfg 主配置文件,配置 ansible 工作特性

/etc/ansible/hosts 主机清单

/etc/ansible/roles/ 存放角色的目录

2、程序

/usr/bin/ansible 主程序,临时命令执行工具

/usr/bin/ansible-doc 查看配置文档,模块功能查看工具

/usr/bin/ansible-galaxy 下载/上传优秀代码或 Roles 模块的官网平台

/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具

/usr/bin/ansible-pull 远程执行命令的工具

/usr/bin/ansible-vault 文件加密工具

/usr/bin/ansible-console 基于 console 界面与用户交互的执行工具。


九、主机清单  inventory

1、Inventory 主机清单

ansible 的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file 中将其分组命名

如  [root@ansible ~]#ansible help  执行的单一命令。

2、默认的 inventory file 为 /etc/ansible/hosts

3、inventory file 可以有多个,且也可以通过 Dynamic Inventory 来动态生成

模块实例:

ansible 来测试三台主机是否存活,用到 ansiblehelp 模块里的 m 选项,从主机发出 ping 指令,接收服务器会收到响应会回 pong 消息,输入ansible 192.168.101 -m ping,此时发现不能得到响应,需要把它加入清单里去:

vim /etc/ansible/hosts 将192.168.30.101、192.168.30.102、192.168.30.103三个主机放入,

同时要加上口令 k,输入 ansible 192.168.101 -m ping -k,就可得到回应 pong,但三台主机时,各主机口令不同无法实现回应 pong。

inventory file 中分组:

[websrvs]

192.168.30.101

192168.30.102

[dbsrvs]

192.168.30.101

192.168.30.103

用 [ ] 括起开就是实现了分组。

4、/etc/ansible/hosts 文件格式

5、inventory 文件遵循 INI 文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;

此外,当如若目标主机使用了非默认的 SSH 端口,还可以在主机名称之后使用冒号加端口号来标明

ntp.magedu.com

[webservers]

www1.magedu.com:2222

www2.magedu.com

[dbservers]

db1.magedu.com

db2.magedu.com

db3.magedu.com

6、如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

示例:

www[01:100].example.com

[dbsrvs]

db-[a:f].example.com

相关文章
|
10天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
24天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
46 3
|
27天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
59 1
|
1月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
23天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
1月前
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
42 5
|
1月前
|
开发者 容器
Flutter&鸿蒙next 布局架构原理详解
本文详细介绍了 Flutter 中的主要布局方式,包括 Row、Column、Stack、Container、ListView 和 GridView 等布局组件的架构原理及使用场景。通过了解这些布局 Widget 的基本概念、关键属性和布局原理,开发者可以更高效地构建复杂的用户界面。此外,文章还提供了布局优化技巧,帮助提升应用性能。
108 4
|
27天前
|
监控 持续交付 API
深入理解云计算中的微服务架构:原理、优势与实践
深入理解云计算中的微服务架构:原理、优势与实践
38 0
|
1月前
|
存储 Dart 前端开发
flutter鸿蒙版本mvvm架构思想原理
在Flutter中实现MVVM架构,旨在将UI与业务逻辑分离,提升代码可维护性和可读性。本文介绍了MVVM的整体架构,包括Model、View和ViewModel的职责,以及各文件的详细实现。通过`main.dart`、`CounterViewModel.dart`、`MyHomePage.dart`和`Model.dart`的具体代码,展示了如何使用Provider进行状态管理,实现数据绑定和响应式设计。MVVM架构的分离关注点、数据绑定和可维护性特点,使得开发更加高效和整洁。
166 3