Ansible--自动化运维工具

一、ansible 简介

1、ansible 是什么

        ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一

2、ansible 特点

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

  2. 默认使用SSH协议对设备进行管理;

  3. 有大量常规运维操作模块,可实现日常绝大部分操作;

  4. 配置简单、功能强大、扩展性强;

  5. 支持API及自定义模块,可通过Python轻松扩展;

  6. 通过Playbooks来定制强大的配置、状态管理;

  7. 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

  8. 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

3、ansible 架构

上图中我们看到的主要模块如下:

二、ansible 任务执行

1、ansible 任务执行模式

Ansible 系统由控制主机对被管节点的操作方式可分为两类,即ad-hocplaybook

ad-hoc模式(点对点模式):使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令;就相当于bash中的一句话shell

playbook模式(剧本模式) :playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。 类似于shell脚本,可以进行多个步骤

role模式(角色模式):类似于多个脚本导入

2、ansible 执行流程

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

3、ansible 命令执行过程

  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg

  2. 查找对应的主机配置文件,找到要执行的主机或者组;

  3. 加载自己对应的模块文件,如 command;

  4. 通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;

  5. 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;

  6. 给文件 +x 执行权限;

  7. 执行并返回结果;

  8. 删除临时py文件,sleep 0退出。

三、ansible 配置

1、yum 安装ansible

首先安装一个 epel-release 包

yum -y install epel-release

wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-6.repo

然后安装 ansible

yum -y install ansible

2、ansible 程序结构

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

3、ansible配置文件查找顺序

  1. 检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);

  2. ~/.ansible.cfg 检查当前目录下的ansible.cfg配置文件;

  3. /etc/ansible.cfg 检查etc目录的配置文件。

4、ansible配置文件

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

5、ansible主机清单

定义方式:

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

green.example.com
blue.example.com
192.168.100.1
192.168.100.10

2 定义一个主机组[组名]把地址或主机名加进去

[mysql_test]
192.168.253.159
192.168.253.160
192.168.253.153
192.168.153.[199:202]

3 主机组加用户密码

[web]
web1
web2
[web:vars]
ansible_ssh_root="root"
ansible_ssh_pass="1"

4 多个主机组

[web]
web1
web2
[db]
db1
db2
[host:children]
web
db

具体操作如下:

vim /etc/ansible/hosts

写入主机组

[web]
192.168.8.129
192.168.8.130

四、ansible 常用命令

1、ansible 命令集

/usr/bin/ansible
Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行

/usr/bin/ansible-doc
Ansible 模块功能查看工具

/usr/bin/ansible-galaxy
下载/上传优秀代码或Roles模块的官网平台,基于网络的

/usr/bin/ansible-playbook  
Ansible 定制自动化的任务集编排工具

/usr/bin/ansible-pull
Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)

/usr/bin/ansible-vault
Ansible 文件加密工具

/usr/bin/ansible-console
Ansible基于Linux Console界面可与用户交互的命令执行工具

2、ansible-doc 命令

获取全部模块的信息

ansible-doc -l

获取指定模块的使用帮助

ansible-doc -s MOD_NAME

查看ansible-doc的全部用法

[root@server ~]# ansible-doc
Usage: ansible-doc [options] [module...]

Options:
  -h, --help            show this help message and exit  
# 显示命令参数API文档
  -l, --list            List available modules  
#列出可用的模块
  -M MODULE_PATH, --module-path=MODULE_PATH  specify path(s) to module library (default=None)
#指定模块的路径                       
  -s, --snippet         Show playbook snippet for specified module(s)  
#显示playbook制定模块的用法
  -v, --verbose         verbose mode (-vvv for more, -vvvv to enable  
# 显示ansible-doc的版本号查看模块列表:
                        connection debugging)
  --version             show program's version number and exit

以mysql相关的为例:

ansible-doc -l |grep mysql

ansible-doc -s mysql_user

3、ansible 命令

命令格式

ansible <host-pattern> [-f forks] [-m module_name] [-a args]
ansible 主机清单中的主机组 -f 开启线程数 -m 模块 -a 模块需要的参数

通过`ansible -h`来查看帮助

ansible -h

常用选项

`-a MODULE_ARGS` #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等

`-k`,`--ask-pass` #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证

`--ask-su-pass` #ask for su password。su切换密码

`-K`,`--ask-sudo-pass` #ask for sudo password。提示密码使用sudo,sudo表示提权操作

`--ask-vault-pass` #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问

`-B SECONDS` #后台运行超时时间

`-C` #模拟运行环境并进行预运行,可以进行查错测试

`-c CONNECTION` #连接类型使用

`-f FORKS` #并行任务数,默认为5

`-i INVENTORY` #指定主机清单的路径,默认为`/etc/ansible/hosts`

`--list-hosts` #查看有哪些主机

`-m MODULE_NAME` #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数

`-o` #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用

`-s` #用 sudo 命令

`-U SUDO_USER` #指定 sudo 到哪个用户,默认为 root 用户

`-T TIMEOUT` #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改

`-u REMOTE_USER` #远程用户,默认为 root 用户

`-v` #查看详细信息,同时支持`-vvv`,`-vvvv`可查看更详细信息

4、ansible 配置公私钥

1 生成私钥

ssh-keygen

2 分发私钥

ssh-copy-id root@192.168.8.129
ssh-copy-id root@192.168.8.130

这样的话,就可以实现无密码登录

如果出现了以下报错:

-bash: ssh-copy-id: command not found

需要安装一个包:

yum -y install openssh-clients

安装好即可正常使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值