ansible

 

   

 

ansible是什么?

  ansebile是运维自动化管理工具,他可以让你通过这个软件在几百台电脑上同时部署一个软件,配置好,并启动它

  有人可能会说我们也可以写脚本进行部署,为什么还要用ansible呢? 因为ansible支持一些优秀的特性,比如“幂等性”,它可以让你重复在多台机器上执行多次,如果机器安装好某个服务,它不会重复在机器上再次安装,例如,如果你要copy一个文件,你在所有机器上已经执行过一次了,如果使用ansible再次执行相同的任务,ansible会自动判断“当前状态”是否与“目标状态”一致,如果一致,则不会进行任何操作,如果不一致,那么就将“当前状态”变成“目标状态”。“幂等性”可以保证我们重复执行的操作,得到的结果是一样的。ansible的第二大特性就是不需要再客户端安装任何的agent,ansible只需要依赖ssh就可以正常工作

 

基础配置

  我们可以通过Yum来安装ansible,ansible在epel源,安装时要先配好epel源 

  

[root@node3 ~]#yum install ansible

       因为ansible需要依赖ssh所以我们要对管理的节点做密钥认证,这样管理的时候就不需要重复去输入密码了

[root@node3 ~]#ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:
SHA256:gN9JyEXHQJmnJqnpknaqzhqb5iyMBim1BQa35I7ZqLI root@node3
The key's randomart image is:
+---[RSA 2048]----+
|..o    o==.      |
| +o. o oo.o      |
| .o.. +..o       |
| *. ..o+o.       |
|+ooo o.oS        |
|= . o            |
|O  o             |
|*O+ o            |
|EB.+             |
+----[SHA256]-----+

  将主机的私钥copy到各节点(这里只演示了一个主机的)

[root@node3 ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.37.2

  然后在去定义主机清单(即你要管理的主机)

[root@node3 ~]#vim /etc/ansible/hosts

      定义好以后我们就可以管理了

  Usage: ansible  <host-pattern>   [options]

      

 

常用模块

  copy

    

 

   user模块

  

file模块

  

command模块

  

shell模块

  

yum模块

认识这些模块后,我们就可以在ansible写一些简单的playbook了

  

    hosts:指定要对那些主机做操作

    tasks:  指定要用哪个模块做那些操作

    name:  就是给这个操作取个名字

 

handlers用法

  handlers 指明那些任务被调用,经常配合notify 使用

  例如:我想改一下Nginx的端口号,当我在配置文件中改完后,我用ansible去部署到每台主机,因为ansible的幂等性,它只会去把被控制的主机的文件改掉,而不去重启服务,这样就会造成服务不会去修改端口号,这里我们就要用到触发器

    

 

tags

  你写了一个很长的playbook,其中有很多任务,你能只是想执行其中的一部分而已,这个时候我们可以借助tags打标签的形式完成

  例如:

    

 

  现在每个tasks上面都有了标签,如果当我们想执行tasks2的时候只需要

    

 

vars

  在ansible中使用变量,能让我们的工作变得更加灵活。在ansible中,变量的定义有好多种

  变量名应该有字母,数字,下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名

  在playbook中定义变量,

  例:

    

    testvar1为变量名,值是testfile。然后在定义的任务中我们就可以调用变量了

 

roles

  我们知道ansible可以自定义模块,便于自己或他人调用,它也有一个特有的名称叫做角色。每个角色对应的服务可能不太一样,比如mysql,httpd,nginx,memcached。虽然每个角色(模块)的功能不一样,但是他们都以特定的目录结构进行组织,相关说明如下所述:

  

 

  案例:

  1 创建初始化目录

    mkdir -pv ./{nginx,tomcat,redis,memcached}/{files,templates,tasks,handlers,vars,meta,default}

  2 编写Nginx角色

    

    [root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/files/index.html
      <h1>this is Nginx server</h1>

    

    

    

    

    

    最后运行

    ansible-playbook  nginx.yaml

 

 

 

 

 

 

 

  

 

posted @ 2019-07-21 20:47  Linus小跟班  阅读(213)  评论(0编辑  收藏  举报