Ansible自动化运维工具部署及使用

Ansible自动化运维工具部署及使用,第1张

Ansible自动化运维工具部署及使用

一、Ansible介绍

1,简介

Ansible是基于Python开发的新型自动化运维工具。集成了众多运维工具(puppet、cfengine、chef、func、fabric)的优势,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible基于模块工作,不具备大规模部署的能力。真正批量部署的是ansible运行的模块,它只提供了一个框架。主要包括:

(1)连接插件:负责与被监控终端的通信;

(2)主机清单:指定 *** 作的主机,即配置文件中定义的监控主机;

(3)各种模块的核心模块、命令模块和自定义模块;

(4)借助插件,完成电子邮件的登录功能;

(5)剧本:当一个脚本执行多个任务时,不需要允许节点同时运行多个任务。

2,特征

(1)没有代理:不需要在被管理的主机上安装任何客户端;

(2)无服务器:没有服务器,使用时直接运行命令即可;

(3)任意语言的模块:基于模块工作,可以使用任意语言开发模块;

(4)yaml,不是代码:定制剧本;用yaml语言;

(5)ssh默认:基于ssh工作;

(6)强大的多层解决方案:可以实现多级指挥。

3,优点
(1),轻量级,无需在客户端安装代理,更新时只需在 *** 作机上更新一次;
(2)、批量任务执行可以写成脚本,不用分发到远程就可以执行;
(3),用python写的,维护比较简单,ruby语法太复杂;
(4),支持sudo。

3,工作流程

  • Ansible通过python的OPENSSH或pramamiko连接客户端。

  • 将ansible模块推送到客户端$HOME/。ansible/tmp

    通过ssh在客户端执行ansible模块

    执行完毕。

    删除刚推送的ansible模块。

    二、Ansible基础安装与配置

    1Ansible基本安装

    (1)Python2.7安装

    https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

    #tarxvzfPython-2.7.8.tgz

    #cdPython-2.7.8

    #./configure-前缀=/usr/local

    #make-jobs=`grepprocessor/proc/CPUinfo|WC-l'

    #进行安装


    ##将python头文件复制到标准目录下,避免编译ansible时,找不到需要的头文件。

    #CD/usr/local/include/python2.7

    #cp-a./*/usr/local/include/


    ##备份旧版本python,象征性链接新版本python

    #cd/usr/bin

    #mvpythonpython2.6

    #ln-s/usr/local/bin/python


    ##修改yum脚本以指向旧版本的python已阻止其运行。

    #vim/usr/bin/yum

    #!/usr/bin/python->;#!/usr/bin/python2.6


    (2)设置工具模块安装

    https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz

    #tarxvzfsetuptools-7.0.tar.gz

    #cd安装工具-7.0

    #pythonsetup.py安装


    (3)PyCrypto模块安装

    https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz

    #tarxvzfpycrypto-2.6.1.tar.gz

    #cdpycrypto-2.6.1

    #pythonsetup.py安装


    (4)Pyyaml模块安装

    http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz

    #tarxvzfyaml-0.1.5.tar.gz

    #cdyaml-0.1.5

    #./configure-前缀=/usr/local

    #make-jobs=`grepprocessor/proc/CPUinfo|WC-l'

    #进行安装


    https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz

    #tarxvzfPyYAML-3.11.tar.gz

    #cdPyYAML-3.11

    #pythonsetup.py安装


    (5)金甲2模块安装

    https://pypi.python.org/packages/source/M/markupsafe/markupsafe-0.9.3.tar.gz

    #tarxvzfMarkupSafe-0.9.3.tar.gz

    #cdMarkupSafe-0.9.3

    #pythonsetup.py安装


    https://pypi.python.org/packages/source/J/jinja2/jinja2-2.7.3.tar.gz

    #tarxvzfJinja2-2.7.3.tar.gz

    #cdJinja2-2.7.3

    #pythonsetup.py安装


    (6)帕拉米科模块安装

    https://pypi.python.org/packages/source/e/ECDsa/ECDsa-0.11.tar.gz

    #tarxvzfecdsa-0.11.tar.gz

    #cdecdsa-0.11

    #pythonsetup.py安装


    https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz

    #tarxvzfparamiko-1.15.1.tar.gz

    #cdparamiko-1.15.1

    #pythonsetup.py安装


    (7)SimpleJSON模块安装

    https://pypi.python.org/packages/source/s/simpleJSON/simpleJSON-3.6.5.tar.gz

    #tarxvzfsimplejson-3.6.5.tar.gz

    #cd简单json-3.6.5

    #pythonsetup.py安装


    (8)Ansible安装

    https://github.com/ansible/ansible/archive/v1.7.2.tar.gz

    #tarxvzfansible-1.7.2.tar.gz

    #cdansible-1.7.2

    #pythonsetup.py安装

    2Ansible配置

    (1)SSH无钥匙登录设置

    #生成公钥/私钥

    #ssh-keygen-trsa-P''

    ##写入信任文件(distribute/root/。ssh/id_rsa.pub连接到其他服务器,并在所有服务器上执行以下指令):

    #cat/root/。ssh/id_RSA.pub>;>/root/。ssh/授权密钥

    #chmod600/root/。ssh/授权密钥


    (2)ansible配置

    #mkdir-p/etc/ansible

    #vim/etc/ansible/ansible.cfg

    ……

    private_key_file=/root/。ssh/id_rsa

    ……


    将ansible安装包中examples目录下的文件复制到/etc/ansible。

    CP–r示例/*/etc/ansible/


    ##主机组定义

    #vim/etc/ansible/hosts

    [Linux服务器]

    10.6.1.211


    (3),简单测试

    #ansiblelinuxserver-m命令-日期

    注意:第一次需要输入“是”【用于公钥验证】,下一次不需要再次输入。

    3,公共模块的使用

    (1)设置(事实检测模块)

    ##用于查看远程主机的一些基本信息

    #ansiblelinuxserver-m安装程序

    检测主机上的所有基本信息。这个模块一般不单独使用,通常和剧本配合使用。
    如果单独使用,通常会添加一个filter过滤参数。例如,我想获取网卡信息:

    ansibleLinuxserver-msetup-a"filter=ansible_eth[0-1]"

    (2)

    ##用于测试远程主机的运行状态

    #ansiblelinux-mping

    (3)文件

    ##设置文件的属性

    相关选项如下:

    强制:你需要在两种情况下强制创建软链接。一种是源文件不存在的时候,但是后面会建立;另一种是目标软链接已经存在。您需要先取消以前的软链接,然后创建一个新的。有两个选项:是|否。

    组:定义文件/目录组。

    模式:定义文件/目录的权限

    Owner:定义文件/目录的所有者。

    Path:必选,定义文件/目录的路径。

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

    Src:链接源文件的路径,只适用于state=link的情况。

    Dest:链接到的路径,仅在state=link时适用。

    状态:

    目录:如果目录不存在,请创建它。

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

    链接:创建一个软链接

    硬链接:创建硬链接

    触摸:如果文件不存在,将创建一个新文件,如果文件或目录已经存在,将更新其上次修改时间。

    输入:删除目录、文件或取消文件链接。

    示例:

    ##远程文件的符号链接创建

    #ansibleLinuxserver-mfile-a"src=/etc/my.CNFdest=/tmp/my.CNFstate=link"

    ##远程文件信息查看

    #ansiblelinuxserver-m命令-a"ls-l/tmp/my.cnf"

    ##远程文件符号链接删除

    #a可启用的linuxserver-m文件-a"path=/tmp/my.CNFstate=absent"

    ##远程文件信息查看

    #ansiblelinuxserver-m命令-a"ls-l/tmp/my.cnf"

    注意:如上图,代表文件或链接已被删除。

    (4)copy

    ##将文件复制到远程主机

    相关选项如下:

    备份:在覆盖之前,备份源文件,备份文件包含时间信息。有两个选项:是|否

    内容:不用“src”,可以直接设置指定文件的值。

    Dest:必填。源文件要复制到的远程主机的绝对路径。如果源文件是目录,路径也必须是目录。

    Directory_mode:递归设置目录的权限,默认为系统默认权限。

    强制:如果目标主机包含该文件,但内容不同,如果设置为是,将被覆盖;如果为否,则只有当文件中不存在目标主机的目标位置时,才会进行复制。默认情况下是。

    其他:这里可以使用文件模块中的所有选项。

    Src:复制到远程主机的本地文件可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将被递归复制。在这种情况下,如果路径以“/”结尾,则只复制目录中的内容;如果不是以“/”结尾,将复制包括目录在内的全部内容,类似于rsync。

    示例:

    ##将本地文件“/etc/my.cnf”复制到远程服务器

    #ansibleLinuxserver-mcopy-a"src=/etc/my.CNFdest=/tmp/my.CNFowner=rootgroup=rootmode=0644"

    ##远程文件信息查看

    #ansiblelinuxserver-m命令-a"ls-l/tmp/my.cnf"

    (5)命令

    ##在远程主机上执行命令

    相关选项如下:

    创建:文件名。当文件存在时,将不执行该命令。

    Free_form:要执行的linux指令

    Chdir:在执行命令之前,切换到这个目录。

    移除:文件名。当文件不存在时,将不执行该选项。

    可执行:切换shell执行指令,执行路径必须是绝对路径。

    示例:

    #ansiblelinuxserver-m命令-aid

    (6)shell

    ##切换到shell,使用与command相同的参数执行指定的指令。

    与command不同的是,这个模块可以支持命令管道,还有一个模块有这个功能:raw。

    示例:

    ##首先在本地创建一个SHELL脚本

    vim/root/cpu.sh

    ===============================================

    #!/bin/bash

    #显示当前系统的时间。

    Echo"当前系统时间是:"`date+%f""%h:%m:%s`。

    #显示当前系统中的核心数量。

    Echo"服务器的cpu核心数:"`grepprocessor/proc/CPUinfo|WC-l`。

    #ShowtheversionoftheSystem
    echo"Systemversion:"`LSB_release-a|grep"description"|awk-f:'{print$2}'`1

    ===============================================

    #chmod+x/root/cpu.sh

    ##将创建的脚本文件分发到远程

    #ansibleLinuxserver-mcopy-a"src=~/CPU.shdest=/tmp/CPU.showner=rootgroup=rootmode=0755"

    ##远程执行

    #ansibleLinuxserver-mshell-a"/tmp/CPU.sh"

    (7)、其它
    并发10个。 参数-f 10表示并发进行,也就是10个进程同时运行,在使用的时候,默认的情况下为5, 选择合适的数据,从而使得系统能够进行处理 ansible atlanta -a "/sbin/reboot" -f 10  

    指定用户。Ansible默认使用当前用户。当需要使用其他用户时,可以使用选项-uusername,如下所示

    ansible atlanta -a "/usr/bin/foo" -u username  

    当需要使用sudo时,可以使用下面的,-ask-sudo-pass(-k)。此选项用于询问sudo的密码。如果设置了,如果没设置,就没必要用了。

    ansible atlanta -a "/usr/bin/foo" -u username --sudo[--ask-sudo-pass]  
    也可以在sudo到别的用户来进行执行,如下: ansible atlanta -a "/usr/bin/foo" -u username -U otheruser[--ask-sudo-pass]  
    (8)、yum,apt模块,软件管理的模块。
    主要是state这个参数,代表安装,卸载等。就三个状态,present,latest,absent,前两个代表安装,后面一个是卸载。 例如: 安装ntp ansible linuxserver -m yum -a "name=ntp state=present" 卸载ntp ansible linuxserver -m yum -a "name=ntp state=absent"  
    (9)、用户管理模块
    包括用户和用户组都可以进行管理。

    修改用户测试的密码。

    ansibleLinuxserver-muser-a'name=testpassword="$6$j3qo/FrIaBNPhB3g$nydeda.sodh4kdtveaj93VVC8y0xz/bcl0elgco0sfguvgudv4y/9taacfhxbvd.2e5oitywpydop/jstflz0"'

    密码参数由sha512加密,可以由grb-crypt或Python模块生成。

    python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"   删除用户 ansible linuxserver -m user -a "name=steven1 remove=yes state=absent" (10)、Service服务模块

    启动、停止、重启、重装,对应的四种状态如下:

  • 出发

  • 已停止

    重新启动

    重新加载

    启动mysql服务。

    ansible linuxserver -m service -a "name=mysqld state=started"  

     
    停止mysql服务. ansible linuxserver -m service -a "name=mysqld state=stopped"


     

    (11),更多模块

    其他常用的模块,如cron、synchronize等就不举例说明了,可以结合自己的系统环境进行测试。

    服务:系统服务管理

    Cron:计划任务管理

    Yum:yum包安装管理

    同步:使用rsync同步文件

    用户:系统用户管理

    组:系统用户组管理

    有关更多模块,请参考:

    #ansible-doc–l

    查看如何使用ansible模块(http://docs.ansible.com/list_of_all_modules.html)

    (12),一些概念上的补充

    剧本的构成[/S2:剧本是一个或多个“剧本”的列表,这些剧本可以链接在一起,按照预先安排好的机制执行;所谓任务,无非是调用ansible的一个模块,模块参数中可以使用变量;模块执行是幂等的,这意味着多次执行是安全的,因为结果是一致的;

    执行模式:任务列表中的任务在主机中指定的所有主机上逐一执行,即第一个任务在所有主机上完成后,第二个任务才开始。当按顺序运行一个剧本时,如果中间出错,所有执行的任务都会回滚。因此,修改剧本后,可以重新执行一次。

    taskComposition:每个任务都要有自己的名字,用来输出剧本的执行结果。建议其内容尽可能清晰地描述任务执行步骤。如果未提供名称, *** 作的结果将用于输出;

    notify指定了handler[/S2/]的执行机制:动作“notify”可以用来在每局结束时触发,notify中列出的动作称为handler。

    一些学习材料:

    http://blog.xiaorui.cc/category/ansible/

    http://lixcto.blog.51cto.com/4834175/d-4

    https://github.com/ansible/ansible-examples

    http://rfyiamcool.blog.51cto.com/1030776/d-51

    http://dl528888.blog.51cto.com/2382721/d-4/p-1

    http://edu.51cto.com/course/course_id-2220.html

    http://edu.51cto.com/course/course_id-2032.html

    http://www.Shencan.net/index.PHP/category/%E8%87%aa%E5%8a%A8%E5%8c%96%E8%BF%90%E7%bb%B4/ansible/







    欢迎分享,转载请注明来源:内存溢出

    原文地址: https://outofmemory.cn/zz/778491.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存