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

相关文章
|
3月前
|
存储 监控 算法
园区导航系统技术架构实现与原理解构
本文聚焦园区导航场景中室内外定位精度不足、车辆调度路径规划低效、数据孤岛难以支撑决策等技术痛点,从架构设计到技术原理,对该系统从定位到数据中台进行技术拆解。
111 0
园区导航系统技术架构实现与原理解构
|
4月前
|
存储 消息中间件 canal
zk基础—2.架构原理和使用场景
ZooKeeper(ZK)是一个分布式协调服务,广泛应用于分布式系统中。它提供了分布式锁、元数据管理、Master选举及分布式协调等功能,适用于如Kafka、HDFS、Canal等开源分布式系统。ZK集群采用主从架构,具有顺序一致性、高性能、高可用和高并发等特点。其核心机制包括ZAB协议(保证数据一致性)、Watcher监听回调机制(实现通知功能)、以及基于临时顺序节点的分布式锁实现。ZK适合小规模集群部署,主要用于读多写少的场景。
|
5月前
|
存储 人工智能 自然语言处理
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
本文深入探讨了混合专家(MoE)架构在大型语言模型中的应用与技术原理。MoE通过稀疏激活机制,在保持模型高效性的同时实现参数规模的大幅扩展,已成为LLM发展的关键趋势。文章分析了MoE的核心组件,包括专家网络与路由机制,并对比了密集与稀疏MoE的特点。同时,详细介绍了Mixtral、Grok、DBRX和DeepSeek等代表性模型的技术特点及创新。MoE不仅解决了传统模型扩展成本高昂的问题,还展现出专业化与适应性强的优势,未来有望推动AI工具更广泛的应用。
1824 4
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
|
6月前
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
1560 21
RocketMQ原理—5.高可用+高并发+高性能架构
|
5月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
140 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
5月前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
210 9
|
6月前
|
人工智能 自然语言处理 安全
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
CodeAct是一种先进的AI辅助系统范式,深度融合自然语言处理与代码执行能力。通过自定义代码执行代理,开发者可精准控制代码生成、执行及管理流程。本文基于LlamaIndex框架构建CodeAct Agent,解析其技术架构,包括代码执行环境、工作流定义系统、提示工程机制和状态管理系统。同时探讨安全性考量及应用场景,如软件开发、数据科学和教育领域。未来发展方向涵盖更精细的代码生成、多语言支持及更强的安全隔离机制,推动AI辅助编程边界拓展。
280 3
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
|
9月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
767 90
|
10月前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
705 81