自动化运维之ansible

大纲:

     一、ansible是什么

     二、ansible的特点

     三、ansible的任务执行模式和执行流程

     四、ansible的安装

     五、ansible常用命令

     六、ansible常用模块

     七、关于ansible playbook

     八、角色定制roles

      环境介绍:接近年关,某公司计划做一次大型促销活动,要求各业务组队年底大促做准备,其中运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以供开发和测试人员做测试,运维部门经理要求其工作人员尽快实现。那么,如何实现呢?此时,ansible能担此大任。

一、ansible是什么

一种新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一
二、ansible的特点

1、部署简单,只需在主控端部署ansible环境,被控端无需做任何操作
2、默认使用SSh协议对设备进行管理
3、有大量常规运维操作模块,可实现日常绝大部分操作
4、配置简单、功能强大、扩展性强
5、支持API及自定义模块,可通过python轻松扩展
6、通过playbooks来定制强大的配置、状态管理
7、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可
8、提供一个功能强大、操作性强的web管理界面和REST API接口------AWX平台

三、ansible的任务执行模式和执行流程

ansible系统由控制主机对被管节点的操作方式可分为两类,即ad-hoc和 playbook
       ad-hoc模式,使用单个模块,相当于bash中的一句话shell
       playbook模式是ansible主要管理方式,通过多个task集合完成一类功能,简单理解为通过组合多条ad-hoc操作的配置文件

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

四、ansible的安装

一般两种方式:yum安装和pip程序安装
1、使用yum安装
yum install epel-release -y
yum install ansible –y
2、 使用pip(python的包管理模块)安装
pip install ansible
如果没pip,需先安装pip.yum可直接安装:
yum install python-pip
pip install ansible

五、ansible常用命令

-a MODULE_ARGS, --args=MODULE_ARGS     模块的参数,如果执行默认COMMAND的模块,即是命令参数

-C, --check      只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化

-f FORKS, --forks=FORKS    并行任务数,NUM被指定为一个整数,默认是5

-i INVENTORY, --inventory-file=INVENTORY    指定库存主机文件的路径,默认为/etc/ansible/hosts

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

-R SU_USER, --su-user=SU_USER    指定SU的用户,默认是root用户

-T TIMEOUT, --timeout=TIMEOUT     指定SSH默认超时时间, 默认是10S

-v, --verbose verbose mode (-vvv for more, -vvvv to enable)    详细信息

六、ansible常用模块

1、主机连通性测试

2、command:在远程主机上执行命令

3、shell模块在远程主机上调用shell解释器运行命令,支持shell各种功能,例如管道

4、copy:复制文件到远程主机,也可以修改权限等等

5、file:设置文件属性

6、fetch:从远程主机获取文件到本地

7、cron:管理cron计划任务

8、yum:安装软件

9、service:服务程序管理

10、user:用户模块管理

11、group:用户组模块,添加或删除组

12、script:在指定节点上运行服务端的脚本

13、setup:用于收集被管理主机上的信息,例如CPU、内存等

七、关于ansible playbook

1、ansible playbook简介

playbook是ansible用于配置、部署和管理被控节点的剧本。通过playbook的详细描述,执行其中的一系列tasks,可以让远程主机达到预期的状态。

2、ansible playbook格式

YMAL格式是类似于JSON的文件格式

文件的第一行应该以“-”三个连字符)开始。表明YMAL文件的开始

在同一行中,#之后的内容表示注释

YMAL中的列表元素以“-”开头后紧跟着一个空格,后面为元素内容

同一个列表中的元素应该保持相同的缩进

hosts、remote_user、tasks等对象的表示方法都是键值中间以“:”分隔表示,“:”后面还要增加一个空格

3、playbook的核心元素

hosts:主机

tasks:任务列表

variables:变量

templates:包含了模板语法的文本文件

handlers:由特定条件触发的任务

4、模板templates

文本文件:嵌套有脚本

使用模板操作远程主机的nginx服务,具体过程如下:

①使用setup模块查询出CPU的信息

②修改配置文件

[root@node2 tmp]# vim nginx.conf.j2                        CP到tmp的配置文件,记得备份
worker_processes {{ ansible_processor_vcpus }};    调用上面setup查到的CPU信息
listen {{ nginxport }};                                                   指定端口,调用下面playbook里面指定的端口
[root@node2 ansible]# vim nginx.yml                        向/tmp下的配置文件里传参数)

③执行剧本

[root@node2 ansible]# ansible-playbook nginx.yml -t reloadnginx

④在IP为172.17.19.117和107被监控端查看一下,8888端口打开

在117和107端打开nginx.conf文件,可以看出传进来的参数就是playbook里面定义的,模板使用成功。
  3 worker_processes 1;
37 server {
38 listen 8888;

八、角色定制roles

       应用环境:对于以上所有的方式有个弊端就是无法实现复用,比如说在同时部署web、mariabd、haproxy时或不同服务器组合不同的应用就需要些多个yml文件,难以实现灵活的调用。而roles用于层次性、结构化的组织playbook,能够根据层次型结构自动装载变量文件、tasks以及handlers等。

1、roles目录结构

files/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由
main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由
main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

2、具体角色定制过程如下:

① 在roles目录下生成对应的目录结构
mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
② 定义/tasks/main.yml的配置文件如下

[root@node2 nginx]# cp /tmp/nginx.conf.j2 templates/    对照上面的template模板路径
[root@node2 nginx]# cd files/
[root@node2 files]# lftp 172.17.0.1
lftp 172.17.0.1:/pub/Sources/7.x86_64/nginx> get nginx-1.10.2-1.el7.ngx.x86_64.rpm   copy的相对路径是基于file的路径,所以要把包下载到file目录下

③ 修改变量文件

[root@node2 nginx]# vim vars/main.yml

    nginxport: 9999

④ 定义handlers文件

[root@node2 nginx]# vim handlers/main.yml 

   - name: new conf to reload
            service: name=nginx state=restarted

⑤ 定义/etc/ansible/roles.yml的playbook文件

[root@node2 ansible]# vim roles.yml

    ---
    - hosts: web
             remote_user: root
      roles:
    - nginx

⑥ 执行角色文件

⑦ 在被管理节点117和107查看nginx服务,9999端口打开

至此,对ansible的简单介绍就结束啦,谢谢浏览~

 

posted @ 2017-12-09 21:00  千纸赫H  阅读(258)  评论(0编辑  收藏  举报