Ansible,


Ansible 自动化运维工具

 

Ansible是什么?

Ansible是一个“配置管理工具”也是一个“自动化运维工具”

 

Ansible 作用:

Ansible是新出现的自动化运维工具,基于Python开发,实现批量系统配置,批量程序部署,批量运行命令

 

 

Ansible 简介:

 

Ansible 是一个能实现批量部署的自动化运维工具,基于python开发,能实现批量系统配置,批量部署程序,批量运行命令。Ansible是基于模块来运行,它本身没有任何批量部署的能力,ansible主要是提供一种批量部署的框架。

 

Ansible的框架:

 

 

 

Ansible 特性:

 

 

 

Asible的优势:

1) 轻量级易操作

2) 分布式,无agent客户端

3) 配置语法是YAML语言

4) 轻量级,无需在客户端安装agent,更新时在操作机更新一次即可

5) 批量任务执行可以写成脚本,不用发送给客户机就可执行

6) 使用python编写,维护简单

7) 支持sudo

 

Ansible的架构:

连接其他主机默认使用的ssh协议,也支持localzeromq的方式连接

 

 

 

 

核心:ansible  

核心模块(core modules):ansible自带的模块

扩展模块(custom modules):核心模块不能满足需求,添加扩展模块。

插件(plugins):完成模块的补充

剧本(playbook):在ansible配置文件中,可以将多个任务定义在一个剧本中,在ansibel执行剧本。

连接插件(connectior plugins):ansible默认使用ssh连接的,但是ansible也支持其他的连接方式,其他的连接方式是需要插件的支持,才可以实现通信。

主机群(host inventory): 定义ansible管理的主机的

 

 

 

 

 

 

 

 

Ansible生成的主要文件

 

1
2
3
4
5
6

/etc/ansible
/etc/ansible/ansible.cfg   #配置文件
/etc/ansible/hosts   #主机库(host inventory)管理被监控的主机
/usr/bin/ansible   #主程序
/usr/bin/ansible-doc   #文档
/usr/bin/ansible-playbook   #剧本

 

Ansible的工作原理:

 

Ansible 的7个命令:

AnsibleAnsible-docAnsible-galaxyAnsible-lintAnsible-playbookAnsible-pullAnsible-vault

 

Ansible

Ansible是核心的指令,主要用于执行单条命令,默认跟的是主机和选项部分,默认不指定模块时,使用的是command模块(默认使用的模块可以在ansible.cfg修改):

Eg[root@44 ~]# ansible all -a "pwd"

192.168.20.70 | SUCCESS | rc=0 >>

/root

 

Ansible-doc

Ansible-doc -h 用于查看模块的信息常见的参数-l  -s

Ansible-doc -l  列出已安装的模块

Ansible-doc -s 模块 : 查查看具体模块的使用方法

 

Ansible-galaxy

Ansible-galaxy 从站点下载第三方的扩展模块

[root@44 ~]# ansible-galaxy -h

Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...

 

Ansible-lint

Ansible-lintplaybook的语法进行检查的工具

Ansible-lint 剧本名

注:本人安装的ansible 没有此命令选项所以用ansible-playbook --syntax-check 对剧本进行语法的检查

[root@44 ~]# ansible-playbook --syntax-check  + 剧本名  

对剧本语法进行检查但不执行

 
Ansible-playbook

Ansible-playbook 读取playbook文件执行相应的动作。

执行ansible-playbook的剧本

eg:执行a.yml剧本

[root@44 ~]# ansible-playbook a.yml

 

Ansible-pull

Ansible-pull 适用于数量多的机器配置,远程执行命令的工具。对运维架构能力比较强

Ansible-vault

Ansible-vault 配置文件有敏感信息,设置加密/解密这个配置文件

 

 

  常用模块使用

 

Ansible语法:ansible 机组名 -m 模块 -a 执行的内容

 

1)   Setup模块

 

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

 

Ansible 用户 -m setup

 

2)        Ping模块

 

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

 

Ansible  用户  -m ping

 

3)        Copy模块

 

复制文件到远程主机

 

示例:将本地文件“/etc/ansible/ansible.cfg”复制到远程服务器

 

Ansibles  -m copy -a "src=/etc/ansible/ansible.cfgdest=/tmp/ansible.cfg owner=root group=root mode=0644"

 

4)        Command模块

 

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

 

相关选项如下:

 

ansible storm_cluster-m command -a "uptime"

 

5)        Shell模块

 

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

 

这个模块与script不同的是,首先要将写好的sh脚本分发到机组,再执行

 

command不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:raw。

 

示例:

 

先在本地创建一个SHELL脚本

 

vim/tmp/rocketzhang_test.sh

 

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

 

ansiblestorm_cluster -m copy -a "src=/tmp/rocketzhang_test.shdest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"

 

远程执行

 

# ansiblestorm_cluster -m shell -a "/tmp/rocketzhang_test.sh"

 

6)        Script模块

 

script模块可以实现到对象节点上执行本机脚本。有点类似copy+shell+删除copy的脚本的这样一个综合的功能。

 

ansible host32-m script -a /tmp/hello.sh

 

7)        更多模块

 

其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。

 

service:系统服务管理

 

cron:计划任务管理

 

yum:yum软件包安装管理

 

synchronize:使用rsync同步文件

 

user:系统用户管理

 

group:系统用户组管理

 

File :  对文件目录的创建、删除

 

Path 参数:用来指定要操作的文件或目录

 

State 参数: 设定操作的需求

 

State=directory   创建目录

 

State=touch     创建文件

 

State=link       创建硬连接

 

State=absent     缺席、删除

 

 

 

Ansible-playbook  剧本

 

Ansible-playbook的作用:

 

为什么使用ansible-playbook哪?当批量部署的过程中有些监控器需要做出改动的时候,我们不需要通过ansible命令去手动去改动,那样太过于消耗时间,我们可以把它写成脚本,有改动的时候,只需要修改定义下的变量就好。Ansible中的脚本功能就是ansible-playbook剧本。

 

 

 

 

 

Ansible-playbook 的使用方法:

 

Ansible-playbook的组织格式:YAML语言格式

 

YAML的简介:

 

类似于半结构化数据,声明式配置,可读性较高用来表达资料序列的格式,容易与脚本语言交互

 

YAML的语法格式:

 

① 任何书记结构用缩进来标识,可以嵌套

 

② 每一行的一个键值keyvalue ,冒号隔开。若想在一行标识用{}和,分隔

 

③ 列表用-标识

 

Playbook 组成的结构:

 

Host: 被监控的主机

 

Tasks :任务,调用的模块执行操作

 

Variables: 变量

 

Templates: 模板

 

Handlers :处理器

 

Roles :角色

 

基本结构:

 

  – host:webservices
            remote_user:
                – tasks:
                – task1
            module_name
        YAML文件扩展名通常为.yml,如test.yml。

 

 

 

 

 

Eg

 

 

 

[root@44 ~]# cat a.yml

 

- hosts: 192.16.20.70

 

  remote_user: root

 

  tasks:

 

  - name: add group

 

    group: name=new state=present

 

  - name: add user

 

    user: name=yxyfyy group=new

 

 

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/etc/services dest=/tmp/ owner=nobody group=new

 

 

 

 

 

 

 

 

 

 

 

 [root@44 ~]# ansible-playbook --syntax-check a.yml

 

 [WARNING]: Could not match supplied host pattern, ignoring: 192.16.20.70

 

 

 

 

 

playbook: a.yml

 

 

 

 

 

编写playbook 剧本(执行拷贝的模板,把主机上的1111.txt文件拷贝到被监控的主机上。)

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root

 

 

 

playbook剧本进行检测有没有错误

 

[root@44 ~]# ansible-playbook --syntax-check a.yml

 

 

 

playbook: a.yml

 

 

 

执行playbook剧本

 

[root@44 ~]# ansible-playbook a.yml

 

PLAY [192.168.20.70] ******************************************************************

 

TASK [Gathering Facts] ****************************************************************

 

ok: [192.168.20.70]

 

 

 

TASK [copy] ***************************************************************************

 

changed: [192.168.20.70]

 

 

 

PLAY RECAP ****************************************************************************

 

192.168.20.70              : ok=2    changed=1    unreachable=0    failed=0   

 

检查结果

 

[root@44 ~]# cat 1111.txt

 

ansible

 

[root@yk3 ~]# cat /tmp/1111.txt

 

ansible

 

 

 

Ansible-playbook的组成:

 

Ansible-playbook可以理解为把ansible的使用的模块方法写入ansible-playbook剧本中。

 

Ansible-playbook文件是以“.yaml”或“.yml”结尾的文件

 

 

 

EG:  

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70 (指定被操作主机)

 

yaml语法中使用冒号映射键值对,“冒号”后必须加空格)

 

  remote_user: root (指定远程操作时使用那个用户)

 

(注意格式:yaml语法用层级关系,同一层级的是对齐的。(开头对齐))

 

  tasks: (操作的任务列表,可以有多个任务)

 

  - name: copy (自定义任务名称)

 

copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root   

 

(任务的操作,copycopy模块,src:源地址,(copy的内置条件) dest:目的地址, owner:所属人  group:所属组)

 

 

 

 

 

Hosts:定义要操作的主机,可以是IP地址、主机名(提前域名解析)、定义的分组。  定义多个主机要用,分隔开

 

 

 

Ansible-playbook  剧本

 

Ansible-playbook的作用:

 

为什么使用ansible-playbook哪?当批量部署的过程中有些监控器需要做出改动的时候,我们不需要通过ansible命令去手动去改动,那样太过于消耗时间,我们可以把它写成脚本,有改动的时候,只需要修改定义下的变量就好。Ansible中的脚本功能就是ansible-playbook剧本。

 

 

 

 

 

Ansible-playbook 的使用方法:

 

Ansible-playbook的组织格式:YAML语言格式

 

YAML的简介:

 

类似于半结构化数据,声明式配置,可读性较高用来表达资料序列的格式,容易与脚本语言交互

 

YAML的语法格式:

 

① 任何书记结构用缩进来标识,可以嵌套

 

② 每一行的一个键值keyvalue ,冒号隔开。若想在一行标识用{}和,分隔

 

③ 列表用-标识

 

Playbook 组成的结构:

 

Host: 被监控的主机

 

Tasks :任务,调用的模块执行操作

 

Variables: 变量

 

Templates: 模板

 

Handlers :处理器

 

Roles :角色

 

基本结构:

 

  – host:webservices
            remote_user:
                – tasks:
                – task1
            module_name
        YAML文件扩展名通常为.yml,如test.yml。

 

 

 

 

 

Eg

 

 

 

[root@44 ~]# cat a.yml

 

- hosts: 192.16.20.70

 

  remote_user: root

 

  tasks:

 

  - name: add group

 

    group: name=new state=present

 

  - name: add user

 

    user: name=yxyfyy group=new

 

 

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/etc/services dest=/tmp/ owner=nobody group=new

 

 

 

 

 

 

 

 

 

 

 

 [root@44 ~]# ansible-playbook --syntax-check a.yml

 

 [WARNING]: Could not match supplied host pattern, ignoring: 192.16.20.70

 

 

 

 

 

playbook: a.yml

 

 

 

 

 

编写playbook 剧本(执行拷贝的模板,把主机上的1111.txt文件拷贝到被监控的主机上。)

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root

 

 

 

playbook剧本进行检测有没有错误

 

[root@44 ~]# ansible-playbook --syntax-check a.yml

 

 

 

playbook: a.yml

 

 

 

执行playbook剧本

 

[root@44 ~]# ansible-playbook a.yml

 

PLAY [192.168.20.70] ******************************************************************

 

TASK [Gathering Facts] ****************************************************************

 

ok: [192.168.20.70]

 

 

 

TASK [copy] ***************************************************************************

 

changed: [192.168.20.70]

 

 

 

PLAY RECAP ****************************************************************************

 

192.168.20.70              : ok=2    changed=1    unreachable=0    failed=0   

 

检查结果

 

[root@44 ~]# cat 1111.txt

 

ansible

 

[root@yk3 ~]# cat /tmp/1111.txt

 

ansible

 

 

 

Ansible-playbook的组成:

 

Ansible-playbook可以理解为把ansible的使用的模块方法写入ansible-playbook剧本中。

 

Ansible-playbook文件是以“.yaml”或“.yml”结尾的文件

 

 

 

EG:  

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70 (指定被操作主机)

 

yaml语法中使用冒号映射键值对,“冒号”后必须加空格)

 

  remote_user: root (指定远程操作时使用那个用户)

 

(注意格式:yaml语法用层级关系,同一层级的是对齐的。(开头对齐))

 

  tasks: (操作的任务列表,可以有多个任务)

 

  - name: copy (自定义任务名称)

 

copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root   

 

(任务的操作,copycopy模块,src:源地址,(copy的内置条件) dest:目的地址, owner:所属人  group:所属组)

 

 

 

 

 

Hosts:定义要操作的主机,可以是IP地址、主机名(提前域名解析)、定义的分组。  定义多个主机要用,分隔开

 

 

 

相关内容

    暂无相关文章