layout: post
title: Ansible基础与安装
date: 2018-01-12
tags: [“Ansible”,”自动化运维工具”]
一、Ansible的轻量级的运维工具(批量管理100台-500台服务器的应用)
创始人,Michael DeHaan( Cobbler 与 Func 的作者)
2012-03-09,发布0.0.1版,红帽收购
2015-10-17,Red Hat宣布收购
二、Ansible的特性
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
三、Ansible的工作原理
Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用、配置、编排 task(持续 交付、无宕机更新等),采用 paramiko 协议库),通过SSH或者ZeroMQ等连接主机。Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执 行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排。
四、Ansible的核心模块
1、ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件。
2、INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
3、MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义
4、PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
5、API:供第三方程序调用的应用程序编程接口
6、 ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具。
五、利用ansible实现管理的方式
1、Ad-Hoc 即ansible命令,主要用于临时命令使用场景
2、Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划
六、Ansible的安装方式
1、rpm包安装: EPEL源
- #两个mirror选一个
- wget https://mirrors.aliyun.com/repo/epel-6.repo -O /etc/yum.repos.d/epel.repo
- wget https://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo
- yum install ansible
2、编译安装(需要python模块的支持)
- yum -y install python-jinja2 PyYAML python-paramiko
- python-babel python-crypto
- tar xf ansible-version.tar.gz
- cd ansible-version
- python setup.py build
- python setup.py install
- mkdir /etc/ansible
- cp -r examples/* /etc/ansible
3、 Git方式
- git clone git://github.com/ansible/ansible.git --recursive
- cd ./ansible
- source ./hacking/env-setup
4、pip安装
- 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
5、apt-get安装
- 在ubuntu及其衍生版中,可以通过增加ppa源进行apt-get安装
- sudo apt-get install software-properties-common
- sudo apt-add-repository ppa:ansible/ansible
- sudo apt-get update
- sudo apt-get install ansible
6、通过 ansible —version 查看当前ansible版本呢
七、Ansible的文件
配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性 很少更改
/etc/ansible/hosts 主机清单 重要
/etc/ansible/roles/ 存放角色的目录
程序
/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主要的配置
1、/etc/ansible/hosts文件格式
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。
例:
- [webservers]
- 172.18.30.1
- 172.18.30.2:22
- [mysql]
- 172.18.30.3
- [nginx]
- nginx.test.com
如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
- [webserver]
- www[01:100].test.com
- [mysqlserver]
- mysql[a:f].test.com
2、/etc/ansible/ansible.cfg 文件配置
- [defaults]
- #inventory = /etc/ansible/hosts # 主机列表配置文件
- #library = /usr/share/my_modules/ # 库文件存放目录
- #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
- #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
- #forks = 5 # 默认并发数
- #sudo_user = root # 默认sudo 用户
- #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
- #ask_pass = True
- #remote_port = 22
- #host_key_checking = False # 检查对应服务器的host_key,建议取消注释
九、Ad-Hoc命令格式
1、ansible命令格式:
ansible
—version 显示版本
-m module 指定模块,默认为command
-v 详细过程 -vv -vvv更详细
—list-hosts 显示主机列表,可简写-list
-k, —ask-pass 提示连接密码,默认Key验证
-K, —ask-become-pass 提示输入sudo
-C, —check 检查,并不执行
-T, —timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, —user=REMOTE_USER 执行远程执行的用户
-b, —become 代替旧版的sudo 切换
-a,模块的参数,建议用引号引起来,如果不使用引号,或使用双引号,参数体如果是shell变量的话,将会在本地解析,而不是在远程主机上解析
2、ansible的Host-pattern
All :表示所有/etc/ansible/hosts下的所有主机
ansible all -m ping
- :通配符
ansible ““ -m ping
ansible 192.168.1. -m ping
ansible “*srvs” -m ping
或关系
ansible “websrvs:appsrvs” -m ping
ansible “192.168.1.10:192.168.1.20” -m ping
逻辑与
ansible “websrvs:&dbsrvs” -m ping
在websrvs组并且在dbsrvs组中的主机
逻辑非
ansible ‘websrvs:!dbsrvs’ -m ping
在websrvs组,但不在dbsrvs组中的主机
综合逻辑
ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m ping
正则表达式
ansible “websrvs:&dbsrvs” -m ping
ansible “~(web’db).*.magedu.com” -m ping
十、Ansible命令执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
- 给文件+x执行
- 执行并返回结果
- 删除临时py文件,sleep 0退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
Ansible文献:http://www.ansible.com.cn/