自动化运维工具—-Ansible 命令行模块

自动化运维工具—-Ansible  命令行模块

常识扩大

机器办理

机器办理的东西挑选的考量能够包括以下三个方面:

  1. 是否简略,是否需求每台机器都布置Agent(客户端)
  2. 语言的挑选(Puppet/Chef vs Ansible/SaltStack)开源技术,不看官网不足以娴熟,不明白源码不足以精通:Puppet、Chef依据Ruby开发的,Ansible、SaltStack依据Python开发的。
  3. 速度的挑选(Ansible vs SaltStack)Ansible依据SSH协议传输数据,SaltStack运用信息队列ZeroMQ传输数据,大规模并发的才能对于及时台-200台规模的兄弟来说,Ansible的功用也能够承受,假如一次操作上千台用salt好一些。
东西 语言 架构 协议
Puppet Ruby C/S HTTP
Chef Ruby C/S HTTP
Ansible Python 无Client SSH
Saltstack Python C/S(可无Client) SSH/ZMQ/RAET

一般创业公司挑选Ansible 能解决大部分问题,其简略,不需求装置额定的客户端,能够从指令行来运转,不需求运用装备文件,至于比较复杂的使命,Ansible装备经过名为Playbook 的装备文件中的 YAML语法来加以处理,Playbook还能够用模板来扩展其功用。

主动化运维三剑客:

  • saltstack
  • pubbet
  • ansible

一 Ansible概述

1.1 Ansible是什么

Ansible是一个依据Python开发的装备办理和使用布置东西,现在也在主动化办理领域大放异彩。它融合了众多老牌运维东西的优点,Pubbet和Saltstack能完成的功用,Ansible基本上都能够完成。

Ansible能批量装备、布置、办理上千台主机。比方以前需求切换到每个主机上履行的一或多 个操作,运用Ansible只需在固定的一台Ansible操控节点上去完成所有主机的操住。

Ansible是依据模块工作的,它只是供给了一-种运转框架,它本身没有完成使命的才能,真正履行操作的是Ansible的模块,比方copy模块用于拷贝文件到长途主机上,service模块用于办理服务的发动、中止、重启等

1.2 Ansible的四个组件:

  • Inventory 主机清单(主机组)
  • Modules 模块
  • Plugins 插件
  • Playbooks 剧本(相当于脚本)

自动化运维工具----Ansible  命令行模块

1.3 Ansible的特性

特性一:

Ansible其中一个比较明显的特性Agentless,即无Agent的存在(无代理端,即无客户端),它就像一般指令一样, 并非c/s软件,也只需在某个作为操控节点的主机上装置一次Ansible即可,通常它依据ssh连接来操控长途主机,长途主机上不需求装置Ansible或其它额定的服务。

运用者在运用时,在服务器终端输入指令或者playbooks,会经过预定好的规则将playbook拆解为play(一个play便是一个Linux操作),再组织成ansible能够辨认的使命,调用模块和插件,依据主机清单经过SSH将临时文件发给长途的客户端履行并返回成果,履行结束后主动删去。

特性二:

Ansible的另一个比较明显的特性是它的绝大多数模块都具有幂等性(idempotence)。所谓幂等性,指的是屡次操作或屡次履行对体系资源的影响是共同的。

比方履行 systemctl stop xxx 指令来中止服务,当发现要中止的方针服务现已处于中止状况,它什么也不会做,所以屡次中止的成果仍然是中止,不会改变成果,它是幂等的,而systemctl restart xxx对错幂等的。

Ansible的很多模块在履行时都会先判别方针节点是否要履行使命,所以,能够放心大胆地让Ansible去履行使命,重复履行某个使命绝大多数时候不会产生任何副作用。

二 Ansible 环境装置布置

试验环境:

人物 IP 装置东西
办理端 192.168.85.50 ansible
被办理端 192.168.85.60 无需装置
被办理端 192.168.85.70 无需装置

1、办理端装置ansible

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块
假如中途装置报错,就多装置几次,可能与网络有联系。

自动化运维工具----Ansible  命令行模块

2、装备主机清单,修正/etc/ansible/hosts文件。

自动化运维工具----Ansible  命令行模块

3、ansible默许运用ssh连接,所以办理前要设置免密登录。

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

三 ansible常用的指令行模块

ansible办理指令:

ansible <组名> -m <模块> -a <参数列表>
​
ansible <主机IP> -m <模块> -a <参数列表>
​
ansible <主机名> -a <参数列表>   #不加-m指定模块默许运用command
​
#选项解释
-m: 指定模块
-a: 指定指令

自动化运维工具----Ansible  命令行模块

查看ansible的模块:

ansible-doc -l  #列出所有已装置的模块,按q退出
​
ansible-doc -l | wc -l  #统计总共有多少模块
3387
​
ansible-doc -s 模块  #查看指定模块的描绘信息和操作动作

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.1 command模块

在长途主机履行指令,不支撑管道、重定向等shell的特性。

自动化运维工具----Ansible  命令行模块
常用的参数:

chdir:在长途主机上运转指令条件前进入目录
creates:判别指定文件是否存在,假如存在,不履行后边的操作
removes:判别指定文件是否存在,假如存在,履行后边的操作

自动化运维工具----Ansible  命令行模块

3.1.1 常用参数示例

(1)chdir

在长途主机上运转指令条件前进入目录。

自动化运维工具----Ansible  命令行模块

(2)creates

判别指定文件是否存在,假如存在,不履行后边的操作。

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块
自动化运维工具----Ansible  命令行模块

(3)removes

判别指定文件是否存在,假如存在,履行后边的操作

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.2 shell模块

在长途主机履行指令,相当于调用长途主机的shell进程,然后在该shell下打开一个子shell运转指令。支撑管道符号和重动向等功用。

自动化运维工具----Ansible  命令行模块

示例1:

shell模块支撑管道符号。

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例2:

shell模块支撑重定向功用。

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.3 cron模块

在长途主机定义使命计划。其中有两种状况(state) :

  • present 表明增加(能够省略)
  • absent 表明移除。

自动化运维工具----Ansible  命令行模块

示例1:

每天晚上12:30备份体系日志

ansible webservers -m cron -a 'minute=30 hour=0 job="/usr/bin/co -f /var/log/messages /root/backuper/messages-$(date +%Y/%m/%d)" name="backup syslog"'

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例2:

星期一到星期五 上午9点到下午5点期间 每隔半小时履行一次同步时间使命

ansible all -m cron -a 'minute=*/30 hour="9-17" weekday="1-5" job="/usr/sbin/ntpdate ntp.aliyum.com" name="ntp job" '

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

删去体系备份使命

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.4 user模块

办理用户的模块。

ansible-doc -s user  #查看user模块包括的操作动作

常用参数:

参数 阐明
name 用户名,必选参数。
state=present 或 absent 创立账号或者删去账号,present表明 创立,absent 表明删去。
system=yes 或 no 是否为体系账号。(默许为体系账号)
uid 用户uid。
group 用户基本组。
groups 用户附加组。
shell 默许运用的登录shell
move_home=yes 或 no 假如设置的家目录现已存在,是否将现已存在的家目录进行移动。
password 用户的暗码,主张运用加密后的字符串。
comment 用户的注释信息。
remove=yes 或 no 表明当state=absent时,是否删去用户的家目录。即删去用户时,是否一起删去家目录。yes表明删去用户的家目录。

示例1:

增加用户

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例2:

删去用户并删去家目录

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例3:

创立用户并指定UID号并增加暗码

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.5 group模块

办理用户组的模块。

留意:字符串类型的值主张加双引号,防止有空格。数字和布尔值不要加双引号

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.6 copy模块

用于将本地文件仿制到长途主机。

ansible-doc -s copy     #查看copy模块包括的操作动作

常用参数:

参数 阐明
src 指出源文件的路径(位于操控节点,即办理端),能够运用相对路径或绝对路径,支撑直接指定目录,假如源是目录则方针也要是目录。
dest 指出仿制文件的方针及位置,运用绝对路径,假如源是目录则方针也要是目录,假如方针文件现已存在会掩盖原有的内容。
mode 指出仿制时,方针文件的权限。
owner 指出仿制时,方针文件的属主。
group 指出仿制时,方针文件的属组。
content 指出仿制到方针主机上的内容,不能与src一同运用。

示例1:

把本地的hosts文件仿制到长途主机

自动化运维工具----Ansible  命令行模块

示例2:

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例3:

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.7 file模块

为长途主机创立/删去文件或目录,设置文件属性。

首要参数如下:

参数 阐明
path 指定长途服务器的路径,也能够写成”dest”,”name”
state 状况,能够将值设定为directory表明创立目录,设定为touch表明创立文件,设定为link表明创立软链接,设定为hard表明创立硬连接,设定为absent表明删去目录文件或链接
mode 文件仿制到长途并设定权限,默许file=644,directory=755
owner 文件仿制到长途并设定属主,默许为root
group 文件仿制到长途并设定属组,默许为root
recurese 递归修正
src 指的是方针主机上的源文件。与copy模块不同。

示例1:修正文件的属主、属组、权限等

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例2:创立和删去文件、目录

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例3:创立软链接文件

自动化运维工具----Ansible  命令行模块

3.8 hostname模块

用于办理长途主机上的主机名。

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.9 ping模块

测验长途主机的连通性。

自动化运维工具----Ansible  命令行模块

3.10 yum模块

在长途主机上装置与卸载软件包, 需求被办理端装备好yum源。

首要的参数如下:

参数 阐明
name 指定装置软件包名或软件包URL
state 指定yum对应的方法,present(默许)、installed表明装置、latest表明装置最新版本软件包;absent、removed表明卸载。支撑多程序一同装置,用逗号离隔。
enablerepo 允许从哪些库房获取软件
disablerepo 制止从哪些库房获取软件
exclude 扫除某些软件包,例如kernel
download_only 仅下载软件包,不装置
disable_gpg_check 不进行gpg检测
update_cache 能够在装置包的一起更新yum缓存

示例1:装置httpd

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

示例:卸载httpd

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.11 service/systemd 模块

用于办理长途主机上的服务的运转状况。

首要参数如下:

参数 阐明
name 指定需求操控的服务称号
state 指定服务状况,其值能够为stopped、started、reloaded、restarted、status
enabled 指定服务是否为开机发动,yes为发动,no为不发动
daemon_reload yes:重启systemd服务,让unit文件收效

示例:

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

3.12 script 模块

完成长途批量运转本地的shell脚本。

留意:script模块不具有幂等性。所以主张用剧本来履行。

自动化运维工具----Ansible  命令行模块
自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

留意:script模块不具有幂等性。

自动化运维工具----Ansible  命令行模块

3.13 setup 模块

facts组件是用来搜集被办理节点信息的,运用setup 模块能够获取这些信息。

自动化运维工具----Ansible  命令行模块

自动化运维工具----Ansible  命令行模块

总结

Ansible是什么?

  • 主动化运维东西
  • 能够完成批量办理多台(成百上千)主机,使用级别的跨主机编排东西

Ansible 特色:

  • 无agent的存在,不需求在被操控节点上装置客户端使用
  • 经过SSH协议与被操控节点通讯的
  • 依据模块工作的,经过模块能够完成在被操控节点上履行指令操作
  • 很多模块具有幂等性,完成:假如屡次操作的状况没有发生改变,是不会重复履行的

你用过哪些ansible模块

履行指令模块:

command    shell   copy   user  scrip
yum    service  group  ping   setup  hostname  cron 

指令

ansible  组名  -m 模块名  -a '模块参数'
              -m  file -a 'path=文件路径  mode  =755  owner=      state=file|directory|touch|link  src=  '
              -m copy -a 'src=  dest= mode=  owner= group'