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 组执行(不是全部)。

相关推荐
Python大数据分析@2 小时前
使用Dify搭建工作流,实现自动化商品采集分析
运维·python·自动化·网络爬虫
code tsunami2 小时前
如何将 Helium 与 CapSolver 集成,实现无缝 CAPTCHA 自动化解决
运维·数据库·人工智能·爬虫·python·自动化
Tipriest_2 小时前
Linux rpm 系和 debian 系发展史,相同,不同点详细介绍
linux·运维·debian·rpm
我是谁??2 小时前
Rocky9.2离线安装docker和NVIDIA Container Toolkit训练环境搭建
运维·docker·容器
本贾尼2 小时前
VMware的Ubuntu虚拟机显示网络有限线缆已被拔出的问题以及解决方法
linux·运维·ubuntu
oMcLin2 小时前
如何在 Linux 上的 aaPanel 中使用 Docker 部署 WordPress 博客:从配置到上线一站式教程
linux·运维·docker
tianyuanwo2 小时前
Linux 系统日志完全指南:从 syslogd 到 rsyslog 的深度解析
linux·运维·syslog·rsyslog
pengdott2 小时前
Linux用户态与内核态的深度剖析
linux·运维·服务器
ONE_SIX_MIX2 小时前
debian 13 使用 nvidia 官方 apt repo 仓库,获得最新显卡驱动
运维·windows·debian