zoukankan      html  css  js  c++  java
  • 自动化运维之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的简单介绍就结束啦,谢谢浏览~

  • 相关阅读:
    hutool 糊涂
    java 连接 Redis 工具
    生成6位验证码
    @FeignClient定义冲突解决
    Seate分布式事务解决方案
    算法——最小生成树的关键边和伪关键边
    《Kubernetes权威指南》读书笔记
    Docker——容器卷管理
    算法——课程表 II(有向图拓扑排序)
    Docker——网络
  • 原文地址:https://www.cnblogs.com/Qian-free/p/7978651.html
Copyright © 2011-2022 走看看