Ansible基础与安装

  • A+
所属分类:实用运维方案
一、Ansible的轻量级的运维工具

创始人,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基础与安装

四、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的常用模块

cron模块:
在指定节点上定义一个计划任务

group模块:
在所有节点上创建一个组

user模块:
在指定节点上创建一个用户名

yum模块:
在指定节点上安装软件

service模块:
启动指定节点上的服务

script模块:
在指定节点上执行脚本

ping模块:
查指定节点机器是否还能连通

get_url模块:
将url文件下载到指定节点的/tmp目录下

六、利用ansible实现管理的方式

1、Ad-Hoc 即ansible命令,主要用于临时命令使用场景

2、Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划

七、Ansible的安装方式

1、配置epel源(我是直接使用的阿里的yum仓库

#两个mirror选一个(选择对用服务器的版本进行选择相应的yum源
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模块的支持)python版本乣2.6以上,pyrhon -v 查看一下

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、通过 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、在master和所有slave上,使用yourname用户名执行:
复制代码 代码示例:
ssh-keygen -t dsa -P '' -f /home/yourname/.ssh/id_dsa
2、在master的/home/yourname/.ssh目录下,执行 :
复制代码 代码示例:
cat id_dsa.pub > authorized_keys
3、将master上的authorized_keys拷贝到所有slave的相同目录下。命令:
复制代码 代码示例:
scp /home/yourname/.ssh/authorized_keysyourname@192.168.38.58:/home/yourname/.ssh/scp /home/yourname/.ssh/authorized_keys yourname@192.168.38.60:/home/yourname/.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
例二、

1、添加ansible客户机组,命令:vi /etc/ansible/hosts,在最后面添加如下内容:
[group1]
192.168.1.234
192.168.1.235
2、修改日志输出目录vi /etc/ansible/ansible.cfg
log_path = /var/log/ansible.log

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 [-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退出

执行状态:

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

avatar

发表评论

您必须登录才能发表评论!