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

相关推荐
乐维_lwops几秒前
告别机房管理 “盲盒”!实现主动预判的可视化运维
运维
2301_767902644 分钟前
第 4 章 docker容器
运维·docker·容器
历程里程碑5 分钟前
Linux 2 指令(2)进阶:内置与外置命令解析
linux·运维·服务器·c语言·开发语言·数据结构·ubuntu
天荒地老笑话么5 分钟前
Linux 里 chmod 755 file.txt 是什么意思(权限配置)
linux·运维·服务器·网络安全
野生工程师12 分钟前
【Linux基础-2】Linux的基本指令
linux·运维·windows
Amarone14 分钟前
Uptime Kuma 部署安装运维手册
运维·uptime kuma
昨夜见军贴061619 分钟前
IACheck AI审核推动质量控制记录标准化,全面保障含量测定研究合规性
大数据·运维·人工智能
venus6021 分钟前
服务器里面多个网口,电口,光口如何区分使用
运维·服务器
A-刘晨阳23 分钟前
ubuntu各版本配置apt源(阿里源)
linux·运维·ubuntu
Trouvaille ~24 分钟前
【Linux】进程间通信(一):IPC基础与管道机制深度剖析
linux·运维·c++·管道·进程间通信·匿名管道·半双工