Ansible自动化

1.Ansible概述

Python写的

github地址: https://github.com/ansible/ansible

Ansible 是一套用来做 自动化运维/配置管理/批量执行/应用发布 的工具。你可以把它理解成:用一份"可读的 YAML 剧本",去指挥一堆机器把事按步骤做完------而且默认走 SSH,不用在被控机器上装 agent(代理程序)

它解决什么问题
  • 你不想手动 SSH 一台台改配置、装包、重启服务

  • 你希望"同一件事在 100 台机器上做出来的结果一致"

  • 你希望操作是可重复、可审计、可版本管理(Git)

Ansible 的优点一句话概括:用很少的成本,把一堆机器"统一、可重复"地管起来。

更简单点分 6 条:

  1. 跨平台:Linux/Windows/网络设备都能管

  2. 无代理:不用在被控机器装 agent,通常 SSH 就行

  3. 好读好写:用 YAML 写剧本,人看得懂

  4. 可重复、可追溯:playbook 是纯文本,能放 Git 做版本管理

  5. 机器列表灵活:清单(inventory)可以动态生成,适合云/容器环境

  6. 好集成:能和 Puppet、卫星系统等现有运维工具一起编排

2.Ansible原理

用ssh连接目标机

用python做事 (不同Ansible对应不同版本Python)

3.Ansible架构

4.Ansible组件

1) Inventory(清单)
  • 列出被管理主机(可以分组:web/db 等)

  • 还能写连接参数(用户、端口、跳板机等)

2) Playbook(剧本)
  • YAML 写的"执行流程"

  • 指定:对哪些主机组按什么顺序做哪些任务

3) Module(模块)
  • Ansible 执行的"动作库",比如装包、拷文件、启服务

  • 分两类:内置模块 / 自定义模块

4) Connection Plugin(连接插件)
  • 负责"怎么连过去并执行"

  • 默认是 SSH (Linux),Windows 常用 WinRM

  • 也支持跳板/代理等(本质还是走 SSH 能力)

Inventory 告诉我管谁 → Playbook 告诉我做什么 → Module 真正去干活 → Connection Plugin 负责把活送到目标机并拿回结果。

Ansible幂等性,执行过的脚本,不会再执行

5.常用运维工具比较

Puppet

基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱

SaltStack

基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配置脚本更简单

Ansible

基于 Python paramiko 开发,分布式,无需客户端 ,轻量级,配置语法使用 YAMLjinja2 模板语言,更强的远程命令执行操作

6.Ansible特性

1、no agents:不需要在被管控主机上安装任何客户端,更新时,只需在操作机上进行一次更新即可

2、no server:无服务器端,使用时直接运行命令即可

3、modules in any languages:基于模块工作,可使用任意语言开发模块

4、yaml, not code:使用 yaml 语言定制剧本 playbook

5、ssh by default:基于 SSH 工作

6、strong multi-tier solution:可实现多级指挥 这个其实用到的是ssh的能力

解释

a b c d 4台机子 你可以从a连接b 从b连接c 从c连接d

7.Ansible的操作链路

例如安装软件

Ansible去主机清单中找对应的机子,通过连接插件建立连接,然后(通过核心模块,自定义模块,插件)去完成

如果是安装多个

自己写剧本(Playbooks),Ansible去主机清单中找对应的机子,通过连接插件建立连接,然后(通过核心模块,自定义模块,插件)去完成你的剧本(Playbooks)

8.安装Ansible

如果你是Centos7 需要 yum install epel-release

然后

yum install ansible -y

Ubuntu

apt install ansible -y

ansible --version 我这里config file=None

这个ansible.cfg的作用是配置主机配置清单

mkdir /etc/ansible

touch /etc/ansible/ansible.cfg

再次 ansible --version config file就有了

/etc/ansible/ansible.cfg 中指定默认清单文件位置

可以不写 不写默认就是

复制代码
cat > /etc/ansible/ansible.cfg <<'EOF'
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
retry_files_enabled = False
EOF

touch /etc/ansible/hosts

复制代码
[web]
xx.xx.xx.xx ansible_user=root ansible_password='xxxxxxxx'

关于/etc/ansible/ansible.cfg配置文件修改位置

当然你/etc/profile.d/ansible.sh 然后export ANSIBLE_CONFIG=/root/ansible-demo/ansible.cfg 也是可以的

或者/etc/bash.bashrc

可以自己配置环境变量

vim /etc/profle

export ANSIBLE_CONFIG=/root/ansible-demo/ansible.cfg

保存退出

root@DMIT-JP-PROXY:~# ansible web -m ping

xx.xxx.xxx.x | FAILED! => {

"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"

}

root@DMIT-JP-PROXY:~#

安装

apt install -y sshpass

再次执行

ansible web -m ping

出现 卡在 SSH 第一次连接的"指纹确认"

root@DMIT-JP-PROXY:~# ansible web -m ping

xx.xxx.xxx.x | FAILED! => {

"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."

}

解决办法 手动连接

ssh root@xxxxxxx

手动确认yes

输入密码 进入后退出 然后再次执行

root@DMIT-JP-PROXY:~# ansible web -m ping

xx.xx.xxx.xx | SUCCESS => {

"ansible_facts": {

"discovered_interpreter_python": "/usr/bin/python3"

},

"changed": false,

"ping": "pong"

}

root@DMIT-JP-PROXY:~#

9.Ansible一堆命令

ansible是基于命令和脚本 来控制其他主机

  • 命令 :一次性做一件事
    ansible web -m ping

  • 脚本/剧本(Playbook) :把很多步骤按顺序组织起来,可重复执行
    ansible-playbook site.yml

ansible all -m ping 对所有主机连接性测试

ansible-playbook site.yml

ansible-playbook site.yml -l web

ansible-playbook site.yml -l xx.xxx.xxx.xx

ansible-playbook site.yml

ansible-playbook site.yml 会执行哪些主机,由 playbook 里的 hosts: 决定

  • 如果 site.yml 写的是:

    复制代码

    - hosts: all

    那就是对清单里的所有主机执行。

  • 如果写的是:

    复制代码

    - hosts: web

    那就只对 web 组执行(不是全部)。

相关推荐
SelectDB11 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉6 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造