自动化运维工具——ansible

ansible介绍

ansible——“Ansible is Simple IT Automation”,它的目标:自动化部署APP,自动化管理配置项,自动化的持续交付,自动化的(aws)云服务管理。

Ansible 平台可实现多节点的软件部署,执
行特定任务并进行配置管理。Ansible提供一个统一的界面来协调所有的 IT 自动化功能
,部署更快。受管理的节点无需安装额外的远程控制软件,由平台通过 SSH(Secure SHell)对其进行管理,因此十分方便。其模块支持 JSON 等标准输出格式,可采用任何编程语言重写。Ansible 可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现 IT 任务
的自动化执行。

ansible优缺点

优点:

轻量级,不需要在客户端安装agent,更新时,只需要在操作及上进行一次更新即可,批量任务可以写成脚本,而且不用分发到远程就可以执行

使用python编写,维护简单

支持sudo

缺点:

对于成千上万台的操作,不清楚性能,效率如何

ansible架构

在这里插入图片描述
ansible core: 自身核心模块
host nivevntory: 主机库,定义可控的主机列表
connection plugins :连接插件,默认是ssh协议连接
modules:core modules (自带模块)、custom modules (自定义模块)
palybooks:剧本,按照设定的顺序执行完成安排的任务

ansible工作原理

在这里插入图片描述
1、管理端支持 local 、ssh、zeromq 三种方式连接被管理端,默认使用基于 ssh 的连接

2、可以按应用类型等方式进行 Host Inventory(主机群)分类,管理节点通过各类模块实现
相应的操作---单个模块,单条命令的批量执行,我们可以称之为 ad-hoc;

3、管理节点可以通过 playbooks 实现多个 task 的集合实现一类功能,如 web 服务的安装部署、数据库服务器的批量备份等。playbooks 我们可以简单的理解为,系统通过组合多条ad-hoc 操作的配置文件 。Ansible 默认是通过 SSH 通道来管理的,也就是它所说的免客户端方式管理, 它底层是通过paramiko (基于纯python实现的ssh协议库)来实现的。

ansible执行过程

在这里插入图片描述

ansible的YUM安装

由于本人机器直接安装epel 失败,所以切换epe源

 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

1、安装epel

yum  install  epel-release -y

2、查看

ll /etc/yum.repos.d/epel* 

在这里插入图片描述
3、安装ansible

yum   install   ansible  -y

安装成功

ansible七个命令及常用参数

常用的:ansible和ansible-playbook

1、ansible

ansible [options]
ansible 是指令核心部分,其主要用于执行 ad-hoc 命令,即单条命令。默认后面需要跟
主机和选项部分,默认不指定模块时,使用的是 command 模块。

常用参数:

-a ‘Arguments’, --args=‘Arguments’ 命令行参数 8
-m NAME, --module-name=NAME 执行模块的名字,默认使用 command 模块,所以如果 是只执行单一命令可以不用 -m 参数
-i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts. -u Username, --user=Username 执行用户,使用这个远程用户名而不是当前用户
-U --sud-user=SUDO_User sudo 到哪个用户,默认为 root
-k --ask-pass 登录密码,提示输入 SSH 密码而不是假设基于密钥的验证
-K --ask-sudo-pass 提示密码使用 sudo
-s --sudo sudo 运行
-S --su 用 su 命令
-s --snippet 指定模块显示剧本片段
-f --forks=NUM 并行任务数。NUM 被指定为一个整数,默认是 5。 #ansible testhosts -a “/sbin/reboot” -f 10 重启 testhosts 组的所有机器,每次重启 10 台
–private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
-v --verbose 详细信息 all 针对 hosts 定义的所有主机执行
-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为 /usr/share/ansible/
–list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文 件
-o --one-line 压缩输出,摘要输出.尝试一切都在一行上输出。
-t Directory, --tree=Directory 将内容保存在该输出目录,结果保存在一个文件中在每台主机 上。
-B 后台运行超时时间
-P 调查后台程序时间
-T Seconds, --timeout=Seconds 时间,单位秒 s
-P NUM, --poll=NUM 调查背景工作每隔数秒。需要- b
-c Connection, --connection=Connection 连接类型使用。可能的选项是 paramiko(SSH),SSH 和地方。当地主要是用于 crontab 或启动。
–tags=TAGS 只执行指定标签的任务 例子:ansible-playbook test.yml --tags=copy 只执 行标签为 copy 的那个任务
–list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文 件
–list-tasks 列出所有将被执行的任务 9
-C, --check 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生 的变化
–syntax-check 执行语法检查的剧本,但不执行它
-l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.0.15 只对这个 ip 执行
–skip-tags=SKIP_TAGS 只运行戏剧和任务不匹配这些值的标签 --skip-tags=copy_start
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 额外的变量设置为键=值或 YAML / JSON

2、ansible-doc

查看模块信息,常用参数-l 和 -s

-l, --list List available modules
-s, --snippet Show playbook snippet for specified module(s)

//列出所有已安装的模块
# ansible-doc -l
//查看具体某模块的用法,这里如查看 command 模块
# ansible-doc -s command

3、ansible-galaxy

从https://galaxy.ansible.com/站点下载第三方扩展模块,类似于 centos 下的 yum、python 下的 pip 或 easy_install

ansible-galaxy install aeriscloud.docker

4、ansible-lint

对paybook的语法进行检查的工具

ansible-lint playbook.yml

5、ansible-paybook

读取playbook文件后,执行相应的动作

6、ansible-pull

其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高 的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行 Anisble,比如在启动 之后安装。

7、ansible-vault

ansible-vault 主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault 可以帮你加密/解密这个配置文件,属高级用法。主要对于 playbooks 里比如涉及到配置密码或其 他变量时,可以通过该指令加密,这样我们通过cat 看到的会是一个密码串类的文件,编辑 的时候需要输入事先设定的密码才能打开。这种 playbook 文件在执行时,需要加上–ask-vault-pass 参数,同样需要输入密码后才能正常执行。

hosts and groups(主机和组)

1、主机和组

[webservers]
web1.361way.com
web2.361way.com

【】中代表组名,主机(hosts)可使用域名、主机名、IP地址;当然使用前两者时,也
需要主机能反解析到相应的 IP 地址,一般此类配置中多使用 IP 地址

2、端口和别名
如果修改 ansible 使用 openssh 进行 ssh 连接时将会使用:

192.168.0.10:5309

假如你想要为某些静态 IP 设置一些别名,类似于 SaltStack 中 minion 配置文件中 id
的参数配置。你可以这样做:

jumper ansible_ssh_port = 5555 ansible_ssh_host = 192.168.1.50

上面的 jumper 别名就指代了 IP 为 192.168.1.50,ssh 连接端口为 5555 的主机。

3、 指定主机范围

[webservers]
www[01:50].361way.com
[databases]
db-[a:f].91it.org

上面指定了从 web1 到 web50,webservers 组共计 50 台主机;databases 组有 db-a
到 db-f 共 6 台主机。

4、 使用主机变量

以下是 Hosts 部分中经常用到的变量部分

ansible_ssh_host # 要连接的主机名
ansible_ssh_port # 端口号默认是 22
ansible_ssh_user # ssh 连接时默认使用的用户名
ansible_ssh_pass # ssh 连接时的密码
ansible_sudo_pass # 使用 sudo 连接用户是的密码
ansible_ssh_private_key_file # 秘钥文件如果不想使用 ssh-agent 管理时可以使用此选
项
ansible_shell_type # shell 的类型默认 sh
ansible_connection # SSH 连接的类型: local , ssh , paramiko 在 ansible 1.2 之前
默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提)
ansible_python _ interpreter #用来指定 python 解释器的路径,同样可以指定 ruby 、
perl 的路径

5、 组内变量

变量也可以通过组名,应用到组内的所有成员:

[test]
host1
host2
[test:vars]
ntp_server=ntp.361way.com
proxy=proxy.361way.com

上面 test 组中包含两台主机,通过对 test 组指定 vars 变量,相应的 host1 和 host2
相当于相应的指定了 ntp_server 和 proxy 变量参数值 。

6、 组的包含与组内变量

[hangzhou]
13
host1
host2
[jiaxing]
host3
host4
[zhejiang:children]
hangzhou
jiaxing
[zhejiang:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2
[china:children]
zhejiang
henan
shandong
hebei

如上面的示例中,我指定了杭州组我有 host1、hosts2;嘉兴组我有 host3、host4
主机;我又指定了一个组浙江组,同时包含杭州和嘉兴;同时为该组内的所有主机指定
了四个 vars 变量。后面我又设定了一个组中国组,包含浙江、河南、山东、河北。

patterns(主机与组正则匹配)

`ansible webservers -m service -a "name=httpd state=restarted"` 

这里是对 webservers 组或主机重启 httpd 服务 ,其中 webservers 就是 Pattern 部分。

用法:

1、 表示所有的主机可以使用 all 或 *

192.168.1.*

2、 通配符与逻辑或

one.361way:two.361way.com

3、逻辑非与逻辑 and

webserver:!phoenix   !非
webservers:&staging    &与

4、高级用法

正则表达式

ansible简单使用

1、定义测试hosts文件

cd /etc/ansible/
vim  hosts

在这里插入图片描述

2、

ansible   web   -m   ping   -k

在这里插入图片描述
此处的错误可以通过以下方式

`ssh   192.168.76.156`

在这里插入图片描述
再次

   ansible   web   -m   ping   -k

在这里插入图片描述
3、测试所有‘

 ansible all -m ping -k

在这里插入图片描述
解决

在这里插入图片描述

 ansible all -m ping -k

在这里插入图片描述

ansible常用的模块

根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、
资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统
模块、单元模块、web 设施模块、windows 模块

1、ping模块

测试主机是否是通的

2、setup模块

只要用于获取主机信息,在 playbooks 里经常会用到的一个参数 gather_facts
就与该模块相关。setup 模块下经常使用的一个参数是 filter 参数

3、file模块

主要用于远程主机上的文件操作,包括以下选项:
在这里插入图片描述
4、copy模块

复制文件到远程主机,copy模块包含以下选项:

在这里插入图片描述
5、command模块

通过-a 跟上要执行的命令可以直接执行,如果命令中带有以下字符部分则执行不成功

“ so variables like $HOME and operations like “<”, “>”, “|”, and “&”
will not work (use the shell module if you need these features).”

在这里插入图片描述
6、shell模块

用法和command一样,只不过通过/bin/sh执行,shell可执行任何命令,就像在本机一样

command和shell模块的区别:
在这里插入图片描述

7、raw模块

用法和 shell 模块一样 ,其也可以执行任意命令,就像在本机执行一样

8、script模块

将管理端的 shell 在被管理主机上执行,其原理是先将 shell 复制到远程主机,再在远
程主机上执行,原理类似于 raw 模块

注:raw 模块和 comand、shell 模块不同的是其没有 chdir、creates、removes 参数

9、service模块

用于管理服务,该模块包含以下选项:

在这里插入图片描述
10、cron模块

用于管理计划任务

在这里插入图片描述
11、filesystem模块

在块设备上创建文件系统
在这里插入图片描述
12、yum 模块

使用包管理器管理软件包,其选项有:

在这里插入图片描述
13、user与group模块

user模块请求的是useradd,usermod,userdel三个指令,group模块请求的是groupadd,groupdel,groupmod三个指令

14、synchronize模块

使用rsync同步文件,其参数如下:
在这里插入图片描述
在这里插入图片描述
15、mount模块

配置挂载点

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动化运维工具——ansible是一款开源的IT自动化工具,广泛应用于软件部署、配置管理和任务协同等领域。它的最大特点是简单易用、功能强大且跨平台。 首先,ansible具有简单易用的特点。它使用简单的YAML语言作为配置文件,无需编写复杂的脚本。用户只需要简单地定义主机和操作即可完成任务的执行。这使得即便是非开发人员,也能轻松上手使用ansible进行自动化管理。 其次,ansible功能强大。它支持广泛的操作系统、云平台和网络设备,并提供了丰富的模块化功能。通过在任务中使用ansible的模块,我们可以实现系统配置、软件安装、文件传输等各种常见操作。此外,ansible不仅支持并发执行任务,还能够将任务分组执行,并提供了强大的变量和条件控制功能。 再次,ansible跨平台。无论是在Linux、Unix还是Windows系统上,ansible都能够良好地运行。此外,它还支持云平台,如AWS、Azure等,以及网络设备,如Cisco、Juniper等。这使得ansible成为一个非常灵活的自动化运维工具,能够满足各种不同环境和需求的自动化管理。 最后,ansible还具有良好的社区支持。ansible拥有庞大的用户社区和活跃的开发者社区,有大量的文档、示例和插件可供参考和使用。这使得我们在使用ansible时能够获得快速解答和支持,同时也能够从社区中学习到更多的技巧和经验。 总而言之,ansible是一款简单易用、功能强大且跨平台的自动化运维工具。它在软件部署、配置管理和任务协同等方面具有广泛的应用,并且得到了良好的社区支持。无论是企业还是个人,都可以通过ansible来提高工作效率和自动化管理水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值