常识扩大
机器办理
机器办理的东西挑选的考量能够包括以下三个方面:
- 是否简略,是否需求每台机器都布置Agent(客户端)
- 语言的挑选(Puppet/Chef vs Ansible/SaltStack)开源技术,不看官网不足以娴熟,不明白源码不足以精通:Puppet、Chef依据Ruby开发的,Ansible、SaltStack依据Python开发的。
- 速度的挑选(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 剧本(相当于脚本)
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
假如中途装置报错,就多装置几次,可能与网络有联系。
2、装备主机清单,修正/etc/ansible/hosts文件。
3、ansible默许运用ssh连接,所以办理前要设置免密登录。
三 ansible常用的指令行模块
ansible办理指令:
ansible <组名> -m <模块> -a <参数列表>
ansible <主机IP> -m <模块> -a <参数列表>
ansible <主机名> -a <参数列表> #不加-m指定模块默许运用command
#选项解释
-m: 指定模块
-a: 指定指令
查看ansible的模块:
ansible-doc -l #列出所有已装置的模块,按q退出
ansible-doc -l | wc -l #统计总共有多少模块
3387
ansible-doc -s 模块 #查看指定模块的描绘信息和操作动作
3.1 command模块
在长途主机履行指令,不支撑管道、重定向等shell的特性。
常用的参数:
chdir:在长途主机上运转指令条件前进入目录
creates:判别指定文件是否存在,假如存在,不履行后边的操作
removes:判别指定文件是否存在,假如存在,履行后边的操作
3.1.1 常用参数示例
(1)chdir
在长途主机上运转指令条件前进入目录。
(2)creates
判别指定文件是否存在,假如存在,不履行后边的操作。
(3)removes
判别指定文件是否存在,假如存在,履行后边的操作
3.2 shell模块
在长途主机履行指令,相当于调用长途主机的shell进程,然后在该shell下打开一个子shell运转指令。支撑管道符号和重动向等功用。
示例1:
shell模块支撑管道符号。
示例2:
shell模块支撑重定向功用。
3.3 cron模块
在长途主机定义使命计划。其中有两种状况(state) :
- present 表明增加(能够省略)
- absent 表明移除。
示例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"'
示例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" '
删去体系备份使命
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:
增加用户
示例2:
删去用户并删去家目录
示例3:
创立用户并指定UID号并增加暗码
3.5 group模块
办理用户组的模块。
留意:字符串类型的值主张加双引号,防止有空格。数字和布尔值不要加双引号
3.6 copy模块
用于将本地文件仿制到长途主机。
ansible-doc -s copy #查看copy模块包括的操作动作
常用参数:
参数 | 阐明 |
---|---|
src | 指出源文件的路径(位于操控节点,即办理端),能够运用相对路径或绝对路径,支撑直接指定目录,假如源是目录则方针也要是目录。 |
dest | 指出仿制文件的方针及位置,运用绝对路径,假如源是目录则方针也要是目录,假如方针文件现已存在会掩盖原有的内容。 |
mode | 指出仿制时,方针文件的权限。 |
owner | 指出仿制时,方针文件的属主。 |
group | 指出仿制时,方针文件的属组。 |
content | 指出仿制到方针主机上的内容,不能与src一同运用。 |
示例1:
把本地的hosts文件仿制到长途主机
示例2:
示例3:
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:修正文件的属主、属组、权限等
示例2:创立和删去文件、目录
示例3:创立软链接文件
3.8 hostname模块
用于办理长途主机上的主机名。
3.9 ping模块
测验长途主机的连通性。
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
示例:卸载httpd
3.11 service/systemd 模块
用于办理长途主机上的服务的运转状况。
首要参数如下:
参数 | 阐明 |
---|---|
name | 指定需求操控的服务称号 |
state | 指定服务状况,其值能够为stopped、started、reloaded、restarted、status |
enabled | 指定服务是否为开机发动,yes为发动,no为不发动 |
daemon_reload | yes:重启systemd服务,让unit文件收效 |
示例:
3.12 script 模块
完成长途批量运转本地的shell脚本。
留意:script模块不具有幂等性。所以主张用剧本来履行。
留意:script模块不具有幂等性。
3.13 setup 模块
facts组件是用来搜集被办理节点信息的,运用setup 模块能够获取这些信息。
总结
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'