ansible工作架构原理及多种安装方式
文章目录
ansible的特性
- 模块化:调用特定的模块,完成特定的任务–>(1000个模块)
- 有paramiko(Python开发出来基于SSH服务的远程通讯模块), pyYAML(playbook基于此模块实现的), jinja2(模板语言)三个关键模块
- 支持自定义模块
- 基于Python语言实现
- 部署简单,基于Python和SSH默认Linux系统已安装),agentless(无代理/无客户端)
安全,基于openssh
- 支持playbook编排任务(类似于编写脚本)
幂等性
:一个任务执行一遍和执行N遍效果是一样的,不重复执行带来意外情况- 无需代理不依赖PKI(无需SSL)
- 可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案(“角色”)
ansible基本架构
- 用户要通过ansible(主控端)来控制其他机器(被控端)
可以大致分为三层结构:
- 用户
- 主控端
- 被控端
- 解释说明:
- host inventory(主机清单)-配置文件
在控制多台主机环境的时候,ansible如何知道控制那几台机器的?就用到了host inventory(主机清单)-文件
,把需要控制的机器IP写入到主机清单中 - playbook(剧本)
(1)如果做的一些是例行性的工作,大量重复可以使用playbook(剧本),playbook是通过各种命令和模块进行组合,然后进行任务操作
(2)如果是单一性的操作可以直接使用单一命令进行操作也是可以的!
ansible工作原理
- 用户
- 单一用户通过写playbook来达到目的是最快捷省事的
-
公有云/私有云:API调用
-
如果想通过这样的方式去管理被控端,就需要有开发的协助,可能开发一个web页面在上面点点点就可以实现控制被控端的任务!
-
CMDB
配置管理数据库使用API调用 -
被控端/操作对象
- host主机:linux/windows
- networking网络设备:服务器/路由器/交换机 : 使用的不多
- 注意事项
- 执行ansible的主机一般称为主控端/中控/master或堡垒机
主控端Python版本需要2.6或以上
被控端Python版本小于2.4需要安装Python-smplejson
- 被控端如何
开启SELinux
需要安装libselinux-python
- windows不能作为主控端
ansible主要组成部分
-
ansible playbook : 任务剧本(任务集),编排定义ansible任务集的配置文件,由ansible顺序依次执行,通常是
json格式
的YML文件 -
inventory : ansible管理主机的清单
/etc/ansible/hosts
-
modules : ansible执行命令的功能模块,多数为内置核心模块,也可以自定义
-
plugins : 模块功能的补充,如连接类型插件,循环插件,变量插件,锅炉插件等,该功能不常使用
-
API : 供第三方程序调用的应用程序编程接口
-
ansible : 组合inventor/API/modules/plugins,可以理解为是ansible命令工具,其为核心执行工具
ansible的安装方式
rpm包安装
#先安装阿里云的EPEL源
#RHEL7
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#RHEL6
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#yum安装ansible
yum install -y ansible
编译安装
# 安装依赖
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
# 解压ansible压缩包
tar xf ansible-1.5.4.tar.gz
# 进入目录
cd ansible-1.5.4
# 执行编译安装命令
python setup.py build
python setup.py install
# 创建目录
mkdir -p /etc/ansible
# 拷贝目录文件到新创建的目录
cp -r examples/* /etc/ansible
Git方式
直接从git上ansible软件直接下载下来,直接使用脚本安装即可
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
pip安装
pips是安装Python包管理器,类似yum
yum install python-pip python-devel
yum install gcc glibc-deve zibl-devel rpm-bulid openssl-devel
pip insyall --upgrade pip
pip install ansible --upgrade
确认ansible安装成功
# 查看ansible版本
ansible --version
# 程序二进制命令路径
ls -l /usr/bin/ansible
lrwxrwxrwx 1 root root 20 Apr 21 19:58 /usr/bin/ansible -> /usr/bin/ansible-2.7
#这里用到了软连接的方式,指向真正的版本目录,这就是之前提到的灰度发布的手法,如果新版本不行可以直接指向旧版本!
ansible相关文件
- 配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles 存放角色的目录
什么是(roles)角色?
角色就是很多playbook的集合,相当于一个项目,想要编写成一个完整的大型项目,单一的playbook是难以完成的,所以把很多的playbook集合到一起,就叫角色
- 程序
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具,在剧本中如果含有隐私信息可以考虑使用此工具加密
/usr/bin/ansible-console 基于console界面与用户交互的执行工具