如何安装和使用ansible,接下来是ansible的使用和配置过程。
一、ansible应用
Ansible是一个agent,作为一个管理的主机或者作为应用配置服务器来讲,通常情况下ansible是这样实行管理操作的。
1、 比如现在有一个生产环境,也就意味着我们的主机有可能在托管的机房(机房的某些服务器)或者是云端的虚拟主机之上(云端上创建的虚拟主机实例上),那么ansible假如在平常办公室平常用的电脑上,那么它能不能通过远程连接每一台主机并实现管理操作,首先这些后端主机有可能是没有公网地址的,因为要想跨越互联网对它们实现管理操作,需要先有VPN拨进来,让它变成我们内网主机的IP,这样才可以。
2、最简单的方式应该就是在这些网络中找一台主机专门来做ansible主机,ansible本身不是服务,他只是一个管理控制台(对于ansible主机来讲,他有通过ansible命令远程实现对每一个远程主机管理)当需要通过读取剧本的方式,叫playbook来对每一个主机进行管理的时候,那么它无非使用的是另一条命令,这些命令的执行是需要用户手动触发的,而不是周期性的运行在某个守护进程后台实现的,这是ansible默认的工作逻辑,所以从这个角度来讲,ansible不是守护进程,不是服务,它仅仅是一个命令,这个命令被触发时会主动连接至每一个被管理的主机,目标主机IP执行相关的管理任务,仅此而已。那么无论是命令行命令直接给出的管理或者是我们去使用ansible的playbook读取剧本去管理都是如此;即便如此,我们把它放置在生产环境的网络中,找一台主机放到生产环境中,可能会更妥当一些,毕竟,这个管理操作无论是传输文件都是通过内网网络来实现。但是如果把这台主机放到生产环境以后,管理测试环境或者dev环境应该如何呢? 如果测试环境本身也在机房中,会容易很多,但研发环境相讲可能会简单很多,也许研发人员可以自行完成配置,无需别的辅助。所以说应该知道我们的ansible主机应该是一台什么样的位于什么位置的主机,虽然我们可以放在个人笔记本上拨入的某一特定网络实现管理但是这里可能需要依赖于其他额外的技术把它转换成内网主机才可以实现这种管理。我们接下来要使用ansible,无非要具有或者是我们事先需要准备的操作是找出一台主机装上ansible,确保每一个被管理的主机纳入到ansible的 inventory,就是被管理的主机清单列表中,那么接下来就可以实现管理了,ansible去连接每一个被管理的主机时,是要通过SSH连接,那么连接的时候我们还需要输入账号密码,但是ansible每连接一次都要输入账号密码的话,对于我们来讲会比较麻烦,那怎么才可以简化呢?在ansible主机上做一个SSH的密钥,把它复制到每一个目标主机就可以了,那么能够基于主机密钥来认证,当然最好是能够认证的是目标主机上的管理员用户,如果不是管理员用户,我们还要在 每一个主机上去配置他的sudo权限 ,而每一个目标主机可能都需要执行管理操作,至少每一类角色所实行的管理操作彼此之间都不相同,我们去配置调度层,那我们安装的是nginx和keepalived,如果我们要配置的应用程序层,那我们 要配置的可能是nginx和Tomcat,而这个nginx和前端调度器的nginx的配置是不一样的,因此从这个模型上来说,我们每一个主机它的相关配置应该都有可能是独有的。它无法和其他主机共享配置,所以就使得每一个主机的相关配置我们有可能都需要单独规定,那这样一来,我们就会发现,假如有两台主机,刚好都安装了nginx,虽然nginx配置文件不同,但安装nginx和启动服务是相同的,于是,我们可不可以把这些功能复用起来呢?事实上是可以的,在我们使用ansible playbook时,还可以定义角色。
3、明白这样的逻辑之后,我们在这里会有三台主机(node1、node2、node3), 计划目标是node1、node2、node3都是被管理的主机,但是node1同时又当做ansible,这样就有多几台主机可以被操作,事实上我们可以把node1当做ansible主机,node2、3被管理主机,但是话说回来,ansible所有的主机自身就应该是被管理的,就像监控服务器自身应该被监控一样
Ansible有两个版本:ansible1.x和ansible2.x(配置和使用稍有区别)
二、部署安装
名称 | IP | 操作系统 | 用途 |
---|---|---|---|
ansible-node1 | 192.168.171.149 | centos7 | 管理端 |
node2 | 192.168.171.150 | centos7 | |
node3 | 192.168.171.151 | centos7 |
1、ansible 安装实验:
ansible安装方式有、源码、pip、yum(此实验我们用yum安装)
yum 安装:
#yum repolist 查看所支持的仓库(注:ansible默认在epel中,而不再base仓库中,如果没有需要安装)
1)下载epel源
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2)查看epel源并安装ansible
3)查看ansible版本
# ansible --version
2、ansible组成介绍
Ansible.cfg:Ansible的配置文件
Hosts:Ansible的主机清单(主机仓库)所有被放在清单中的主机都是能够被管理的主机
Roles:Ansible的角色(定义的功能模块和配置模块)
注:这些只是它的默认路径,这些都可以被重新定义的。
3、现在如果需要让ansible运行起来,需要分别连接那3台主机。
1)基于端口,用户,密码定义主机清单:#vi /etc/ansible/hosts
ansible基于ssh连接-i (inventory)参数后指定的远程主机时,也可以写端口,用户,密码。
格式:ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定 ssh 用户 ansible_ssh_pass:指定 ssh 用户登录是认证密码 ansible_sudo_pass:指明 sudo 时候的密码
注:明文密码不安全
2)基于ssh密钥来访问定义主机清单
一般来说,使用明文密码不安全,所以增加主机无密码访问。在Ansible服务端生成密钥,并且复制公钥到节点中。
# ssh-keygen 生成密钥
# ssh-copy-id [email protected]
# ssh-copy-id [email protected]
3)进行测试
我们接下来就可以把node1、2、3纳入到被管理的主机中去。在纳入之前,我们手动基于命令操作时,可以先不用急着去修改,接下来先介绍一下ansible命令的使用。
anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]
ansible object method argument
环境变量 对象 方法 调用方法需要的参数
-v,-verbose # 详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)
-i PATH, -inventory=PATH # 指定 host 文件的路径,默认是在 /etc/ansible/hosts
inventory [ˈɪnvəntri] 库存
-f NUM,-forks=NUM # NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。
-m NAME,-module-name=NAME # 指定使用的 module 名称,默认使用 command模块
-a,MODULE_ARGS #指定 module 模块的参数
-k,-ask-pass #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证
-sudo # 指定使用 sudo 获得 root 权限
-K,-ask-sudo-pass #提示输入 sudo 密码,与 -sudo 一起使用
-u USERNAME,-user=USERNAME # 指定移动端的执行用户
-C,-check #测试此命令执行会改变什么内容,不会真正的去执行
ansible-doc详细参数:
ansible-doc -l #列出所有的模块列表
ansible-doc -s 模块名 #查看指定模块的参数 -s, snippet [ˈsnɪpɪt] 片断
三、ansible命令及模块
1、ansible 的简单使用格式:
Ansible HOST-PATTERN(指明连接后管理的主机) -m MOD_NAME(调用哪个模块管理这一个主机或者某些主机) -a(命令行参数) MOD_ARGS (指定module模块的参数) -f FORKS(如果有50台主机,那么ansible一下子连接50台,可能会使得ansible的主机压力很大,指定可以连接多少个主机) -C -u USERNAME -c connction
2、ansible常用命令:
ansible-doc -l 命令查看到当前 ansible 都支持哪些模块
ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。
Ansible安装完成之后就自带很多命令,其中较常用的有7个:
命令详情可查看此链接:https://www.cnblogs.com/jie-fang/p/10293171.html
3、ansible常用模块介绍:
copy file cron group user yum service script ping command raw get_url synchronize
常用模块的命令详情以及模块介绍:https://www.cnblogs.com/yueminghai/p/8759035.html
https://blog.51cto.com/853056088/2326995?source=dra