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的工作原理

  1. Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用、配置、编排 task(持续 交付、无宕机更新等),采用 paramiko 协议库),通过SSH或者ZeroMQ等连接主机。Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 KerberosLDAP)推送到被管理端执 行,执行完之后自动删除,可以使用 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源

  1. #两个mirror选一个
  2.  
  3. wget https://mirrors.aliyun.com/repo/epel-6.repo -O /etc/yum.repos.d/epel.repo
  4.  
  5. wget https://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo
  6.  
  7. yum install ansible

2、编译安装(需要python模块的支持)

  1. yum -y install python-jinja2 PyYAML python-paramiko
  2. python-babel python-crypto
  3. tar xf ansible-version.tar.gz
  4. cd ansible-version
  5. python setup.py build
  6. python setup.py install
  7. mkdir /etc/ansible
  8. cp -r examples/* /etc/ansible

3、 Git方式

  1. git clone git://github.com/ansible/ansible.git --recursive
  2. cd ./ansible
  3. source ./hacking/env-setup

4、pip安装

  1. yum install python-pip python-devel
  2. yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
  3. pip install --upgrade pip
  4. pip install ansible --upgrade

5、apt-get安装

  1. ubuntu及其衍生版中,可以通过增加ppa源进行apt-get安装
  2. sudo apt-get install software-properties-common
  3. sudo apt-add-repository ppa:ansible/ansible
  4. sudo apt-get update
  5. 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端口,还可以在主机名称之后使用冒号加端口号来标明。

例:

  1. [webservers]
  2. 172.18.30.1
  3. 172.18.30.2:22
  4.  
  5. [mysql]
  6. 172.18.30.3
  7.  
  8. [nginx]
  9. nginx.test.com

如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

  1. [webserver]
  2. www[01:100].test.com
  3.  
  4. [mysqlserver]
  5. mysql[a:f].test.com

2、/etc/ansible/ansible.cfg 文件配置

  1. [defaults]
  2. #inventory = /etc/ansible/hosts # 主机列表配置文件
  3. #library = /usr/share/my_modules/ # 库文件存放目录
  4. #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
  5. #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
  6. #forks = 5 # 默认并发数
  7. #sudo_user = root # 默认sudo 用户
  8. #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
  9. #ask_pass = True
  10. #remote_port = 22
  11. #host_key_checking = False # 检查对应服务器的host_key,建议取消注释

九、Ad-Hoc命令格式

1、ansible命令格式:

ansible [-m module_name] [-a args]

—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命令执行过程

  1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
  2. 加载自己对应的模块文件,如command
  3. 通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  4. 给文件+x执行
  5. 执行并返回结果
  6. 删除临时py文件,sleep 0退出

执行状态:

绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败

 

Ansible文献:http://www.ansible.com.cn/

文档更新时间: 2018-12-20 15:35   作者:张尚