• Ansible自动化运维


    Ansible-自动化运维工具

    ansible简介

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

    ansible是基于模块工作的,本身没有批量部署能力,真正具有批量部署的是ansible所运行的模块。

    ansible的特性

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

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

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

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

    有Paramiko,PyYAML,Jinja2三个关键模块;

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

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

    可使用任何编程语言写模块;

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

    提供一个功能强大、操作性强的web管理界面和REST API接口--AWX平台

    ansible架构图

    Ansible:ansible核心程序

    Host Inventory:记录由ansible管理的主机信息,包括端口、密码、ip等

    Play books:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能

    Core Modules:核心模块,主要操作是通过调用核心模块来完成管理任务

    Custom Modules:自定义模块,完成核心模块无法完成的功能,支持多种语言

    Plugins:插件,实现记录日志,发送邮件等功能

    Connection Plugins:连接插件,ansible和host通信使用,默认ssh连接

    ansible工作原理

    ansible任务执行模式

    ansible系统由控制主机对被控节点的操作可分为两类,即adhoc和playbook

    ad-hoc模式(点对点模式)

    使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令

    playbook模式(剧本模式)

    是ansible主要管理方式,也是ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等

    ansible执行流程

    ansible命令执行过程

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

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

    3、加载自己对应的模块文件

    4、通过ansible将模块或命令生成对应的临时python文件,并将该文件传输至远程服务器

    5、对应执行用户的家目录的文件

    6、给文件+x执行权限

    7、执行并返回结果

    8、删除临时python文件,sleep 0 退出

    ansible常用命令

    ansible命令集

    /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    可与用户交互的命令执行工具

    ansible命令使用

    命令格式

    # ansible  <host-pattern>  [-f forks]  [-m module_name]  [-a args]

    -a    模块的参数

    -k    登陆密码

    -c    连接类型使用

    -m    执行模块的名字

    -o    压缩输出

    -R    指定用户

    ansible配置

    准备至少两台机器,一台主控机器,其余的为被控机器

    ansible安装

    在主控机器上安装ansible

    # yum install -y ansible

    生成密钥对

    # ssh-keygen

    设置密钥认证

    # ssh-copy-id root@ip

    配置主机清单

    # vi /etc/ansible/hosts

    [web]          ##主机组名

    192.168.37.16

    192.168.37.17

    ansible常用模块

    主机连通性测试

    # ansible web -m ping 

    192.168.37.16 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    192.168.37.17 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }

    确认主机是连通状态

    command模块

    该模块可以直接在远程主机上执行命令,并将结果返回本主机

    模块常用选项

    chdir    在执行命令之前,先切换到该目录

    executable    切换shell来执行命令,需要使用命令的绝对路径

    free_form    要执行的Linux指令

    creates    一个文件名,当这个文件存在,则该命令不执行

    removes     一个文件名,当这个文件不存在,则该命令不执行

    copy模块

    该模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等

    常用选项

    src    被复制到远程主机的本地文件

    content    用于替换“src”,可以直接指定文件的值

    dest    将源文件复制到的远程主机的绝对路径

    backup    当文件内容发生改变后,再覆盖之前把源文件备份

    directory_mode    递归设定目录的权限

    file模块

    该模块主要用于设置文件的属性,如创建文件、创建链接文件、删除文件等

    常用选项

    group    定义文件目录的属组,后面可以加上mode:定义文件目录的权限

    owner    定义文件目录的属主,后面必须加上path:定义文件目录的路径

    recurse    递归设置文件的属性,只对目录有效

    dest    被链接到的路径

    state    状态,有以下选项

       directory    如果目录不存在,就创建目录

       file    即使文件不存在,也不会被创建

       link    创建软链接

       hard    创建硬链接

       touch    如果文件不存在,则创建一个新文件,如果文件存在,则更新最后修改时间

       absent    删除目录、文件或者取消链接文件

    fetch模块

    该模块用于从远程某主机获取文件到本地

    选项

    dest    用来存放文件的目录

    src    在远程拉取的文件

    yum模块

    该模块主要用于软件的安装

    常用选项

    name=    所安装的包的名字

    update_cache    强制更新yum的缓存

    conf_file    指定远程yum安装时所依赖的配置文件

    state=    状态,有以下选项

       present    安装

       latest    安装最新的

       absent    卸载软件

    service模块

    该模块用于服务程序的管理

    常用选项

    arguments    命令行提供额外的参数

    enabled    设置开机启动

    name=    服务名称

    runlevel    开机启动的级别

    sleep    在重启服务的过程中,是否等待

    state    状态,有以下选项

       started    启动服务

       stopped    停止服务

       restarted    重启服务

       reloaded    重载配置

    user模块

    该模块主要用来管理用户账号

    常用选项

    comment    用户的描述信息

    createhome    是否创建家目录

    force    在使用state=absent时,行为与userdel-force一致

    group    指定基本组

    groups    指定附加组

    home    指定用户家目录

    name    指定用户名

    non_unique    允许改变非唯一的用户ID值

    password    指定用户密码

    state    设置账号状态

    system    当创建一个用户,设置这个用户时系统用户

    uid    指定用户的uid

    group模块

    该模块主要用于添加或删除组

    常用选项

    gid=    设置组的gid号

    name=    指定组的名称

    state=    指定组的状态

    system=    设置值为yes,表示创建为系统组

    Ansible playbook

    简介

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

    使用场景

    使用playbook可以方便的重用这些代码,可以移植到不同的机器上面,最大化的利用代码

    格式

    playbook由YMAL语言编写

    1、文件的第一行应该以“---”(三个连字符)开始,表明YAML文件的开始

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

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

    4、同一个列表中的元素应该保持相同的缩进,否则会被当做错误处理

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

    文件名称应该以 .yml 结尾,由三个部分组成

    host部分:使用hosts指示使用哪个主机或主机组来运行下面的tasks,每个playbook都必须指定hosts,hosts也可以使用通配符格式

    remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行tasks的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应task的权限

    tasks:指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块,tasks包含name和要执行的模块

    核心元素

    playbook的核心元素

    Hosts:主机组

    Tasks:任务列表

    Variables:变量,设置方法有四种

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

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

    playbook实战-nginx安装

    先在主控机器上安装并编译好nginx

    进入ansible配置文件目录

    # cd /etc/ansible

    创建目录

    # mkdir nginx.install

    # cd nginx.install

    # mkdir -p roles/{common.install}/{handlers,files,meta,tasks,templates,vars}

    ## roles目录下由两个角色,common为一些准备操作,install为安装nginx的操作。每个角色下又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件,启动脚本等模板文件,vars下为定义的变量

    将nginx目录打包,放到/etc/ansible/nginx_install/roles/install/files/下面并重命名

    # mv /etc/local/sbin/nginx  /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz

    启动脚本和配置文件也移动到/etc/ansible/nginx_install/roles/install/templates/下面

    定义依赖包

    # cd /ect/ansible/nginx.install/roles

    # vi common/tasks/main.yml

    - name: Install initializtion require software
      yum: name={{ item }} state=installed
      with_items:
      - zlib-devel
      - pcre-devel

    定义变量

    # vi install/vars/main.yml

    nginx_user: www
    nginx_port: 80
    nginx_basedir: /usr/local/nginx

    拷贝文件

    # vi install/tasks/copy.yml

    - name: Copy Nginx Software
      copy: src=nginx dest=/tmp/nginx.tar.gz owner=root group=root
    - name: Uncompression Nginx Software
      shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
    - name: Copy Nginx Start Script
      template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
    - name: Copy Nginx Config
      template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644

    建立用户,启动服务,删除压缩包

    # vi install/tasks/install.yml

    - name: Create Nginx User
      user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
    - name: Create Nginx Service
      shell: /etc/init.d/nginx start
    - name: Add Boot Start Nginx Service
      shell: chkconfig --level 345 nginx on
    - name: Delete Nginx compression files
      shell: rm -rf /tmp/nginx.tar.gz

    调用文件

    # vi install/tasks/main.yml

    - include: copy.yml
    - include: install.yml

    定义入口文件

    # vi /etc/ansible/nginx_install/install.yml

    ---
    - hosts: testhost
      remote_user: root
      gather_facts: Ture
      roles:
      - common
      - install

    执行

    # ansible-playbook /etc/ansible/nginx_install/install.yml

  • 相关阅读:
    Linux:DHCP服务配置
    调整 全局jvm 大小 tomcat 调整jvm大小
    Arts打卡第8周
    mysql 对返回的值是null进行判断和重新赋值
    从xml中返回的对象,和new 返回的对象时不同的。
    检查时异常和运行是异常 + 事务回滚 +隔离级别
    怎么在for循环中新建出不同的list
    mysql中查询某个字段重复的数据
    Arts打卡第7周
    将Excel文件导入到Navicat Premium中日期变为0000-00-00
  • 原文地址:https://www.cnblogs.com/tui463/p/12754880.html
Copyright © 2020-2023  润新知