博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ansible简介与应用【转】
阅读量:7050 次
发布时间:2019-06-28

本文共 5580 字,大约阅读时间需要 18 分钟。

  • 一.ansible

    1.概念

    ansible是一个基于Python开发的自动化运维工具!
    其功能实现基于SSH远程连接服务!
    ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
    2.网址:
     官网
    3.特点
    不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端。
    不需要服务端(no servers)。
    需要依靠大量的模块实现批量管理。
    4.优点:
    (1) ansible软件特点:
    · 可以实现批量管理/部署
    ansible oldboy -m command -a "hostname" 批量执行命令
    · 编写剧本-脚本(playbook)---针对重复性的操作
    (2) ansible核心功能:
    · pyYAML-----用于ansible编写剧本所使用的语言格式(saltstack---python)
    · paramiko---远程连接与数据传输 
    · Jinja2-----用于编写ansible的模板信息(扩展部分)
    5.安装:
    yum -y install ansible 管理端安装软件
    yum -y install libselinux-python 被管理端关闭selinux服务

    二.ansible部署

    【命令部署】

    部署好基于ssh密钥认证管理方式认证环境
    (1)创建密钥对
    ssh-keygen -t rsa 
    (2)分发密钥对
    ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.41 
    ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.31
    ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7
    (3)登陆验证
    ssh 172.16.1.41 
    ssh 172.16.1.31
    ssh 172.16.1.7
    【脚本部署】
    1.批量部署
    #!/bin/bash
    #create key pair
    \rm -f /root/.ssh/id_dsa*
    ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q
    #fenfa key file
    for ip in 7 31 41
    do
    echo "==== fenfa key to host 172.16.1.$ip======================"
    sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"
    echo "=================== fenfa end ==========================="
    echo ""
    done 
    2.批量检查
    #!/bin/bash
    cmd=$1
    for ip in 7 31 41
    do
    echo "====host 172.16.1.$ip info===="
    ssh root@172.16.1.$ip "$cmd"
    echo "=============================="
    echo ""
    done

    三.配置ansible hosts文件

    ansible主配置文件/etc/ansible/ansible.cfg

    配置hosts主机文件 vim /etc/ansible/hosts
    [root]
    172.16.1.7
    172.16.1.31
    172.16.1.41

    四.ansible 命令语法

    (1)指定管理单台主机方法

    例:ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes"
    (2)指定管理主机组
    例:ansible KS -m user -a "name=plp group=root"
    (3)指定管理所有主机
    例:ansible all -m user -a "name=plp group=root"

    技术分享图片

    技术分享图片

    五.ansible重要的模块项

    1.command模块参数

    (1) -k ansible基于密码口令管理主机
    -m 指定模块
    -a 指定动作
    例:[root@m01 ~]#ansible 172.16.1.31 -m ping -k 
    (2)chdir 执行命令前切换到指定目录
    例:ansible root -m command -a "chdir=/tmp touch 123.txt" 
    (3)creates 执行命令前进行判断,有就不执行,没有执行
    例:ansible root -m command -a "creates=/tmp/123.txt touch 123.txt" 
    (4)removes 如果这个参数对应的文件不存在,就不运行command
    例:ansible root -m command -a "remove=/tmp/123.txt touch 123.txt" 
    (5)free_from 可以输入任何命令,除了特殊变量和符号
    2. copy模块参数(将数据推送远程主机)
    (1)src 源(本地)路径 
    (2)dest 目标路径
    例:ansible KS -m copy -a "src=/tmp/888.txt dest=/tmp"
    (3)owner 属主
    (4)group 属组
    (5)mode 定义文件/目录权限
    例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup owner=oldboy group=oldboy mode=600”
    (6)backup 以时间戳名做备份
    例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup backup=yes”
    (7)force 传输内容不同时做覆盖
    例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup force=no”
    (8)content 替代sec传输时,将文件内容设置为指定值(短点)
    remote_src 如果为 False,将搜索源信息在本地/管理及机器上 
    如果为True,将到远程/目标主机的机器上搜索
    默认为false,目前remote_src不支持递归拷贝
    例:ansible root -m cpoy -a “content=’my world’ dest=/backup/123.txt”
    3.shell 模块参数(执行命令在节点上,万能模块)
    例:ansible oldboy -m shell -a "uptime;df -h"
    ansible oldboy -m shell -a "/server/scripts/test01.sh"
    注意:shell模块运行脚本,需要将脚本推送到远程主机中,需要授权脚本文件为执行权限
    4.script模块参数(将本地运行脚本信息在远程主机中进行)
    例:ansible root -m script -a "/server/scripts/yum-ipstate.sh"
    5.yum模块(yum源安装软件)
    (1)name 软件名
    (2)state 状态
    (3)installed 安装
    例:ansible root -m yum -a "name=tree state=installed"
    6.service 模块(服务管理)
    (1)name 服务名
    (2)state 状态
    (3)enabled 关闭开启自启
    例:ansible root -m service -a "name=iptables state=stopped enabled=yes"
    7.file 模块(修改创建文件/目录)
    (1)mode 定义文件/目录权限
    例:ansible root -m file -a "dest=/backup/123.txt mode=0600"
    (2)src 要连接的文件路径
    (3)path 指定文件路径信息(别名dest,name)
    (4)state 状态 
    =directory 所有不存在的子目录将会被创建,并且从1.7开始支持设置目录权限
    =file 如果文件不存在将不能被创建
    =link 符号链接将被创建或更改。
    =hard 便会创建出硬链接
    =absent 录将被递归删除以及文件,而链接将被取消链接。
    =touch 如果路径不存在将创建一个空文件
    创建文件:
    例:ansible root -m file -a "dest=/backup/123.txt state=touch"
    创建目录:
    例:ansible root -m file -a "dest=/backup/123 state=directory"
    删除文件:
    例:ansible root -m file -a "dest=/backup/123.txt state=absent"
    创建连接文件:
    例:ansible root -m file -a "dest=/backup/123 state=link"
    8.cron模块(定时任务模块)
    (1)minute----------------分 
    例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ "
    (2)hour-------------------时
    (3)day---------------------天
    (4)month-----------------月
    (5)weekday--------------周
    (6)job----------------------做什么事
    (7)name-------------------对定时任务信息做备注
    (8)state--------------------present表创建(默认),absent表示删除
    例:ansible root -m cron -a "name=’rsync system time’ state=absent "
    (9)disable-----------------yes表注释/no不注释
    例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ disable=yes"
    9.mount模块
    (1)fstype 指定挂载文件系统类型
    (2)opts 挂载时指定挂载参数
    (3)path 制定挂载路径
    (4)src 指定那个目录进行挂载
    (5)state
    =mounted 在fstab文件中的设备将被激活挂载和适当配置
    =unmounted 设备将被卸载并不会改变fstab文件信息
    例:ansible root -m mount -a "state=mounted fstype=nfs src=’172.168.1.31:/data/’ path=/mnt"
    例:ansible mount -m setup -vvvv 输出详细信息方法
    10.user模块
    name 用户名
    group 用户组
    state=absent 删除用户
    remove=yes 是否删除
    例:ansible KS -m user -a "name=plp group=root" 创建用户 
    ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes" 删除用户

    六.ansible软件颜色信息

    绿色:??表示查看信息,对远程主机未做改动的命令

    红色:??批量管理产生错误信息
    ×××:??对远程主机做了相应改动
    粉色:??对操作提出建议或忠告

    七.ansible基于密钥管理

    [root]

    172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456
    172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456
    172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456

    八.编写ansible-playbook剧本

    1.编写格式说明

    ansible剧本格式:yaml语法格式(python脚本编写格式类似)
    rsync配置文件格式:ini语法格式
    sersync配置文件格式:xml语法格式
    2.YAML语法规则
    规则一:缩进(一个缩进两空格,注意一定不用tab)
    规则二:冒号(每个冒号后一定要有空格)
    规则三:短横线 - (短横线后面要空格)
    3.编写案例
    ansible-playbook --syntax-check cron.yml 剧本检查语法方法
    ansible-playbook -C cron.yml -C模拟执行剧本
    ansible-playbook cron.yml 执行剧本

    (1)案例一

    技术分享图片
    (2)案例二
    技术分享图片

    4.剧本编写方式

    多主机单任务编写方式
    多主机多任务编写方式
    不同主机多任务编写方式

转载地址:http://adpol.baihongyu.com/

你可能感兴趣的文章
springMvc 的参数验证 BindingResult result 的使用
查看>>
hadoop主节点(NameNode)备份策略以及恢复方法
查看>>
fsync体会
查看>>
OpenCV 2.4.11 VS2012 Configuration
查看>>
快速排序
查看>>
【Unity】Collider随骨骼动画运动
查看>>
SVN 权限配置详细说明
查看>>
【SQL】在SQL Server中多表关联查询问题
查看>>
Elasticsearch 5.0 —— Head插件部署指南(Head目前支持5.0了!请不要看本篇文章了)...
查看>>
计算字符串相似度的简易算法
查看>>
24.4. 批量生成监控配置文件
查看>>
您知道这是微软什么时期的网页吗?!
查看>>
将不确定变为确定~真的是SqlDataReader引起的超时?
查看>>
TCP客户机-服务器
查看>>
Hibernate连接DB2的问题(已解决)
查看>>
I.MX6 dts 在哪里、怎么编译
查看>>
第 44 章 Chart 图表
查看>>
JQuery ztree 异步加载实践
查看>>
XOR算法的原理和实现
查看>>
EF架构~一个规范,两个实现(续)~性能可以接受的批量增删改操作
查看>>