zoukankan      html  css  js  c++  java
  • ansible

    一,部署前戏

    1.1 ansible介绍

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架

    a. ansible是一个基于Python开发的自动化运维工具
    b. ansible是一个基于ssh协议实现远程管理的工具
    c. ansible软件可以实现多种批量管理操作(批量系统配置、批量软件部署、批量文件拷贝、批量运行命令)

    借下别处的一张图哈:

    1.2 服务特征介绍:

    ansible软件服务端(管理端):不需要启动任何服务 默认服务端不需要任何的配置

    ansible软件客户端(受控端):没有客户端软件安装

    1.3 SSH秘钥管理免交互式创建

    介绍中也说了ansible是基于ssh传输的,那么部署ansible前提就要配置好ssh秘钥连接,而且要免交互式的。

    下面就来介绍下如何进行ssh秘钥连接:

    1.3.1 在管理主机上创建密钥对信息(普通方式创建)

    ssh-keygen -t dsa      <-- 创建密钥对命令 -t dsa表示指定密钥对加密类型

     秘钥保存默认路径为 /home/.ssh/

    1.3.2 将管理主机的公钥分发到被管理主机上

    执行一条命令:

    [root@m01 .ssh]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 #此处为被管理主机地址

     此时被管理主机就会自动生成authorized_keys文件来保存公钥信息:

     

    此时管理端直接就可以远程连接了 (但是第一次还是需要手动输入yes,需要交互)

    提一嘴:ssh 172.16.1.31 uptime <-- 可以不用登陆到远程主机,就可以直接查看远程主机信息

    1.3.3 ssh配置文件信息说明

    Port 52113                     <- 修改ssh服务端口号信息            
    ListenAddress 0.0.0.0        <- 主要作用提升网络连接安全性
    PS:监听地址只能配置为服务器网卡上拥有的地址    
    PermitRootLogin no             <- 是否允许root用户远程登录    
    PermitEmptyPasswords no         <- 是否允许空密码
    UseDNS no                    <- 是否进行DNS反向解析(提升ssh远程连接效率)                     
    GSSAPIAuthentication no         <- 是否进行远程GSSAPI认证(提升ssh远程连接效率)

    1.3.4 ssh免交互的连接

    照上面的方法进行操作一遍就会 觉得哇ssh秘钥连接好简单啊,但是细心的小伙伴就会发现,不管是创建密钥对还是进行ssh连接,第一次都需要手动输入yes 和回车啊,有小伙伴就会说,没事啊

    就我就手动敲敲就行了啊。嗯...........没错你一两台都可以手动敲下不碍事,但是我们企业实际生产环境需要管理的服务器中往往都是上百台 可能还会更多。那你咋办干瞪眼么.......................................

    好啦 下面就让我们介绍下如何免交互吧:

    1)首先要免交互式的创建密钥对

    ssh-keygen -t dsa
    影响免交互创建密钥对创建因素:
    1)需要指定私钥存放路径
    -f /root/.ssh/id_dsa
    2)需要进行私钥文件密码设定
    -N/-P 
    -N ""/-P ""

    免交互创建密钥对方法:

    ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" # 一般我们不设文件密码啦

     

    公钥分发:

    执行sshpass 命令

      -p参数:被管理端主机用户登录密码

      -o StrictHostKeyChecking=no  :需要有确认连接过程,需要输入yes/no

     sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.31" #直接这样就OK了

    批量分发公钥:

     写个lowB脚本吧

    #!/bin/bash
    ##########ssh秘钥连接##########
    
    ips=(41 31 7) #定义需要管理的主机地址,ip建议写在文件里 循环读取就ok了
    rm -f /root/.ssh/id_dsa*
    ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
    for ip in ${ips[@]}
    do
        sshpass -p123321 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
    
    done

     最后给脚本添加个执行权限 chmod +x 就可以快了的玩耍啦!!!!!

    二、部署ansible

    2.1 部署安装

    前戏终于完啦哈 ,进入今天的主角啦!!

     这个就超级简单啦,直接yum安装

    yum install -y ansible

     ansible是没有客户端的,但是呢有为了防止selinux的干扰我们还是要安装下 libselinux-python这个包

     直接在受控主机上上安装:

    yum install -y libselinux-python

    2.2 编辑ansible配置文件

    vim /etc/ansible/hosts
    
    [自定义模块名]
    172.16.1.7   ##添加受控主机的ip
    172.16.1.31
    172.16.1.41

     可以根据自己的业务分别自定义模块

    测试一下:

    ansible web -m command -a "hostname"

     没问题啦!!

    三、ansible模块介绍

    模块比较多哈 这里只简单的介绍下几个常用的模块,学习ansible一定要自己去看官方文档哈!!

    官网地址:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

    ansible模块执行语法:

    ansible 管理主机信息或者主机组信息  -m 模块名称 -a 相关模块参数

      主机信息:远程主机IP地址 远程主机组名称 远程所有主机all
      -m 指定相应模块
      -a 利用模块中某些参数功能

    3.1 命令类型模块:

    3.1.1 command

    参数:chdir---在执行某个命令前,先切换目录

    参数:creates---判断一个文件是否存在,如果已经存在了,后面的命令就不会执行

     参数:removes---判断一个文件是否存在,如果不存在,后面的命令就不会执行

     

     3.1.2  shell模块(万能模块)

    参数:chdir---在执行莫个命令前,先切换目录
    参数:creates---判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
    参数:removes---判断一个文件是否存在,如果不存在,后面的命令就不会执行
    参数(必须要有的):free_form---表示执行command模块时,必须要有linux合法命令信息

     

    说明:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > | ; 

    3.2 文件类型模块

    3.2.1 copy----复制模块

    参数:backup---将管理主机上数据信息进行远程备份

     参数:src---定义要推送数据信息
     参数:dest---定义将数据推送到远程主机什么目录中

       参数:owner---设置复制后的文件属主权限
       参数:group---设置复制后的文件属组权限
       参数:mode---设置复制后的文件权限(600 755)

     3.2.2 file----文件属性修改/目录创建/文件创建

    参数:owner---设置复制后的文件属主权限
    参数:group---设置复制后的文件属组权限
    参数:mode---设置复制后的文件权限(600 755)
    参数:state---用于指定创建目录或文件
            =touch #创建文件
            =directory

     

     

     3.3 包管理模块类型

     3.3.1 yum---安装软件包模块

    name:执行要安装软件的名称,以及软件的版本
    state:installed安装  absent(卸载)
    [root@m01 ~]# ansible backup -m yum -a "name=iftop state=installed"
    [root@m01 ~]# ansible backup -m yum -a "name=iftop state=absent"

    3.4 系统模块类型

    3.4.1 service---管理服务状态模块

    参数:

    name: 指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
    state:stopped started restarted reloaded
    enabled:yes表示服务开机自启动 no表示服务开机不要自动启动
    ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"

    3.4.2 cron---定时任务模块

    * * * * *  /bin/sh /server/scripts/test.sh &>/dev/null
    
    minute=0-59 * */n , -   hour  day  month weekday  job='/bin/sh /server/scripts/test.sh &>/dev/null'

     添加定时任务:

    ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
    ansible 172.16.1.41 -m cron -a "name=test minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"

     删除定时任务:

    ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
    ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent"

     注释定时任务:

    ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"
    ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no"

    4. 总结ansible颜色信息

    绿色:查看远程主机信息,不会对远程主机系统做任何修改
    红色:执行操作出现异常错误
    黄色:对远程主机系统进行修改操作
    粉色:警告或者忠告信息

    5. ansible软件剧本

    5.1 yaml编写规范:

    官方文档:https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

    遵循pyyaml原则

    ①. - 用法说明,表示列表显示的内容
        水果信息:
          - 苹果
          - 香蕉
          - 西瓜
    ②. : 用法说明:
        姓名: 张三
        性别: 男
        人员信息:
        - 运维人员: sa
        - 开发人员: dev
        - 存储人员: dba
    ③. 空格 用法说明:
        对内容进行分级时,需要有两个空格表示分级
        软件安装步骤:
          - 服务端安装步骤:
            第一个里程碑: 检查软件是否安装
            第二个里程碑: 编写配置文件内容
          - 客户端安装步骤:
        补充:必须使用空格分隔ansible剧本级别,一定不要使用tab键进行分割

    5.2 执行脚本方法

    ansible-playbook /etc/ansible/ansible-playbook/test.yaml
    ansible-playbook -C /etc/ansible/ansible-playbook/test.yaml
  • 相关阅读:
    Oracle,第六周
    JAVA创建对象的几种方式
    深拷贝和浅拷贝
    Facade
    Adapter
    低谷过去了
    Oracle,第五周
    Command
    Singleton
    mybatis自动生成mapping和实体
  • 原文地址:https://www.cnblogs.com/xh-0205/p/11138377.html
Copyright © 2011-2022 走看看