本文最后更新于 253 天前,其中的信息可能已经有所发展或是发生改变。
1.Ansible是干啥的
它是一个基于python开发的开源自动化运维工具。
- 它可以用来
- 批量配置管理部署(如通过ssh批量初始化机房里的几十台电脑,拷贝复制文件等)
- 任务自动化,消除重复并简化工作流程(类似devops的CI/CD)
- 持续部署复杂的软件(如:docker,nginx的自动部署)
它本身提供一种框架,没有主从架构(没有客户端和服务端之分),开箱即用功能的实现是依靠其模块完成的。
所以,掌握这个工具可以提高效率。
2.Ansible的官网是多少
社区文档:Ansible 文档
3.Ansible是什么语言开发的
它基于 Python 语言开发,核心模块和插件均用 Python 实现。
此外:
- 依赖 Paramiko实现SSH 协议
- PyYAML提供YAML 解析
4.有哪些其他服务可以代替Ansible
- Puppet – C/S结构,使用ruby语言编写的IT基础设施自动化管理工具
- SaltStack – C/S结构,使用
server-agent通信模型,安全性较高的自动化运维工具 - Terraform – IAC工具,能够进行状态监测
5.Ansible的最新版本是多少
截止2025.6.22,Ansible的最新版本是2.9
6.Ansible有哪些安装方式
- 源码安装git clone git://github.com/ansible/ansible.git –recursive
cd ./ansible
source ./hacking/env-setup -q这个方式,记得先安装对应python版本的pip,python的一些模块也要安装sudo easy_install pip
sudo pip install paramiko PyYAML Jinja2 httplib2 six - 不同操作系统各自的下载命令直接下载
- Centos、Redheat :Yum
- Ubuntu: Apt
- …
-PIP安装 pip install ansible
7.Ansible是如何操作其他被控节点的,被控节点需要满足什么条件
Ansible 通过ssh协议操作其他节点。所以被控节点需要满足:
- 安装ssh服务
- 安装python环境
8.Ansible中的模块是什么
模块是ansible的核心功能单元,也是最小执行单位。由Python,shell等语言编写,用于执行具体任务。
ansible常用模块:
- ping-用于检测网络是否通畅,是否能联通
- setup- 用于获取主机信息
- group/user-用于增删查改用户/用户组的模块
- command/shell-用于对目标机器使用远程命令的模块,shell更适用于复杂命令
- copy/fetch-复制模块,copy是将本地文件复制到远程机器,fetch则反之,将远程文件复制到本地文件
- script- 将本地脚本复制到远程主机的模块
- yum – 类似centos,用于在目标主机上对软件安装、卸载、管理的模块
9.什么是命令式
它是:命令式是一种编程范式,也称为指令式编程,具体是什么可以参考其定义:
- 强调怎么做:描述操作步骤+状态变化实现目标
- 举例:去博物馆
- 命令式:向西出发500米,进入十字路口左转,再直走200米就可以到
- 有目标,且包含具体的步骤
- 具有显式性(因为我们可以看到实现的目标,思路,步骤)
- 举例:去博物馆
适用场景:命令式比较复杂(描述多,代码也多)适用于在小型且精确的任务中使用。
主要特点:
- 顺序 – 按照程序员定义的顺序逐条执行
- 可变性 – 变量可以在整个执行过程中改变值,反应程序状态变化
- 流感控制 – 使用语句根据算法的逻辑改变执行顺序(如if/else)
- 作业 – 大多数指令涉及到数量或数据结构的变化
- 副作用 – 会影响系统的其他部分
以 mv aaa.txt bbb.txt为例,该语句是命令式编程。理由如下:
- 显著描述了把aaa.txt变成bbb.txt的过程(显式性)
- 按照定义的顺序执行,改变了变量名,影响了操作系统,体现了命令式(顺序,可变,作业,副作用)
10.什么是声明式
它是: 它也是一种编程范式,只不过他只需要声明想要的结果,无需把操作过程写出来
强调做什么:结果
- 举例:去博物馆
- 声明式:说一声“我要去博物馆”,然后你就到了
- 只有目标
- 具有隐式性(因为我们只需要说出需求,看不出操作的全过程,像黑箱一样)
适用场景:命令式简介抽象,中大型场景(数据代码简洁),介绍数据结构
主要特点:
- 无副作用 – 不会改变程序状态或外部环境(不会把变量名给改了)
以sql语句为例:
SELECT * from user
WHERE user_name = Ben
他就是声明编程语言。命令简洁抽象,没有指定具体过程,也没有副作用
11.Ansible是声明式还是命令式
Ansible是声明式也是命令式,根据使用场景的不同,所采取的方式也不一样。
编写yaml文件时基本采用声明式,实现对远程主机的单次临时操作时则用命令式。
12.什么是幂等
它是:在同一个环境下进行多次操作,最后得到的都是一样的结果,不会因为多次点击产生副作用。
就像在重复请求调用的场景时,要确保每次调用的结果都一致。核心价值在于简化重试逻辑、保障数据一致性。