暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Centos7中ansible的简易安装和使用

小左的运维之路 2021-07-12
2651

说在前面的话:这个号沉了很久,一直都没有更新,自己也想更新,奈何水平不够,不敢乱写,最近正好在搞ansible的事,趁着这个机会,把ansible从搭建都使用的过程记录下来,方便以后有需要的时候可以拿来即用,也可以给各位看官参考参考。

一、搭建环境

环境:三台centos7 机器。机器名分别为centos7-2(ip:192.168.128.138)Centos7-3(ip:192.168.128.143)ansible-master(ip:192.168.128.141),环境中确保这三台机器能互相通信。

安装过程:

安装ansible的方法有几种,分别是yumpiprpm包安装等,我使用的是rpm安装,过程如下(我的ansible-master服务器能联网,切如下操作都是使用root账号操作):

1. 安装Yumdownloader工具:

# yum install yum-utils

2. 创建一个存放安装包的目录

# mkdir root/packages

3. 更新ansible的下载源

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

4. 下载安装包

# yumdownloader --resolve --destdir  /root/packages ansible

这里是将ansible的安装包下载到/root/packages,如下:

 

5. 使用rpm安装ansible

4步已经将ansible的安装包下载完毕,现在进入到/root/packages目录,然后使用rpm命令安装:# rpm -ivh ansible-2.9.9-1.el7.noarch.rpm

 

由图中可以看出ansible已经安装成功,并且版本为2.9.9。其配置文件存放目录为/etc/ansible:

ansible.cfg文件为ansible的主配置文件,对ansible的设置可以在里面定义。hosts文件主要定义管理主机,方便个人对需要管理的机器进行分组。roles文件夹我目前还未使用到,他的功能需要你们自己去解锁。

说明:如果个人的Linux环境是不能联网的,那么可以在Windows下载好所需的ansible包和依赖包,然后再传到Linux环境中,最后使用rpm安装,如果安装过程中发现缺少依赖库,则继续下载,直到满足为止。上面我演示的安装方法就已经将依赖问题解决了,比较方便,但是对环境的要求是可以联网。

二、使用

在使用ansible之前,需要先了解一下ansible的几个文件。

1. ansible.cfg

这个文件我个人仅将host_key_checking = Falseremote_user = root这两个选项打开。

Ansible使用的是ssh远程登录模式去操作远端服务器(被控服务器),在服务器使用ssh登录的时候一般都会配置ssh免密登录,这是为了方便操作,但是在大型集群当中,如果home目录不一致的话,不合适做ssh免密登录这个操作,那么把host_key_checking = False这个选项打开就有助于我们使用ansible进行操作,而不需要事先对每台服务器都做ssh免密登录。如果不打开的话,直接使用ansible则不能成功。remote_user = root这个选项设置的是远端服务器执行操作/命令的默认账户。我们是使用ansible对多台服务器进行相同的操作管理,当使用ansible对远端服务器发出指令的时候,远端服务器则使用remote_user = root这里设置的账户去执行我们的动作,这个默认账户需要根据自己的生产环境需求去改

还有其他的配置选项说明我放在了文档末尾处的附录,有需要的可以看看。

2. hosts文件

host文件记录着我们环境中的远端服务器列表。我们可以对我们管理的服务器进行分类,然后在使用ansible操作的时候选择我们要操作的服务器组,例如我目前环境中有的三台服务器,其中两台的被控服务器,我命名为test-srv组,那么host文件应该这样写:

后面的这个就表示我把我的两台服务器加到了test-srv组里,当我要对这个组进行操作的时候,例如检查和这两台服务器的连通性,可以这样操作:

# ansible test-srv -m ping -k

test-srv就是我要操作的服务器组,-m表示使用哪个模块,这里我们使用的是ping这个模块,-k表示密码key,按回车后输入密码即可,结果如下:

 

Ping模块正确的相应是返回pong,在上图中可以看到,然后这里默认使用的执行账户就是remote_user里设置的账户,输入的密码也是该账户的密码。

3. 模块

上面说到一个ping模块,那么ansible有哪些模块,已经各个模块的功能是什么呢?

这个网站总结了ansible中各个网站的功能,我就不列出来了:https://blog.csdn.net/Jack_Yangyj/article/details/86494219

然后我要说的是在没有文档的时候,如何查看某个模块的功能。使用ping这个模块来说,执行ansible-doc ping就可以查看ping模块相关信息。这个操作跟Linux命令中的man帮助一样,里面包含了模块的各个参数及含义。

在我目前使用到的模块有command、shell、user等,其中shell是比较常用的。

command是ansible的缺省模块,即当我们执行ansible时,没有使用-m指定模块,这默认为command模块。例如我想在所有的远端服务器执行ls root命令,可以这样操作:ansible all -a ls /root-k,结果如下:

 

command模块虽然可以执行命令,但是限制比较大,不支持管道和重定向符号('<','>','|',';',&'),例如执行echo qwe>>/tmp/test.txt这个操作,可以看到他返回的结果直接就是qwe>>/tmp/test.txt

 

正常的会在远端服务器生成一个/tmp/test.txt文件,并且文件内容为qwe(上述操作使用了ansible的缺省模块为command这个特定,执行命令的使用不用-m command)。这时候使用shell模块可以很好的解决这个问题:

 

到远端服务器看结果:

 

这个就是commandshell的一些区别,具体其他区别需要你们自己去体验了。然后还有一些像userscript等常用模块我也不长篇说明了,自己可以使用ansible-doc  module来查看。

4. Playbook功能

上面介绍了一些基本模块功能的使用,下面说一下ansible的另一个功能,那就是playbook,playbook顾名思义就是剧本的意思。我们写好一个playbook剧本后,使用ansible-play命令去执行他,然后他就会根据我们写的剧本进行操作。这样可以将我们需要的多个动作集成到一起,避免多次执行ansible命令,减少工作量,提高效率。

如下是我写好的一个剧本test.yml,这个playbook中进行了两个操作,第一个是修改root账号的密码,第二个操作是将123456重定向到/tmp/test.txt文件中。剧本的格式要严格的遵守缩进,属于同一级别的要并列,并且不能空格键和tab键混合使用

如下这个剧本定义了我要操作的服务器组为test-srv,执行的账号是roottasks是指定我要做的操作,name是对我们的操作做注释,之后就可以调用模块进行相对应的操作,当前我使用的是shell模块进行操作。

写完playbook后,执行ansible-playbookl test.yml,然后到远端服务器验证操作是否成功。

 

结果:

 

可以看到/tmp/test.txt文件中的内容已经更新,并且我验证了root密码也是如此,说明这个playbook已经成功了。

Palybook不止能调用shell模块,其他模块也可以使用,使用方法可以查看相应的文档,这里有个ansible的中文文档网站:www.ansible.com.cn,如果有不清楚的可以再去查看ansible的官方文档。

三、总结

Ansible是一个很好的自动化管理工具,对大型的集群/服务器有很好的效果,当我们学会使用他的各种功能,能很好的提高我们的工作效率。本文就只是简单的说明了一下ansible的安装和基本操作,其更深入的使用需要各位自己摸索。本文有错误的希望大佬们能指出,我看到后加以更正。

四、附录

配置项

说明

默认值

inventory

ansible inventory文件路径

/etc/ansible/hosts

library

ansible模块文件路径

/usr/share/my_modules/

remote_tmp

ansible远程主机脚本临时存放目录

~/.ansible/tmp

local_tmp

ansible管理节点脚本临时存放目录

~/.ansible/tmp

forks

ansible执行并发数

5

poll_interval

ansible异步任务查询间隔

15

sudo_user

ansible sudo用户

root

ask_sudo_pass

运行ansible是否提示输入sudo密码

True

ask_pass

运行ansible是否提示输入密码

True

transport

ansible远程传输模式

smart

remote_port

远程主机SSH端口

22

module_lang

ansible模块运行默认语言环境

C

gathering

facts信息收集开关定义

smart

roles_path

ansible role存放路径

/etc/ansible/roles

timeout

ansible SSH连接超时时间

10

remote_user

ansible远程认证用户

root

log_path

ansible日志记录文件

/var/log/ansible.log

module_name

ansible默认执行模块

command

executable

ansible命令执行shell

/bin/sh

hash_behaviour

ansible主机变量重复处理方式

replace

private_role_vars

默认情况下,角色中的变量将在全局变量范围中可见。为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers任务可以看到角色变量

yes

vault_password_file

指定vault密码文件路径

ansible_managed

定义的一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中

Ansible managed

display_skipped_hosts

开启显示跳过的主机

True

error_on_undefined_vars

开启错误,或者没有定义的变量

False

action_plugins

ansible action插件路径

cache_plugins

ansible cache插件路径

callback_plugins

ansible callback插件路径

connection_plugins

ansible connection插件路径

lookup_plugins

ansible lookup插件路径

inventory_plugins

ansible inventory插件路径

vars_plugins

ansible vars插件路径

filter_plugins

ansible filter插件路径

terminal_plugins

ansible terminal插件路径

strategy_plugins

ansible strategy插件路径

fact_caching

定义ansible facts缓存方式

memory

fact_caching_connection

定义ansible facts缓存路径

 


文章转载自小左的运维之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论