当前位置: 首页 > news >正文

Ansible 安装与入门

一、Ansible 简介

Ansible 是一款基于 Python 开发的自动化运维工具,集合了 puppet、chef、func、fabric 等众多运维工具的优点,可实现批量系统配置、批量程序部署、批量运行命令等功能。

它基于 paramiko 开发,以模块化方式工作,本身不具备批量部署能力,真正实现批量部署的是其运行的模块,Ansible 仅提供框架。其最大特点是无需在远程主机上安装 client/agents,通过 SSH 协议与远程主机通讯,目前已被红帽官方收购,是认可度最高的自动化运维工具之一。

Ansible 的特点

  • 部署简单,仅需在主控端部署环境,被控端无需操作
  • 默认使用 SSH 协议管理设备
  • 拥有大量常规运维操作模块,可满足日常绝大部分操作
  • 配置简单、功能强大、扩展性强
  • 支持 API 及自定义模块,可通过 Python 轻松扩展
  • 通过 Playbooks 实现强大的配置和状态管理
  • 轻量级,无需在客户端安装 agent,更新仅需在操作机进行一次
  • 提供功能强大、操作性强的 web 管理界面和 REST API 接口 ——AWX 平台

Ansible 的架构

主要由以下部分组成:

  • Ansible:核心程序
  • HostInventory:记录被管理主机信息,包括端口、密码、IP 地址等
  • Playbooks:YAML 格式的 "剧本" 文件,定义主机需调用哪些模块完成功能
  • CoreModules:核心模块,通过调用它们完成管理任务
  • CustomModules:自定义模块,完成核心模块无法实现的功能,支持多种语言
  • ConnectionPlugins:连接插件,用于 Ansible 与 Host 的通信

二、Ansible 任务执行解析

任务执行模式

Ansible 系统管理被控节点的方式分为两类:

  1. ad-hoc 模式(点对点模式):使用单个模块,支持批量执行单条命令,属于可快速输入且无需保存的命令,类似 bash 中的单行 shell 命令。

  2. playbook 模式(剧本模式):Ansible 的主要管理方式,也是其功能强大的关键。通过多个 task(任务)集合完成一类功能,如 web 服务的安装部署、数据库服务的批量备份等,可理解为组合多条 ad-hoc 操作的配置文件。

执行流程

简单来说,Ansible 运行时,首先读取 ansible.cfg 中的配置,根据规则获取 Inventory 中的管理主机列表,并行在这些主机中执行配置的任务,最后等待执行返回结果。

命令执行过程

  1. 加载配置文件,默认为 /etc/ansible/ansible.cfg
  2. 查找对应主机配置文件,确定要执行的主机或组
  3. 加载对应的模块文件,如 command
  4. 通过 ansible 将模块或命令生成对应的 py 文件(python 脚本),并传输到远程服务器
  5. 对应执行用户的家目录.ansible/tmp/xxx/xxx.py 文件
  6. 给文件添加执行权限
  7. 执行并返回结果
  8. 删除临时 py 文件,sleep 0 退出

三、Ansible 配置解析

安装方式

Ansible 常用两种安装方式:

  1. pip 安装:先安装 python-pip 包,再使用 pip 命令安装

bash

yum install python-pip
pip install ansible
  1. yum 安装:先安装 epel-release 包,再安装 ansible

bash

yum install epel-release -y
yum install ansible -y

程序结构(yum 安装为例)

  • 配置文件目录:/etc/ansible/
  • 执行文件目录:/usr/bin/
  • Lib 库依赖目录:/usr/lib/pyhtonX.X/site-packages/ansible/
  • Help 文档目录:/usr/share/doc/ansible-X.X.X/
  • Man 文档目录:/usr/share/man/man1/

配置文件查找顺序

Ansible 配置文件查找顺序如下:

  1. 检查环境变量 ANSIBLE_CONFIG 指向的路径文件(如 export ANSIBLE_CONFIG=/etc/ansible/ansible.cfg)
  2. 检查当前目录下的 ansible.cfg 配置文件(~/.ansible.cfg)
  3. 检查 /etc/ansible.cfg

配置文件关键参数

ansible 的配置文件路径为 /etc/ansible/ansible.cfg,常见参数如下:

bash

inventory = /etc/ansible/hosts    #资源清单inventory文件的位置
library = /usr/share/ansible    #存放ansible模块的目录,多目录用冒号隔开
forks = 5    #并发连接数,默认为5
sudo_user = root    #默认执行命令的用户,2.14版本为:become_user=root
remote_port = 22    #连接被管理节点的端口,默认为22
host_key_checking = False    #是否检查SSH主机的密钥,关闭后第一次连接不提示
timeout = 60    #SSH连接超时时间,单位为秒
log_path = /var/log/ansible.cfg    #ansible日志文件存储路径(默认不记录日志)

主机清单

主机清单用于保存 ansible 需要连接管理的主机列表,定义方式如下:

  1. 直接指明主机地址或主机名:

bash

#green.example.com
#bule.example.com
#192.168.115.101
#192.168.115.102
  1. 定义主机组(组名)并添加地址或主机名:

bash

[mysql_test]
192.168.115.101
192.168.115.102
192.168.115.103

可使用通配符匹配组成员,配置示例:

bash

vi /etc/ansible/hosts[web]
192.168.115.109
192.168.115.110

四、Ansible 常用命令

Ansible 的主要命令集中在 /usr/bin/ 目录下,常用命令如下:

  • ansible:AD-Hoc 临时命令执行工具,用于临时命令执行
  • ansible-doc:模块功能查看工具
  • ansible-galaxy:下载上传优秀代码或 Roles 模块的官网平台,基于网络
  • ansible-playbook:定制自动化的任务集编排工具
  • ansible-pull:远程执行命令的工具,拉取配置而非推送(海量机器时使用)
  • ansible-vault:文件加密工具
  • ansible-console:基于 Linux Consoble 界面可与用户交互的命令执行工具
  • ansible-config:查看和管理 Ansible 配置
  • ansible-inventory:管理主机清单

ansible-doc 命令

用于获取模板块信息及帮助,用法:

bash

ansible-doc -l    #获取全部模块信息
ansible-doc -s MOD_NAME    #获取指定模块的使用帮助

ansible 命令格式

bash

ansible <host-pattern> <-f forks> [-m module_name] [-a args]

主要参数说明:

  • -a, MODULE_ARGS:模块参数,执行默认 COMMAND 模块时为命令参数
  • -k, --ask-pass:提示输入 SSH 密码
  • -K, --ask-sudo-pass:提示输入 sudo 密码
  • -C:模拟运行环境进行预运行,用于查错测试
  • -f FORKS:并行任务数,默认为 5
  • -i INVENTORY:指定主机清单路径,默认为 /etc/ansible/hosts
  • -m MODULE_NAME:执行模块的名字,默认使用 command 模块
  • -u REMOTE_USER:远程用户,默认为 root 用户
  • -v:查看详细信息,支持 - vvv、-vvvv 查看更详细信息

配置公私钥

Ansible 基于 SSH 协议管理主机,配置公私钥方式与 SSH 相同:

bash

#生成私钥
ssh-keygen
#向被管理主机分发私钥
ssh-copy-id root@192.168.115.109
ssh-copy-id root@192.168.115.110

五、部署 ansible 管理集群

实验环境

主机名IP 地址安装包
ansible192.168.115.108/24epel-release、ansible
node1192.168.115.109/24-
node2192.168.115.110/24-

实验步骤

  1. 安装 ansible

bash

[root@localhost ~]# hostnamectl set-hostname ansible
[root@localhost ~]# su
[root@ansible ~]# yum install epel-release -y
[root@ansible ~]# yum install ansible -y
  1. 添加主机清单

bash

[root@ansible ~]# cd /etc/ansible/
[root@ansible ansible]# vi hosts [web]        ##添加到最后一行
192.168.115.109
192.168.115.110
  1. 配置公私钥(如上文公私钥配置步骤)

六、Ansible 常用模块

主机连通性测试

使用 ping 模块测试主机清单中资源的连通性:

bash

[root@localhost ansible]# ansible web -m ping
192.168.115.110 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
192.168.115.109 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

command 模块

在远程主机上执行命令,不支持 shell 的管道等功能:

bash

[root@ansible ~]# ansible web -m command -a 'date'
192.168.115.110 | CHANGED | rc=0 >>
2020年 05月 09日 星期六 23:47:12 CST
192.168.115.109 | CHANGED | rc=0 >>
2020年 05月 09日 星期六 23:47:12 CST

常用参数:

  • chdir:执行命令前切换到该目录
  • executable:切换 shell 执行命令,需使用绝对路径
  • creates:若文件存在,则不执行命令
  • removes:若文件不存在,则不执行命令

示例:

bash

#使用chdir切换到/etc/init.d目录
[root@ansible ~]# ansible web -m command -a 'chdir=/etc/init.d/ ls'

shell 模块

在远程主机上调用 shell 解释器运行命令,支持 shell 的各种功能(如管道):

bash

[root@ansible ~]# ansible web -m shell -a 'cat /etc/passwd | grep zhangsan'
192.168.115.109 | CHANGED | rc=0 >>
zhangsan:x:1000:1000:zhangsan:/home/zhangsan:/bin/bash
192.168.115.110 | CHANGED | rc=0 >>
zhangsan:x:1000:1000:zhangsan:/home/zhangsan:/bin/bash

copy 模块

用于将文件复制到远程主机,支持生成文件和修改权限等:

主要选项:

  • src:本地文件路径,可为绝对或相对路径,目录则递归复制
  • content:直接指定文件内容,替代 src
  • dest:必选,远程主机的绝对路径
  • backup:文件内容改变时,覆盖前备份源文件
  • force:目标主机文件存在且内容不同时,是否强制覆盖,默认 yes
  • mode:设置文件权限

示例:

bash

#复制文件
[root@ansible demo]# ansible web -m copy -a 'src=/demo/3.txt dest=/demo/'#生成内容为“are you ok?”名为leijun的文件,权限777
[root@ansible demo]# ansible web -m copy -a 'content="are you ok?" dest=/demo/leijun mode=777'

file 模块

用于设置文件属性,如创建文件、链接文件、删除文件等:

主要选项:

  • force:强制创建软链接的情况设置
  • path:指定路径
  • group:定义属组
  • owner:定义属主
  • recurse:递归设置文件属性(对目录有效)
  • mode:指定权限
  • state:状态,包括 directory(创建目录)、file(修改文件属性)、link(创建软链接)、hard(创建硬链接)、touch(创建文件或更新时间)、absent(删除或取消链接)

示例:

bash

#创建目录
[root@ansible ~]# ansible web -m file -a 'path=/opt/app state=directory'#创建链接文件
[root@ansible ~]# ansible web -m file -a 'path=/opt/abc src=/demo/1.txt state=link'#删除文件
[root@ansible ~]# ansible web -m file -a 'path=/opt/abc state=absent'

fetch 模块

从远程主机获取(复制)文件到本地:

选项:

  • dest:存储文件的目录
  • src:远程拉取的文件(不能是目录)

示例:

bash

[root@ansible ~]# ansible web -m fetch -a 'src=/demo/leijun dest=/mnt'

cron 模块

用于管理 crontab 计划性任务,语法与 crontab 一致:

主要选项:

  • day:日(1-31, *, */2 等)
  • hour:小时(0-23, *, */2 等)
  • minute:分钟(0-59, *, */2 等)
  • month:月(1-12, *, /2 等)
  • weekday:周(0-6 代表周日到周六)
  • job:运行的命令
  • name:定时任务描述
  • special_time:特殊时间范围(reboot、annually、monthly 等)
http://www.dtcms.com/a/601263.html

相关文章:

  • VMMap 学习笔记(8.7):命令行模式与自动抓取——无界面采集内存证据的正确姿势
  • 大型网站服务器得多少钱app大全免费软件排行榜
  • AXI-5.3.2~5.3.5
  • Anaconda安装与配置:构建人工智能开发环境
  • 从入门到精通:周志华《机器学习》第一、二章深度解析
  • 网站建设品牌策划装修设计软件排名
  • 社区投稿 | Oinone应用于整车制造供应链决策
  • 加强网站建设的制度网站网址怎么找
  • 【Git】Git04:分支管理
  • R语言用什么编译器 | 如何选择最适合你的R语言开发环境
  • cuda12 cudnn9 tensorflow 显卡加速
  • 网站建设目标的文字嘉兴企业网站排名
  • 手机网站开发语言选择怎么能在网上卖货
  • 编程算法学习
  • 在Beego框架中创建Services层
  • PPT插入的音乐怎么让它播放到某一页就停?
  • 打包,压缩解压,上传下载
  • 【动态规划】专题完结,题单汇总
  • 微信公众好第三方网站怎么做wordpress订阅关闭
  • 网站logo上传建筑室内设计软件
  • Linux环境下Nginx核心总结与密码验证实践
  • python实战:装饰模式详解
  • 一个基于TCP/IP接收数据并通过API推送数据的小工具
  • 经典网站建设案例wordpress讨论区插件
  • 具身记忆大展拳脚
  • Java语言编译器 | 深入了解Java编译过程与优化技巧
  • 实时开发平台(Streampark)--Flink SQL功能演示
  • 最近做网站开发有前途没wordpress主题特色功能
  • 深度学习_神经网络初始化参数方法
  • 程序设计语言编译原理 | 深入解析编译原理与语言设计的关系