zoukankan      html  css  js  c++  java
  • ansible平台

    1、ansible概念:
    1)ansible和saltstck是目前互联网IT运维人员使用最多的自动化运维管理工具,主要用于对批量(并行)Linux服务器:安装、部署、配置、指令操作、任务计划、参数调整、优化等。
    2)ansible是基于python语言编写的,只要在一台普通服务器安装即可,无需再客户端安装agent插件,ansible服务端是如何进行链接呢, 主要是通过SSH协议,每台Linux服务器都会安装SSH服务。
    3)ansible的工作原理:
    在ansible服务端,通过ansible程序读取本地hostsIP列表(提前配置客户端的IP),通过SSH协议(用户名和密码、key),同时调用本地各个模块(实现不同功能),去连接客户端服务器,并且向客户端服务器发送指令操作,客户端最终执行指令,会将处理的数据返回给ansible服务端。
    4)ansible自动化运维管理工具优点:
    • 轻量级,更新时,只需要在操作机上进行一次更新即可;
    • 采用SSH协议;
    • 不需要去客户端安装agent;
    • 批量任务执行可以写成脚本,而且不用分发到远程端就可以执行;
    • 使用python编写的,维护更简单;
    • 支持sudo普通用户命令;
    • 去中心化管理。
     
    5)默认ansible管理客户端,会通过SSH协议,使用-用户名、密码去客户端执行命令,如果不想输入客户端的用户名和密码,可以做免密钥,操作方法:
    #在管理端(ansible宿主机|服务端)生成公钥和私钥;
    ssh-keygen (一直回车)
    #生成的公钥和私钥位置;
    /root/.ssh/id_rsa (私钥)
    /root/.ssh/id_rsa.pub (公钥)
    #将生成的公钥拷贝至远程客户端;
    ssh-copy-id -i /root/.ssh/rsa.pub 192.168.1.X
    将id_ras.pub文件内容拷贝客户端该文件中:/root/.ssh/authorized_keys
    #从服务端SSH登录客户端,第一次输入密码,第二次无需输入客户端密码:(如下图)

    2、ansible安装部署:
    ansible可以在Linux、BSD、Mac OSX等平台,对python环境的版本最低要求为python2.6以上,如果操作系统python软件版本为2.4,需要升级方可使用ansible工具。
    Red Hat、Centos操作系统可以直接基于YUM工具自动安装ansible,centos6.x或者centos7.x安装前,需先安装epel扩展源,代码如下:
    rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum install epel-release -y
    yum install ansible -y
    ansible工具默认主目录为:/etc/ansible/,其中hosts文件为管理及器的IP或者主机名列表,ansible.cfg为ansible主配置文件,roles为角色或者插件路径,默认该目录为空,如图所示:
    ansible远程批量管理,其中执行命令是通过Ad-Hoc来完成,也即点对点单条执行命令,能够快速执行,而且不需要保存执行的命令。默认hosts文件配置主机列表,可以配置分组,可以定义各种IP及规则,hosts列表默认配置如下图所示:(可以备份一份或者将其删除,添加自己客户端的IP)
    ansible基于多模块管理,常用的ansible工具管理模块包括:command、shell、script、yum、copy、file、async、docker、cron、mysql_user、ping、sysctl、user、acl、add_host、easy_install、haproxy等。
     
    可以使用ansible-doc -l|more查看ansible支持的模块,也可以查看每个模块的帮助文档,ansible-doc module_name,下图所示:
    3、ansible工具参数详解:
    基于ansible自动化运维工具管理客户端实例操作,由于ansible管理远程服务器基于SSH,在登录远程服务器执行命令时需要远程服务器的用户名和密码,也可以加入-k参数手动输入密码或者基于ssh-keygen生成免密钥。
    ansible自动化批量管理工具主要参数如下:
    -v,–verbose                                    # 打印详细模式;
    -i PATH,–inventory=PATH                        #指定host文件路径;
    -f NUM,–forks=NUM                              #指定fork开启同步进程的个数,默认5;
    -m NAME,–module-name=NAME                      #指定module名称,默认模块command;
    -a MODULE_ARGS                                 #module模块的参数或者命令;
    -k,–ask-pass                                   #输入远程被管理端密码;
    –sudo                                          #基于sudo用户执行;
    -K,–ask-sudo-pass                              #提示输入sudo密码与sudo一起使用;
    -u USERNAME,–user=USERNAME                     #指定移动端的执行用户;
    -C,–check                                      #测试执行过程,不改变真实内容,相当于预演;
    -T TIMEOUT,                                    #执行命令超时时间,默认为10秒;
    --version                                      #查看Ansible软件版本信息。
     
    4、ansible模块实战:
    ping:
    ansible最基础的模块为ping模块,主要用于判断远程客户端是否在线,用于ping本身服务器,返回值为changed、ping:
    ansible -k all -m ping
    command:
    ansible commane模块为默认模块,主要用于执行Linux基础命令,可以执行远程服务器命令、任务执行等操作: 以下为command模块使用详解
    chdir                       #执行命令前,切换到目录;
    creates                     #当该文件存在时,则不执行该步骤;
    executable                  #换用shell环境执行命令;
    free form                   #需要执行的脚本;
    removes                     #当该文件不存在时,则不执行该步骤;
    warm                        #如果在ansible.cfg中存在告警,如果设定了False,不会警告此行。
    ansible command模块远程执行data命令:
    ansible -k -i /etc/ansible/hosts all -m command -a "date"

    ansible command模块远程执行ping命令:

    ansible -k all -m command -a "ping -c 1 www.baidu.com"

    ansible command模块远程执行df -h命令:

    ansible -k all -m command -a "df -h" ansible -k 192.168.1.1* -m command -a "df -h"

    copy:
    ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能:

    src                     #ansible端源文件或者目录,空文件夹不拷贝;
    content                 #用来替代src,用于将指定的文件的内容,拷贝到远程文件内;
    dest                    #客户端目标或者文件,需要绝对路径;
    backup                  #拷贝之前,先备份远程节点上的原始文件;
    directory mode          #用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
    follow                  #支持link文件拷贝;
    fore                    #覆盖远程主机不一致的内容;
    group                   #设定远程主机文件夹的组名;
    mode                    #指定远程主机文件及文件的权限;
    owner                   #设定远程主机文件夹的用户名。
    ansible copy模块操作,src表示源文件,dest表示目标目录或者文件,owner指定拥有者:
    ansible -k all -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root'

    ansible copy模块操作,content文件内容,dest目标文件,owner指定拥有者:

    ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt mode=755 owner=root'

    ansible copy模块操作, content文件内容,dest目标文件。owner指定拥有者,backup=yes开始备份:

    ansible -k all -m copy -a 'content="Hollo World" dest=/tmp/jfedu.txt backup=yes mode=755 owner=root'

    yum:
    ansible yum模块主要用于软件的安装、升级、卸载、支持红帽.rpm软件的管理:

    con file                    #设定远程YUM执行时所依赖的YUM配置文件;
    disable gpg check           #安装软件包之前是否坚持gpg key;
    name                        #需要安装的软件名称,支持软件组件安装;
    update cache                #安装软件前更新缓存;
    enablerepo                  #指定repo源名称;
    skip broken                 #跳过异常软甲节点;
    state                       #软件包状态,包括:installed、present、latest、absent、removed.
    ansible yum模块操作,name表示需要安装的软件名称,state表示状态,常见state=installed表示安装软件:
    ansible all -k -m yum -a "name=sysstat,screen stata=installed"

    ansible yum模块操作,name表示需要安装的软件名称,state表示状态,常见state=installed表示安装软件,diable gpg check=no不检查key:

    ansible all -k -m yum -a "name=sysstat,screen stata=diable gpg check=no"

    file:
    ansible file模块主要用于文件的创建、删除、修改、权限、属性的维护和管理:

    src                #ansible端源文件或者目录;
    follow             #支持link文件拷贝;
    force              #覆盖远程主机不一致的内容;
    group              #设定远程主机文件夹的组名;
    mode               #指定远程主机文件及文件夹的权限;
    owner              #设定远程主机文件夹的用户名;
    path               #目标路径,也可以用dest,name代替;
    state              #状态包括:file、link、directory、hard、touch、absent;
    attributes         #文件或者目录特殊属性。
    ansible file模块操作, path表示目录的名称和路径,state=directort表示创建目录:
    ansible -k 192.168.* -m file -a "path=/tmp/`date _%F` state=dirctory mode=755"

    ansible file模块操作, path表示目录的名称和路径,state=touch表示创建文件:

    ansible -k 192.168.* -m file -a "path=/tmp/`date _%F` state=touch mode=755"

    user:
    ansible user模块主要用于操作系统用户、组、权限、密码等操作,user模块使用详解:

    system                 #默认创建为普通用户,为yes则创建系统用户;
    append                 #添加一个新的组;
    commend                #新增描述信息;
    createhome             #给用户创建家目录;
    force                  #用于强制删除用户;
    group                  #创建用户主组;
    groups                 #将用户加入组或者附属组添加;
    home                   #指定用户的家目录;
    name                   #表示状态,是否create、remove、modify;
    password               #指定用户的密码,此处为加密密码;
    remove                 #删除用户;
    shell                  #设置用户的shell登录环境;
    uid                    #设置用户id;
    update password        #修改用户密码;
    state                  #用户状态,默认为present表示新建用户。
    ansible user模块操作,name表示用户名称,home表示其家目录:
    ansible -k 192.168.1.* -m user -a "name=precious home=/tmp/"

    ansible user模块操作,name表示用户名称,home表示其家目录,shell表示启用的登录shell环境:

    ansible -k 192.168.1.* -m user -a "name=precious home=/tmp/ shell=/sbin/nologin"

    ansible user模块操作,name表示用户名称,state=absent表示删除用户,force表示强制删除:

    ansible -k 192.168.1.* -m user -a "name=precious home=/tmp/ state=absent force=yes"

    cron:
    ansible cron模块主要用于添加、删除更新操作系统Crontab任务计划:

    name                     #任务计划名称;
    cron file                #替换客户端该用户的任务计划的文件;
    minute                   #分(0-59 , * , */2);
    hour                     #时(0-23 , * , */2);
    day                      #日(1-31 , * , */2);
    mouth                    #月(1-12 , * , */2);
    weekday                  #周(0-6 或 1-7 , * ); 
    jod                      #任务计划执行的命令,state要等于present;
    backup                   #是否备份之前的任务计划;
    user                     #新建任务计划的用户;
    state                    #指定任务计划present、absent。
    ansible cron模块操作,基于cron,创建crontab任务计划:
    ansible  -k  all  -m  cron  -a  "minute=0  hour=0  day=*  month=*  weekday=* name='Ntpdate server for sync time'   job='/usr/sbin/ntpdate 139.224.227.121'"

    ansible cron模块操作,基于cron,创建crontab任务计划,backup=yes表示开始备份:

    ansible  -k  all  -m  cron  -a  "minute=0  hour=0  day=*  month=*  weekday=* name='Ntpdate server for sync time'  backup=yes job='/usr/sbin/ntpdate  pool.ntp.org'"

    ansible cron模块操作,基于cron,删除crontab任务计划:

    ansible -k all -m cron -a "name='Ntpdate server for sync time' state=absent"

    synchronize:
    ansible synchronize模块主要用于目录、文件同步,基于rsync命令同步目录:

    compress                 #开启压缩,默认为启用;
    archive                  #是否采用归档模式同步,保证源和目标文件属性一致;
    checksum                 #是否效验;
    dirs                     #以非递归的方式传输目录;
    links                    #同步链接文件;
    recursive                #是否递归yes/no;
    rsync opts               #使用rsync 的参数;
    copy links               #同步的时候是否复制连接;
    dalete                   #删除源中没用而目标存在的文件;
    src                      #源目录及文件;
    dest                     #目标目录及文件;
    dest port                #目标接收的端口;
    rsync path               #服务的路径,指定rsync 命令来在远程服务器上运行;
    rsync timeout            #指定rsync操作的IP超时时间;
    set remote user          #设置远程用户名;
    --exclude=.log           #忽略同步.log结尾的文件;
    mode                     #同步的模式,rsync同步的方式PUSH、PULL,默认都是推送push。
    ansible synchronize模块操作,src源目录、dest目标目录:
    ansible all -m synchronize -a 'src=/tmp/ dast=/tmp/'

    ansible synchronize模块操作,src源目录、dest目标目录、commpress=yes开启压缩、delete=yes数据一致、rsync_opts同步参数、--exclude排除文件:

    ansible -k -m synchronize  -a 'src=/tmp/ dest=/tmp/ compress=yes delete=yes rsync_opts=--no-motd,--exclude=.txt'

    shell:
    ansible shell模块主要用于远程客户端上执行各种shell命令或者运行脚本,远程执行命令通过/bin/sh环境来执行,支持比command更多的指令:

    shdir                   #执行命令前,切换到目录;
    creates                 #当该文件存在时,则不执行该步骤;
    executable              #换用shell环境执行命令;
    free form               #需要执行的脚本;
    removes                 #当该文件不存在时,则不执行该步骤;
    warn                    #如果ansible.cfg中存在告警,如果设定了false,不会警告此行。
    ansible shell模块操作,-m shell指定模块为shell,远程执行shell脚本,远程执行脚本也可采用script模块。并把执行结果追加至客户端服务器/tmp/var.log文件:
    ansible -k all -m shell -a "/bin/sh /tmp/variables.sh >>/tmp/var.log"

    ansible shell模块操作,远程执行创建目录命令,执行之前切换在/tmp/目录,屏蔽警告信息:

    ansible -k all -m shell -a "mkdir -p `date +%F` chdir=/tmp/ state=directory warn=no"

    ansible shell模块操作,远程客户端查看HTTP进程是否启动:

    ansible -k all -m shell -a "ps -ef|grep http"

    ansible shell模块操作,远程查看crontab任务计划:

    ansible -k all -m shell -a "crontab -l"

    service:
    ansible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等:

    enabled             #是否开启启动服务; 
    name                #服务名称;
    runlevel            #服务启动级别;
    arguments           #服务命令行参数传递;
    state               #服务操作状态,状态包括started.stoped,restarted,reloaded。
    ansible service模块操作,远程重启httpd服务:
    ansible -k all -m service -a "name=httpd state=redtarted"

    ansible service模块操作,远程重启网卡服务:

    ansible -k all -m service -a "name=network args=ens33 state=restarted"

    ansible service模块操作,远程开机启动nfs服务,设置3,5级别自动启动:

    ansible -k all -m service -a "name=nfs enabled=yes runlevel=3,5"
     
  • 相关阅读:
    【Ansible】 各种模块
    【Python】 linecache模块读取文件
    【Ansible】 基于SSH的远程管理工具
    【Python】 更棒的Excel操作模块xlwings
    【Python】 docker-py 用Python调用Docker接口
    【Docker】 Swarm简单介绍
    【Docker】 积累
    【Bootstrap】 一些提示信息插件
    配置 -- php运行报Call to undefined function curl_init()的解决办法
    windows下svn钩子实现每次提交更新至web目录
  • 原文地址:https://www.cnblogs.com/fengyuanfei/p/13826393.html
Copyright © 2011-2022 走看看