美文网首页
absible原理及基础应用

absible原理及基础应用

作者: 芷_念 | 来源:发表于2017-09-25 08:57 被阅读0次

    一、ansible的作用及工作结构

    1、ansible简介:
    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
    (1)、连接插件connection plugins:负责和被监控端实现通信;
    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
    (3)、各种模块核心模块、command模块、自定义模块;
    (4)、借助于插件完成记录日志邮件等功能;
    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

    2、ansible的总体架构:连接其他主机默认使用ssh协议

    由上面的图可以看到 Ansible 的组成由 5 个部分组成:

    Ansible: 核心
    Modules: 包括 Ansible 自带的核心模块及自定义模块
    Plugins: 完成模块功能的补充,包括连接插件、邮件插件等
    Playbooks: 剧本(编排好一步一步的执行);定义 Ansible 多任务配置文件,有 Ansible 自动执行
    Inventory: 定义 Ansible 管理主机的清单
    

    二、ansible的安装以及常用的模块使用

    1、ansible无服务器端,使用时直接运行命令即可,同时不需要在被管控主机上安装任何客户端,因此ansible是一个十分轻量级的工具,可以再epel源进行安装。

    配置好epel源直接安装yum安装ansible

    [root@centos7 ~]#yum -y install ansible
    

    查看生成的主要文件:

    [root@centos7 ~]#rpm -ql ansible
    /etc/ansible
    /etc/ansible/ansible.cfg   #配置文件
    /etc/ansible/hosts   #主机库(host inventory)
    /usr/bin/ansible   #主程序
    /usr/bin/ansible-doc   #文档
    /usr/bin/ansible-playbook   #剧本
    ......
    

    2、ansible命令的使用方法
    语法:

    ansible <host-pattern> [-f forks] [-m module_name] [-a args]
        
        host-pattern:host inventory文件的一个组名,可以为all
        -f forks:并行处理的个数,默认为5
        -m module_name:模块名,默认为command
        -a args:参数
    ansible-doc:
        -l:查看模块列表
        -s:查看相关模块参数
    

    Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,改配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否需要开启log功能、默认端口、key文件位置等。

    [defaults]
        # some basic default values...
        hostfile       = /etc/ansible/hosts   \\指定默认hosts配置的位置
        # library_path = /usr/share/my_modules/
        remote_tmp     = $HOME/.ansible/tmp
        pattern        = *
        forks          = 5
        poll_interval  = 15
        sudo_user      = root  \\远程sudo用户
        #ask_sudo_pass = True  \\每次执行ansible命令是否询问sudo密码
        #ask_pass      = True  \\每次执行ansible命令时是否询问ssh密码
        transport      = smart
        remote_port    = 22
        module_lang    = C
        gathering = implicit
        host_key_checking = False    \\关闭第一次使用ansible连接客户端是输入命令提示
        log_path    = /var/log/ansible.log \\需要时可以自行添加。chown -R root:root ansible.log
        system_warnings = False    \\关闭运行ansible时系统的提示信息,一般为提示升级
        # set plugin path directories here, separate with colons
        action_plugins     = /usr/share/ansible_plugins/action_plugins
        callback_plugins   = /usr/share/ansible_plugins/callback_plugins
        connection_plugins = /usr/share/ansible_plugins/connection_plugins
        lookup_plugins     = /usr/share/ansible_plugins/lookup_plugins
        vars_plugins       = /usr/share/ansible_plugins/vars_plugins
        filter_plugins     = /usr/share/ansible_plugins/filter_plugins
        fact_caching = memory
        [accelerate]
        accelerate_port = 5099
        accelerate_timeout = 30
        accelerate_connect_timeout = 5.0
        # The daemon timeout is measured in minutes. This time is measured
        # from the last activity to the accelerate daemon.
        accelerate_daemon_timeout = 30
    

    下面对一些常用的模块进行演示说明:
    首先准备测试环境:四台主机,一台作为ansible的控制主机,另外三台作为被管理的机器节点

    1、ansible的连接:
    通过前面的介绍我们知道,ansible是基于ssh协议来进行数据传输,ssh连接一般由两种方法,一种是使用密码密钥,一种是使用公私密码免密码登陆,为了顺利使用ansible,下面配置基于公私密码免密码登录

    (1)生成密钥对

    [root@centos7 ~]#ssh-keygen -t rsa
    \\-t表示使用的加密类型,其中rsa1表示version1版本,rsa、dsa、ecdsa的加密是对于version2版本
    
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):   \\这里询问你要把生成的密钥文件保存在哪里,默认是在家目录下的.ssh文件夹中,回车保存默认目录
    
    Enter passphrase (empty for no passphrase):
    \\ 这里是对密钥文件加密,不输入则表示不加密
     
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    e3:39:0e:4b:f0:a1:4f:23:aa:f2:d2:5f:d6:90:8e:af root@centos7.3.zj.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |                 |
    |                 |
    |                 |
    |       .         |
    |    . + S        |
    |     * = o       |
    | .  + X =        |
    |o .. O = .       |
    |o+o.E.+ .        |
    +-----------------+
    

    (2)查看已经成功生成了一对密钥

    [root@centos7 ~]#ls /root/.ssh
    id_rsa  id_rsa.pub  known_hosts
    \\其中id_rsa为私钥,id_rsa.pub为公钥
    

    (3)在生成完密钥对之后将公钥上传给服务器对应用户的家目录

    [root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.252.190
    
    [root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.252.192
    
    [root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.250.129
    

    已经配置好无需密码登录了,下面进行ansible的配置

    2、配置ansible需要控制的主机列表,其配置在/etc/ansible/hosts文件中

    [test表示控制的组可以根据实际进行定义,下面添加主机列表]

    3、命令模块

    这也是默认的模块,也就是不加-m指定模块时默认的模块,这个模块不能使用包含管道的命令。

    [root@centos7 ~]#ansible-doc -s command
    

    演示:

    [root@centos7 ~]#ansible test -a 'date'
    

    4、shell模块

    shell模块也是可以执行命令,与command模块不同的是,command模块不能执行包含管道的模块,而shell可以

    [root@centos7 ~]#ansible-doc -s shell
    

    演示:

    [root@centos7 ~]#ansible test -m shell -a 'echo 111 > /tmp/test.txt'
    172.16.250.129 | SUCCESS | rc=0 >>
    
    
    172.16.252.190 | SUCCESS | rc=0 >>
    
    
    172.16.252.192 | SUCCESS | rc=0 >>
    
    

    客户端查看已经生成文件

    [root@centos7 ~]#cat /tmp/test.txt 
    111
    

    5、copy模块:可以把本机的文件拷贝至被管理的机器,通常用于分发配置文件

    [root@centos7 ~]#ansible-doc -s copy
    

    演示:

    [root@centos7 ~]#ansible test -m copy -a 'src=/etc/issue dest=/tmp/issue.txt mode=600'
    

    查看测试成功

    [root@centos7 ~]#ansible test -a 'ls /tmp/issue.txt'
    

    6、cron模块:分发定期任务

    [root@centos7 ~]#ansible-doc -s cron
    

    演示:每5分钟同步ntp服务器

    [root@centos7 ansible]#ansible test -m cron -a 'name="test" minute=*/5 hour=* day=*  month=* weekday=* job="usr/sbin/ntpdate 172.16.0.1"'
    
    

    7、yum模块:顾名思义,该模块可以管理软件的安装和卸载,state=present(安装) absent(卸载)

    [root@centos7 ~]#ansible-doc -s yum
    

    演示:

    [root@centos7 ~]#ansible test -m yum -a 'name=tree state=present'
    
    

    测试安装是否成功

    [root@centos7 ~]#ansible test -a 'rpm -q httpd'
    

    8、service模块
    state=started/stopped/restarted

    [root@centos7 ~]#ansible-doc -s service
    

    演示:

    现在的httpd服务是停止的,我们重启一下

    [root@centos7 ~]#ansible test -m service -a 'name=httpd state=started '
    

    查看已经启动成功

    [root@centos7 ~]#ansible test -m shell -a 'ss -tnl|grep 80'
    

    三、ansible的playbook使用

    由上面的演示我们体会到了ansible的强大,但是上面的演示都是一条一条指令的输入,这样未免影响了效率,这里可以使用playbook剧本像shell脚本一样一次执行多条语句

    1:playbook组织格式:YAML语言格式

    playbook是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行

    (1)YAML简介

    • YAML:YAML Ain‘t Markup Language; Yet Another Markup Language;
    • 类似于半结构化数据,声明配置;可读性较高的用来表达资料序列的格式,易于与脚本语言交互
    • 官方站点:http://www.yaml.org
      (2)语法格式
    • 任何数据结构都用缩进来标识,可以嵌套
    • 每一行是一个键值数据key:value,冒号隔开。若想在一行标识需要用{ } 和,分隔格式
    • 列表用-标识
      (3)playbook组成结构
    • Tasks:任务,即调用模块完成的操作
    • Variables:变量
    • Templates:模板
    • Handlers:处理器,由某个条件触发执行的操作
    • Roles:角色
      基本结构:
    - host:webservices
     remote_user:
       - tasks:
       - task1
       module_name
    

    YAML文件扩展名通常为.yaml,如test.yaml

    2、playbook的使用:
    前面已经介绍了playbook的存储在*.yaml文件中,我们创建一个yaml文件验证一下

    [root@centos7 ansible]#cat /etc/ansible/test.yaml
    - hosts: test
      remote_user: root
      tasks:
      - name: user a group
        group: gid=1111 name=test system=no
      - name: show command
        shell: date
    
    

    正式使用时我们最好先运行下看有没有错误

    [root@centos7 ansible]#ansible-playbook --check test.yaml
    

    没有问题就可以正式运行命令脚本了

    [root@centos7 ansible]#ansible-playbook test.yaml 
    

    检查测试成功

    [root@centos7 ansible]#ansible test -a 'tail -1 /etc/group'
    

    3、playbook变量
    (1)变量命名:字母、数字和下划线组成,仅能以字母开头;
    (2)变量种类:

    • facts:由远程主机发回主机特有的属性信息,这些信息被保存在ansible变量中;无需声明,可直接调用
    • 自定义变量:
    • 通过命令行传递:ansible-playbook test.yaml -extra-vars "host=www user=test"
    • 通过roles传递
    • 主机变量:定义在inventory中的主机之后的变量;直接传递给单个主机的变量

    相关文章

      网友评论

          本文标题:absible原理及基础应用

          本文链接:https://www.haomeiwen.com/subject/gedrextx.html