系统化运维工具ansible

一.ansible简介

  1. 什么是ansible?

?? nsible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

?2. ansible特点

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  2. 默认使用SSH协议对设备进行管理;
  3. 有大量常规运维操作模块,可实现日常绝大部分操作。
  4. 配置简单、功能强大、扩展性强;
  5. 支持API及自定义模块,可通过Python轻松扩展;
  6. 通过Playbooks来定制强大的配置、状态管理;
  7. 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  8. 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

3.架构图

Ansible:Ansible核心程序。

HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。

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

CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。

CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。

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

二.ansible常用模块

1、主机连通性测试:

#ansible all -m ping执行效果如下:

command:在远程主机执行命令;不支持|管道命令

[[email protected] ~]# ansible all -m command -a ‘ifconfig’

2、Command

命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如”小于”<“,”>”, “|”, “;”,”&”‘ 工作(需要使用(shell)模块实现这些功能)。

action: command

chdir # 在执行命令之前,先切换到该目录

creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断

executable # 切换shell来执行命令,需要使用命令的绝对路径

free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。

removes # 一个文件名,这个文件不存在,则该命令不执行,与

creates相反的判断

3、shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能,

例如管道等 :

4、copy:复制文件到远程主机,可以改权限等

相关选项如下:

backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no

content:用于替代“src”,可以直接设定指定文件的值

dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

directory_mode:递归设定目录的权限,默认为系统默认权限

force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

others:所有的file模块里的选项都可以在这里使用

src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

用法:

(1)???? 复制文件 -a “src= dest= ”

???? (2) 给定内容生成文件-a "content= dest= "

[[email protected] ~]# ansible webservers -m copy -a ‘content=“hello\nworld” dest=/tmp/test.ansible mode=666’

5、file 设置文件属性:

创建目录:-a “path= state=directory”

创建链接文件:-a “path= src= state=link”

删除文件:-a “path= state=absent”

force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组 mode:定义文件/目录的权限

owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径

recurse:递归设置文件的属性,只对目录有效 src:被链接的源文件路径,只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

directory:如果目录不存在,就创建目录

file:即使文件不存在,也不会被创建

link:创建软链接

hard:创建硬链接

touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

absent:删除目录、文件或者取消链接文件

6、fetch从远程某主机获取文件到本地:

dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile

Src:在远程拉取的文件,并且必须是一个file,不能是目录

r[email protected] ~]# ansible webservers -m fetch -a ‘src=/var/log/messages dest=/root‘

7、cron 管理cron计划任务:

a “”: 设置管理节点生成定时任务

action: cron backup= # 如果设置,创建一个crontab备份 【yes|no】

cron_file= #如果指定, 使用这个文件cron.d,而不是单个用户

crontab

day= #日应该运行的工作( 1-31, *, */2, )

hour= # 小时 ( 0-23, *, */2, )

minute= #分钟( 0-59, *, */2, )

month= # 月( 1-12, *, /2, )

weekday # 周 ( 0-6 for Sunday-Saturday,, )

job= #指明运行的命令是什么

name= #定时任务描述

reboot # 任务在重启时运行,不建议使用,建议使用special_time

special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly

(每周),daily(每天),hourly(每小时)

state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务

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

nsible mysql_test -m cron -a ‘name="sync time from ntpserver" minute="*/10" job="/sbin/ntpdate asia.pool.ntp.org &>/dev/null" ‘

每隔5分钟同步一下时钟服务器

9、service: 服务程序管理

arguments #命令行提供额外的参数

enabled #设置开机启动。

name= #服务名称

runlevel #开机启动的级别,一般不用指定。

sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。

state #started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置

启动nginx服务并设置范围自启动:

[[email protected] ~]# ansible webservers -m service -a ‘name=nginx state=started enabled=true‘ 启动服务

10、user模块管理

用户模块,管理用户帐号action: user

comment # 用户的描述信息

createhome # 是否创建家目录

force # 在使用state=absent是, 行为与userdel –force一致.

group # 指定基本组

groups # 指定附加组,如果指定为(groups=)表示删除所有组

home # 指定用户家目录

move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录

name # 指定用户名

non_unique # 该选项允许改变非唯一的用户ID值

password # 指定用户密码

remove # 在使用state=absent时, 行为是与userdel –remove一致

shell # 指定默认shell

state # 设置帐号状态,不指定为创建,指定值为absent表示删除

system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户

uid # 指定用户的uid

update_password # 更新用户密码

ansible web -m user -a ‘name=tom comment="tom is tom" uid=1066 group=tom groups=wheel

shell=/bin/zshell home=/home/tomhome‘

11、group

用户组模块,添加或删除组

action: group

gid # 设置组的GID号

name= # 管理组的名称

state # 指定组状态,默认为创建,设置值为absent为删除

system # 设置值为yes,表示为创建系统组

创建名为tom的组

[[email protected] ~]#ansible web -m group -a ‘name=tom state=present‘

12、script在指定节点运行服务端的脚本

在本地写一个脚本,在其他机器上运行

[[email protected] ~]#vim test.sh

#/bin/bash

touch /tmp/test.sh.log #创建/tmp/test.sh.log

echo “hello” >> /tmp/test.sh.log #将date命令结果输出到/tmp/test.sh.log

在web组中所有主机执行/root/test.sh脚本

[[email protected] ~]#ansible web -m script -a ‘/root/test.sh’

[[email protected] ~]#cat /tmp/test.sh.log hello

[[email protected] ~]#cat /tmp/test.sh.log hello

查看172.16.251.163主机下的/tmp/test.sh.log

[[email protected] ~]#ansible 172.16.251.163 -m shell -a ‘cat /tmp/test.sh.log’

13、setup模块

facts组件是Ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。

facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。

setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下(由于输出结果较多,这里只列命令不写结果):

ansible 10.212.52.252 -m setup -a ‘filter=ansible_*_mb‘ //查看主机内存信息

#ansible 10.212.52.252 -m setup -a ‘filter=ansible_eth[0-2]‘ //查看地接口为eth0-2的网卡信息

Ansible playbook简介

playbook是ansible用于配置,部署,和管理被控节点的剧本。

通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。

也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

Ansible playbook使用场景

执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。

Ansible playbook格式

文件的第一行应该以 ”—” (三个连字符)开始,表明YMAL文件的开始。

在同一行中,#之后的内容表示注释,类似于shell,python和ruby。

YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。

同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。

play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以”:”分隔表示,”:”后面还要增加一个空格。

在mysql.yml中,主要由三个部分组成。

hosts部分:使用hosts指示使用哪个主机或主机组来运行下面的tasks,每个playbook都必须指定hosts,hosts也可以使用通配符格式。主机或主机组在inventory清单中指定,可以使用系统默认的/etc/ansible/hosts,也可以自己编辑,在运行的时候加上-i选项,指定清单的位置即可。在运行清单文件的时候,–list-hosts选项会显示那些主机将会参与执行task的过程中。

remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应task的权限。

tasks:指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块,前面已经提到模块的用法。

tasks包含name和要执行的模块,name是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。

?

使用ansible-playbook运行playbook文件,得到如下输出信息,输出内容为JSON格式。并且由不同颜色组成,便于识别。一般而言

l 绿色代表执行成功,系统保持原样

l ×××代表系统代表系统状态发生改变

l 红色代表执行失败,显示错误输出。

执行有三个步骤:1、收集facts 2、执行tasks 3、报告结果

Playbook的核心元素:

Hosts:主机

Tasks:任务列表

Variables 变量

Templates:包含了模板语法的文本文件;

Handlers:由特定条件触发的任务;

Playbooks配置文件的基础组件:

Hosts:运行指定任务的目标主机;

remoute_user: 在远程主机上执行任务的用户;

sudo_user:

tasks:任务列表

模块,模块参数;

格式:

(1) action: module arguments

(2) module: arguments

注意:shell和command模块后面直接跟命令,而非key=value类的参数列表;

(1) 某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;

(2) 任务可以通过“tags“打标签,而后可在ansible-playbook命令上使用-t指定进行调用;

handlers:任务,在特定条件下触发;接收到其它任务的通知时被触发;

tasks:

– name: TASK_NAME

module: arguments

notify: HANDLER_NAME

handlers:

– name: HANDLER_NAME

module: arguments

?

variables:

(1) facts:可直接调用;

注意:可使用setup模块直接获取目标主机的facters;

(2) 用户自定义变量:

(a) ansible-playbook命令的命令行中的

-e VARS, --extra-vars=VARS

(b) 在playbook中定义变量的方法:

vars:

- var1: value1

- - var2: value2

(3) 通过roles传递变量;

(4) Host Inventory

(a) 用户自定义变量

(i) 向不同的主机传递不同的变量;

IP/HOSTNAME varaiable=value var2=value2

(ii) 向组中的主机传递相同的变量;

[groupname:vars]

variable=value

[web]

172.17.251.188

172.17.250.209

[web:vars]

rpmname=samba

运行playbook的方式:

(1) 测试

ansible-playbook --check 只检测可能会发生的改变,但不真正执行操作;

ansible-playbook --list-hosts 列出运行任务的主机;

(2) 直接运行

实例1:远程安装smba并启动服务

1.vim /etc/ansible/hosts

2.vim /etc/ansible/web.yuml

3.执行


4.查看远程主机,服务已启动。

还可以把一个任务打标签,启动的时候可以直接调用标签

vim web.yml

调用标签启动服务:ansible-playbook web.yml -t

时间: 2024-07-30 19:42:53

系统化运维工具ansible的相关文章

运维工具Ansible浅谈playbook讲解以及YAML语法和JSON语法的互化

引言:运维发展到今天已经远远不是传统的运维做一些重复性的枯燥工作,面对海量爆发的访问量,传统的运维已经很吃力,比如让你装三五台机器的系统,这个so easy,那要是安装几百上千台呢,还easy吗.我要安装nginx服务,并提供好相应的端口转发机制以及location资源访问机制,但是有多发十几台这样的机制,并且每台机器转发机制都不相同,这个对我们来说是一个不小的挑战,因此运维进入了自动化时代,自动化运维就显得重要了.因此本文就是围绕自动化运维工具Ansible来展开的. 一,为什么要使用Ansi

自动化运维工具Ansible详细部署 (转载)

自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 ===========================

自动化运维工具——ansible详解案例分享

自动化运维工具--ansible详解案例分享(一)目录ansible 简介ansible 是什么?ansible 特点ansible 架构图ansible 任务执行ansible 任务执行模式ansible 执行流程ansible 命令执行过程ansible 配置详解ansible 安装方式使用 pip(python的包管理模块)安装使用 yum 安装ansible 程序结构ansible配置文件查找顺序ansible配置文件ansuble主机清单ansible 常用命令ansible 命令集a

3.1 自动化运维工具ansible

自动化运维工具ansible 运维自动化发展历程及技术应用 Iaas 基础设施即服务Pass 平台服务SaaS 软件即服务 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输命令执行 应用部署配置管理任务流编排 企业实际应用场景分析 1 Dev开发环境 使用者:程序员功能:程序员开发软件,测试BUG的环境管理者:程序员123 2 测试环境 使用者:QA测试工程师功能:测试经过Dev环境测试通过的软件的功能管理者:运维说明:测试环境往往有多套,测试环境满足测试功能即可

自动化运维工具-Ansible基础

目录 自动化运维工具-Ansible基础 自动化运维的含义 Ansible 基础及安装 Ansible的架构 Ansible的执行流程 ansible配置文件 ansible Inventory(主机清单文件) Ansible ad-hoc ansible常用模块 实战 自动化运维工具-Ansible基础 自动化运维的含义 1.手动运维时代 2.自动化运维时代 3.自动化运维工具给运维带来的好处 Ansible 基础及安装 1.什么是Ansible Ansible是一个自动化统一配置管理工具 2

Linux自动运维工具Ansible的使用

Linux自动运维工具Ansible的使用 我们熟悉这个工具后, 可以很轻松的安装k8s. 一.介绍 ansible - run a task on a target host(s) Ansible是一个用Python开发的运维工具, 可以在本地让远程主机执行命令, 项目地址: Github源码, 中文文档 二.安装 简单上阵, 我们的主机都是ubuntu, 请使用root用户: sudo su apt install ansible ansible --version 配置文件: ls /et

运维工具ansible理论部分

1.运维工作介绍 运维工作的全部流程: 系统安装(物理机.虚拟机)--> 程序包安装.配置.服务启动 --> 批量操作 --> 程序发布  --> 监控 随着一些大公司的IT系统架构越来越复杂,服务器数量越来越多,标准化和自动化已经是运维工作的基本要素. 自动化运维经历了4个阶段:人工,这个阶段基本上是全部需要到机器上一步步操作:脚本,使用计划任务完成一些重复性工作:工具,这个阶段一个人可以管理大量的机器,常见的工具:puppet,saltstack,ansible:平台化,这时运

自动化运维工具Ansible详细部署

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 =========================================================

自动化运维工具Ansible实战(一)安装部署

1,基本介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作