Ansible 自动化运维工具

Ansible是什么?

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

Ansible 作用:

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

Ansible 简介:

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

Ansible的框架:

  1. 连接的插件connection plugins: 负责和被监控端的通信
  2. Host inventory : 指定服务器上配置文件定义监控的客户端
  3. 核心模块: command、shell、yum、copy、ping、rm、自定义模块(第三方模块)等
  4. Playbook: 剧本任务,在非必要的情况下可以在一个节点执行多个任务

Ansible 特性:

  1. No agent 不需要在被管控主机上安装任何软件
  2. No server 不用单独启用服务,能使用直接运行,使用时直接运行命令
  3. 对硬件资源占用小
  4. 不需要在被管控的主机上安装任何软件
  5. 基于模块工作
  6. 基于ssh工作
  7. 使用yaml语言
  8. 可实现多级指挥

Asible的优势:

1) 轻量级易操作

2) 分布式,无agent客户端

3) 配置语法是YAML语言

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

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

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

7) 支持sudo

Ansible的架构:

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

核心: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的工作原理:

  1. 服务端连接客户端,实现通信
  2. 通过服务器的节点使用模块实现客户端的需求
  3. 通过剧本实现多个任务的实现

Ansible 的7个命令:

Ansible、Ansible-doc、Ansible-galaxy、Ansible-lint、Ansible-playbook、Ansible-pull、Ansible-vault:

Ansible:

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

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

192.168.20.70 | SUCCESS | rc=0 >>

/root

  1. 参数:
  2. -a 'Arguments', --args='Arguments' 命令行参数
  3. -m NAME, --module-name=NAME 执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
  4. -i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts.
  5. -u Username, --user=Username 执行用户,使用这个远程用户名而不是当前用户
  6. -U --sud-user=SUDO_User sudo到哪个用户,默认为 root
  7. -k --ask-pass 登录密码,提示输入SSH密码而不是假设基于密钥的验证
  8. -K --ask-sudo-pass 提示密码使用sudo
  9. -s --sudo sudo运行
  10. -S --su 用 su 命令
  11. -l --list 显示所支持的所有模块
  12. -s --snippet 指定模块显示剧本片段
  13. -f --forks=NUM 并行任务数。NUM被指定为一个整数,默认是5。 #ansible testhosts -a "/sbin/reboot" -f 10 重启testhosts组的所有机器,每次重启10台
  14. --private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
  15. -v --verbose 详细信息
  16. all 针对hosts 定义的所有主机执行
  17. -M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
  18. --list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文件
  19. -o --one-line 压缩输出,摘要输出.尝试一切都在一行上输出。
  20. -t Directory, --tree=Directory 将内容保存在该输出目录,结果保存在一个文件中在每台主机上。
  21. -B 后台运行超时时间
  22. -P 调查后台程序时间
  23. -T Seconds, --timeout=Seconds 时间,单位秒s
  24. -P NUM, --poll=NUM 调查背景工作每隔数秒。需要- b
  25. -c Connection, --connection=Connection 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。。。。。
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-lint对playbook的语法进行检查的工具

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的语法格式:

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

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

③ 列表用-标识

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

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

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

Ansible-playbook  剧本

Ansible-playbook的作用:

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

Ansible-playbook 的使用方法:

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

YAML的简介:

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

YAML的语法格式:

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

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

③ 列表用-标识

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

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

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

Ansible 自动化运维工具的更多相关文章

  1. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  2. Ansible自动化运维工具的使用

                                 Ansible自动化运维工具的使用       host lnventory 管理主机 ip  root账号密码 ssh端口 core mod ...

  3. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  4. Ansible自动化运维工具使用

    概述本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装主机配置Ad-Hoc command(命令行执行)Playbook (任务剧本)Ansible 和 Sa ...

  5. ansible自动化运维工具使用详解

    一. ansible 简介 1. ansible ansible是新出现的 自动化 运维工具 , 基于Python研发 . 糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行 ...

  6. Ansible自动化运维工具

    ansible软件介绍 python语言是运维人员必会的语言!  ansible是一个基于Python开发的自动化运维工具!(saltstack)  其功能实现基于SSH远程连接服务!  ans ...

  7. [Linux]Ansible自动化运维② - 工具与模块

    目录 一.Ansible的工具 1.1 Ansible的工作前提 1.2 Ansible的安装文件 1.3 Ansible的配置文件 1.4 Ansible的相关工具 1.4.1 [帮助工具]Ansi ...

  8. 三石之道之Ansible自动化运维工具部署

    centos6默认python版本为2.6 centos7默认python版本为2.7 ansible需要最低python2.7的支持 总结:centos6要部署ansible工具,需要先升级pyth ...

  9. ansible自动化运维工具的安装与使用

    运行环境 centOS6.6 ansible ansible的功能还是比较多的,博主只用它在集群上进行批量部署软件和维护的功能,其他不多做研究,有需要的话这篇文章会慢慢补充. ansible特点 轻量 ...

随机推荐

  1. PageHelper分页(十)

    分页有两种: (1) 物理分页:物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页 ...

  2. 浅谈C++ STL stack 容器

    浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...

  3. CF812C Sagheer and Nubian Market

    CF812C Sagheer and Nubian Market 洛谷评测传送门 题目描述 On his trip to Luxor and Aswan, Sagheer went to a Nubi ...

  4. 期望DP的一般思路

    期望DP的一般思路 转载自_new2zy_ 期望\(dp\),也加概率\(dp\) 一般来说,期望\(dp\)找到正确的状态后,转移是比较容易想到的. 但一般情况下,状态一定是"可数&quo ...

  5. Django signal(信号)

    Django中提供了"信号调度",用于在框架执行操作时解耦,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django 内置信号 Model signals pr ...

  6. [译][ABP vNext]ABP CLI,v0.18版本的新模板和其他功能

    ABP CLI,v0.18版本的新模板和其他功能 ABP v0.18已发布, 包含解决的70+个issue,500+次提交 网站更改 abp.io网站完全更新以突出ABP框架的目标和重要功能.文档和博 ...

  7. 近似计算一个对象在js占用内存

    内存 在很久之前,我就想查看一个对象在JS里占用多少内存了,直到最近由于线上使用了需要计算从服务端传输数据的大小,让这个需求尤为强烈. 预备知识 我们现在使用的js是高级语言,它在内存细节之上建立一个 ...

  8. React中的fetch请求相关

    fetch在reactjs中等同于 XMLHttpRequest,它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性. Fetch 的核心在于对 HTTP 接口的抽象 ...

  9. 在windows下使用VirtualEnv建立flask项目

    1.系统中安装VirtualEnv 在安装完Python后,自带的有pip或easy_install工具,可进行VirtualEnv的安装 pip install virtualenv 2.构造项目, ...

  10. python Condition

    import threading # 必须要使用condition的例子 # class XiaoAi(threading.Thread):# def __init__(self, lock):# s ...