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

相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
2月前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
152 3
|
3月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
136 3
|
1月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
359 90
|
2月前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
173 81
|
11天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
29天前
|
存储 缓存 监控
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
295 21
|
29天前
|
存储 消息中间件 druid
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
105 19
|
29天前
|
存储 SQL NoSQL
Doris 架构原理及核心特性详解
Doris 是百度内部孵化的OLAP项目,现已开源并广泛应用。它采用MPP架构、向量化执行引擎和列存储技术,提供高性能、易用性和实时数据处理能力。系统由FE(管理节点)和BE(计算与存储节点)组成,支持水平扩展和高可用性。Doris 适用于海量数据分析,尤其在电商、游戏等行业表现出色,但资源消耗较大,复杂查询优化有局限性,生态集成度有待提高。
88 15
|
26天前
|
Java 网络安全 开发工具
Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合
通过本文,读者可以深入了解Git的核心概念和实际操作技巧,提升版本管理能力。

热门文章

最新文章