运维自动化工具 Ansible

栏目: 服务器 · 发布时间: 5年前

内容简介:Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上!ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。这些场景中我们都可以使用到ansible。

一、Ansible介绍

Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上!

1、Ansible能做什么

ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

  • 比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。
  • 比如:将某个文件一次性拷贝到100台服务器上。
  • 比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。

这些场景中我们都可以使用到ansible。

2、Ansible特性

  • 模块化:调用特定的模块,完成特定任务
  • 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
  • 支持自定义模块
  • 基于 Python 语言实现
  • 部署简单,基于python和SSH(默认已安装),agentless
  • 安全,基于OpenSSH
  • 支持playbook编排任务
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
  • 无需代理不依赖PKI(无需ssl)
  • 可使用任何编程语言写模块
  • YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案

3、Ansible架构

运维自动化工具 Ansible

  • Ansible核心组件说明:

Ansible:Ansible的核心程序

Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载

Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.

Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。

Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。

Connection Plugins:连接插件,Ansible和Host通信使用

二、Ansible 的安装

安装方法有很多,这里仅仅以CentOS 7 yum安装为例,Ansible默认不在标准仓库中,需要用到EPEL源。

yum install ansible -y
[root@monitor ~]# ansible --version
ansible 2.6.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]

三、Ansible 配置

1、实验环境

我这里主要是拿这几台设备进行测试,分组是随意的。

IP 系统 功能
10.0.0.14 CentOS 6.7 ansible主控服务器
10.0.0.4 CentOS 7.3 cluster1
10.0.0.9 CentOS 6.6 cluster1
10.0.0.19 CentOS 6.9 cluster2
10.0.0.20 CentOS 6.5 cluster2
10.0.0.21 CentOS 6.5 cluster2

2、Inventory 主机清单

在主控服务器上面配置清单。

# cat /etc/ansible/hosts
[cluster1]
10.0.0.4
10.0.0.9
[cluster2]
10.0.0.19
10.0.0.20
10.0.0.21

3、配置无密码通信

这里配置比较简单,自行操作一下。

4、测试 ping

[root@monitor ~]# ansible all -m ping
10.0.0.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.0.19 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.0.21 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.0.20 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.0.9 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

四、Ansible 模块

ansible 使用方法

ansible <host-pattern> [-m module_name] [options]
指令 匹配规则的主机清单 -m 模块名 选项

查看模块使用方法

ansible-doc -s MODULE_NAME

1、ping

功能:尝试连接到主机,验证并返回pong成功。

对于Windows目标,请改用win_ping模块

不使用icmp协议,使用ssh协议。

# ansible all -m ping
10.0.0.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"             # 返回pong表明成功通讯
}

2、command

功能:在远程节点上执行命令

变量和操作符号 "<", ">", "|", ";" and "&" 不能正常工作。如果需要使用,请使用 shell 模块

Ansible 默认不指定模块时,将使用此模块。

[root@monitor ~]# ansible cluster1 -a 'date'
10.0.0.4 | SUCCESS | rc=0 >>
Thu Sep 13 17:00:23 CST 2018

10.0.0.9 | SUCCESS | rc=0 >>
Thu Sep 13 17:00:33 CST 2018

3、shell

功能:在远程节点上执行命令。

与command模快使用一致,但是,变量 和操作符号 "<", ">", "|", ";" and "&" 能正常工作。

我这里使用通配符,使用 command 模块是不行的。

# ansible cluster1 -m command -a 'ls -d /usr/local/tomcat0[1-3]'
10.0.0.4 | FAILED | rc=2 >>
ls: cannot access /usr/local/tomcat0[1-3]: No such file or directorynon-zero return code

10.0.0.9 | FAILED | rc=2 >>
ls: cannot access /usr/local/tomcat0[1-3]: No such file or directorynon-zero return code

改成 shell 模块就可以。

# ansible cluster1 -m shell -a 'ls -d /usr/local/tomcat0[1-3]'       
10.0.0.4 | SUCCESS | rc=0 >>
/usr/local/tomcat01
/usr/local/tomcat02
/usr/local/tomcat03

10.0.0.9 | SUCCESS | rc=0 >>
/usr/local/tomcat01
/usr/local/tomcat02
/usr/local/tomcat03

4、cron

功能:管理计划任务

backup:对远程主机上的原任务计划内容修改之前做备份

cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划

day:日(1-31, /2,……)

hour:小时(0-23, /2,……)

minute:分钟(0-59, /2,……)

month:月(1-12, /2,……)

weekday:周(0-7,*,……)

job:要执行的任务,依赖于state=present

name:该任务的描述

special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly

state:确认该任务计划是创建还是删除

user:以哪个用户的身份执行

  • 创建一个定时任务。

    # ansible cluster1 -m cron -a 'name="test cron job" minute=*/2 job="/usr/bin/wall hello world"'  
    10.0.0.4 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "test cron job"
    ]
    }
    10.0.0.9 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "test cron job"
    ]
    }
  • 查看创建的任务
# ansible cluster1 -a 'crontab -l'
10.0.0.4 | SUCCESS | rc=0 >>
42 5 * * * /usr/sbin/ntpdate time1.aliyun.com
#Ansible: test cron job
*/2 * * * * /usr/bin/wall hello world

10.0.0.9 | SUCCESS | rc=0 >>
23 15 * * * /usr/sbin/ntpdate time1.aliyun.com
#Ansible: test cron job
*/2 * * * * /usr/bin/wall hello world
  • 删除定时任务
# ansible cluster1 -m cron -a 'name="test cron job" minute=*/2 job="/usr/bin/wall hello world" state=absent'
10.0.0.4 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": []
}
10.0.0.9 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": []
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python语言及其应用

Python语言及其应用

[美] Bill Lubanovic / 丁嘉瑞、梁杰、禹常隆 / 人民邮电出版社 / 2016-1 / 79.00元

本书介绍Python 语言的基础知识及其在各个领域的具体应用,基于最新版本3.x。书中首先介绍了Python 语言的一些必备基本知识,然后介绍了在商业、科研以及艺术领域使用Python 开发各种应用的实例。文字简洁明了,案例丰富实用,是一本难得的Python 入门手册。一起来看看 《Python语言及其应用》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具