运维自动化工具 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的核心程序
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
[[email protected] ~]# 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

[[email protected] ~]# 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 默认不指定模块时,将使用此模块。

[[email protected] ~]# 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": []
}

原文地址:http://blog.51cto.com/wzlinux/2174845

时间: 2024-10-11 12:40:07

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

运维自动化工具ansible

一.基础知识: 1. 简介 ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力. 真正具有批量部署的是ansible运行的模块,ansible只是一个框架 ansible架构 (1) 连接插件connection plugins: 负责和被监控端实现通信: (2) host inventory: 指定操作的主机,是一个配置文件里面定义监控的主机 (3) 各种模块核心模块.com

运维自动化工具ansible学习笔记

利用五一假期的时间学习了下ansible,看了一天的官方文档,对其中需要注意的地方,做下笔记整理下思绪. 一.简介 Ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.puppet与saltstack这2个软件都需要安装客户端,而saltstack与ansible很相似,都是属于python流的,但saltstack不是很稳定:puppet虽然稳定,但命令执行的时候,需要配置模块

运维自动化工具ansible(安装)

一.安装 注意:强烈建议升级python版本到2.6以上,不然运行会出错或者有些功能会没有,在编译安装其他包的时候也会因为兼容问题报错. (1).python2.7安装 https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz # tar xvzf Python-2.7.8.tgz # cd Python-2.7.8 # ./configure --prefix=/usr/local # make # make install ## 将py

运维自动化工具ansible(模块使用)

命令格式: ansible hosts -m shell -a 'uptime' 解析: ansible    #主命令 hosts      #在/etc/ansible/hosts文件中定义的主机组or主机名 -m         #使用模块 -a         #执行什么命令 ansible工作流程: hosts文件详解: /etc/ansible/hosts [test]        #设置主机组名称 192.168.1.1   ansible_ssh_user=root  ansi

运维自动化工具Cobbler之——安装实践

运维自动化工具--Cobbler实践 第1章 About Cobbler 1.1 Cobbler Introduction Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用.Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web

运维自动化之ansible playbook安装mysql

上次介绍了如何使用ansible playbook安装zabbix客户端(http://dl528888.blog.51cto.com/2382721/1436745),这次介绍一下如何使用playbook安装mysql. 下面是安装mysql的信息: mysql_basedir: /data/mysql/basedir                    源码目录 mysql_datadir: /data/mysql/datadir                    数据目录 mysql

运维自动化之ansible playbook安装ruby环境

本来不想打算写安装ruby的,但看几个puppet的群里有人对安装ruby比较茫然,所以这里简单介绍一下如何安装ruby. ps:话说现在也就gitlab.capistrano.puppet等软件使用ruby,最新2010年的软件好的都是python了,比如ansible.salt等. 下面是安装ruby的信息: ruby_version: 1.9.3 ruby_dir: /usr/local gem_version: 1.8.23 bundle_version: 1.6.3 可以看到ruby的

运维自动化之ansible playbook安装node环境

现在介绍如何使用ansible安装node. 下面是安装node的信息: node_dir: /data node_version: 0.10.21 node_port: 3301 可以看到node的版本是0.10.21,测试的node应用服务监听3301端口 备注:此playbook仅能对centos或者redhat的6.x版本进行安装. 下面是安装node的playbook结构 09:33:16 # tree node_* node_delete ├── files ├── handlers

运维自动化之ansible playbook结合docker安装smokeping

本次介绍ansible的paly book结合docker进行虚拟机里安装2.6.8版本smokeping(apache版本是2.4.7). docker版本 09:26:53 # docker version Client version: 0.11.1 Client API version: 1.11 Go version (client): go1.2.1 Git commit (client): fb99f99/0.11.1 Server version: 0.11.1 Server A