Ansible发展史
Ansible
Michael DeHaan( Cobbler 与 Func 作者)
名称来自《安德的游戏》中跨越时空的即时通信工具
2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布收购
官网:https://www.ansible.com/
官方文档:https://docs.ansible.com/
同类自动化工具GitHub关注程度(2016-07-10)
特性
1> 模块化:调用特定的模块,完成特定任务
2> Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
3> 支持自定义模块
4> 基于Python语言实现
5> 部署简单,基于python和SSH(默认已安装),agentless
6> 安全,基于OpenSSH
7> 支持playbook编排任务
8> 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
9> 无需代理不依赖PKI(无需ssl)
10> 可使用任何编程语言写模块
11> YAML格式,编排任务,支持丰富的数据结构
12> 较强大的多层解决方案
Ansible架构
ansible的作用以及工作结构
1、ansible简介:
ansible是新出现的自动化运维工具,基于Python开发,
集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。
真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2、ansible的架构:连接其他主机默认使用ssh协议
Ansible工作原理
Ansible主要组成部分
ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,
由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts
MODULES: Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS: 模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API: 供第三方程序调用的应用程序编程接口
ANSIBLE: 组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
Ansible命令执行来源:
1> USER,普通用户,即SYSTEM ADMINISTRATOR
2> CMDB(配置管理数据库) API 调用
3> PUBLIC/PRIVATE CLOUD API调用 (公有私有云的API接口调用)
4> USER-> Ansible Playbook -> Ansibile
利用ansible实现管理的方式:
1> Ad-Hoc 即ansible单条命令,主要用于临时命令使用场景
2> Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程
Ansible-playbook(剧本)执行过程
将已有编排好的任务集写入Ansible-Playbook
通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行
Ansible主要操作对象
HOSTS主机
NETWORKING网络设备
注意事项:
执行ansible的主机一般称为主控端,中控,master或堡垒机
主控端Python版本需要2.6或以上
被控端Python版本小于2.4需要安装python-simplejson
被控端如开启SELinux需要安装libselinux-python
windows不能做为主控端
ansible不是服务,不会一直启动,只是需要的时候启动
安装方式
rpm包安装: EPEL源
yum install epel-release
yum install ansible
编译安装:
yum -y install python-jinja2 PyYAML python-paramiko python-babel
python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
Git方式:
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
pip安装: pip是安装Python包的管理器,类似yum
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
pip install --upgrade pip
pip install ansible --upgrade
确认安装:
ansible --version
配置文件:
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性(一般无需修改)
/etc/ansible/hosts 主机清单(将被管理的主机放到此文件)
/etc/ansible/roles/ 存放角色的目录
ansible 配置文件查找顺序:
首先检测ABSIBLE_CONFIG 变量定义的配置文件
其次检查当前目录下的 ./ansiblle.cfg 文件
再次检查当前用户家目录下的 ~/ansible.cfg 文件
最后检查/etc/ansible/ansible.cfg 文件
程序:
/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界面与用户交互的执行工具
ansible 配置文件ansible.cfg
修改 Ansible 配置文件/etc/ansible/ansible.cfg
vim /etc/ansible/ansible.cfg 【一般只要修改下面的几行内容】
...........
inventory = /etc/ansible/hosts #14行,打开注释
host_key_checking = False # ssh连接时,不需要输入yes; 如果为True, 就需要输入yes
log_path=/var/log/ansible.log #日志文件,默认是不开启的
...........
其他配置文件说明:
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp # 临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数,同时可以执行5次
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True # 每次执行ansible命令是否询问ssh密码
#ask_pass = True # 每次执行ansible命令是否询问ssh口令
#remote_port = 22 # 远程主机的端口号(默认22)
主机清单inventory
Inventory 主机清单
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名
默认的inventory file为/etc/ansible/hosts
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成
/etc/ansible/hosts文件格式
inventory文件遵循INI文件风格,中括号中的字符为组名。
可以将同一个主机同时归并到多个不同的组中;
此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明
[root@manager ~]# cat /etc/ansible/hosts
192.168.1.2 #不分组,直接加
#分组
[redis]
193.168.151.5
[nginx]
193.168.151.3 ansible_ssh_user=root ansible_ssh_pass=test1 #手动指定用户名,密码
[base]
193.168.151.6 ansible_ssh_user=vmuser ansible_ssh_pass=test1 ansible_become_pass=1 #手动指定用户名,密码,sudo 提权【前提这个用户有sudo权限】
[services]
193.168.151.[7:13] #多个连续IP
[postgresql]
193.168.151.13:2222 #可以指定端口
[all:vars]
#指定连接用户名,一般生产环境机器只允许普通用户登录
ansible_ssh_user=vmuser
#给所有主机指定私钥,key,需要提前将公钥传输到对应的主机上 ssh-copy-id 192.168.1.X [-i 指定公钥文件]
ansible_ssh_private_key_file=/root/.ssh/id_rsa
#sudo 提权到root 用户
ansible_become_pass=#fffsdsds20dsf8
测试ansible配置是否成功
[root@manager ~]# ansible all -m ping
193.168.151.6 | SUCCESS => {
ansible_facts: {
discovered_interpreter_python: /usr/bin/python
},
changed: false,
ping: pong
}
193.168.151.11 | SUCCESS => {
ansible_facts: {
discovered_interpreter_python: /usr/bin/python
},
changed: false,
ping: pong
}
193.168.151.5 | SUCCESS => {
ansible_facts: {
discovered_interpreter_python: /usr/bin/python
},
changed: false,
ping: pong
}
测试ansible使用sudo 提取
#测试ansible 使用sudo 批量在/root 目录下创建,删除文件,-b 表示提权的意思
[root@manager ~]# ansible all -m shell -a mkdir /root/1 -b
193.168.151.5 | CHANGED | rc=0 >>
193.168.151.11 | CHANGED | rc=0 >>
193.168.151.6 | CHANGED | rc=0 >>
193.168.151.12 | CHANGED | rc=0 >>
[root@manager ~]# ansible all -m shell -a rm -rf /root/1 -b
193.168.151.11 | CHANGED | rc=0 >>
193.168.151.5 | CHANGED | rc=0 >>
193.168.151.6 | CHANGED | rc=0 >>
193.168.151.12| CHANGED | rc=0 >>
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容