编辑推荐: |
本文主要介绍了Ansible简单使用的一些过程以及Ansible的安装与配置,希望对您的学习有所帮助。
本文来自于csdn,由火龙果软件Alice编辑、推荐。 |
|
Ansible介绍:
ansible是一个轻量级的运维自动化配置管理和配置工具,基于Python研发。集合了众多老牌运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible原理:
这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置好的任务,服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责。因为基于SSH,所以不需要像Salt这些同类工具一样需要在每台机器上安装agent,因此添加机器几乎不需要进行额外的操作。仅需在管理工作站上安装ansible程序配置被管控主机的IP信息,被管控的主机无客户端。ansible应用程序存在于epel(第三方社区)源,依赖于很多python组件。ansible基于
paramiko 开发的,它是一个纯Python实现的ssh协议库。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
Ansible架构及组件:
Host Inventory
定义ansible管理的主机,可以进行分组管理。
Core Modules
Ansible核心模块,ansible中模块就是用来指定对远程主机具体的操作,比如执行命令模块command、创建文件模块file等(ansible自带的模块)。
Custom Modules
自定义模块,如果核心模块不足以完成某种功能就可以使用任何语言自定义模块。
Connection Plugins
连接插件是Ansible用来连接被管理端的一种方式,比如客户端运行了SSH服务,Ansible利用SSH服务跟客户端进行通信,Ansible是通过Python编写的,而Python有一个模块paramiko支持并行连接SSH。Ansible事实上就是使用paramiko进行连接被管理端。但是它还支持其他的连接方法需要插件(如zeroMQ就是C/S模式工作)。
Plugins
第三方插件支持,如email、logging模块,只要有Python编写能力就可以自行编写插件。
Playbooks
剧本或编辑是Ansible的任务配置文件、将多个任务定义在剧本中由Ansible自动执行,Playbooks最大的好处就是支持幂等,也就是说相同的任务不管执行多少次其结果是不变的,带来的好处也就是持续可维护性。
选择Ansible的原因【优点】:
1.基于SSH,无客户端,部署便捷。
2.完全基于python开发,python门槛较低,方便对Ansible二次开发
3.Ansible内含丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能的需求。
4.Ansible无中心节点,简单的复制操作即可完成中心节点迁移。
Ansible安装与配置:
管理主机需要安装python2.6/2.7及以上版本。
以及ansible,在rhel系统中,python是被集成自带的,所以这里我只是安装了Ansible。下面是安装以及解决依赖性所用到的包。
安装完成后可以执行:ansible --version来查看其版本
为了管理的方便,以及权限的安全,在使用ansible时,建议在普通用户下去使用。所以下面我将建立普通用户devops,来进行ansible的使用。同时为了ssh连接时的免密方便,我在server2与server3上同样建立了devops用户,并改了密码。
useradd devops
#建立用户
passwd devops #改密码
su - devops #切换到普通用户 #默认进入其家目录
mkdir ansible #建立新的目录,将在该目录下写ansible文件
cd ansible #进入刚建立的目录
vim ansible.cfg #写主配置文件
vim inventory #解析文件 |
普通用户在对一些root权限的目录进行操作时,是不能直接操作的,所以这里我再赋予devops免密root权限
!!所有的主机上都要赋予,因为现在我们都是在普通用户下。这也是将所有用户建立成一样的用户名的好处,方便管理。
可以在配置文件中提前做好权限工作,在主配置文件中写入-b参数的功能
1SSH免密
ssh-keygen 密钥生成
ssh-copy-id server2
#将公钥发送给server2
#默认发送给server2的普通用户,我们只建立了devops,则会发给idevops。
#这里需要我们输入server2的devops用户密码,所以上面一定要改密码
ssh-copy-id server3 |
在免密以及上面的inventory文件和主配置文件完成后,就可以简单测试ansible的通信是否正常了。
ansible all -m
ping #会ping所有在inventory文 件中写入的主机 #-m指定模块【ping模块】 |
这里可以看一下devops用户对ansible现在的影响:-u指定用户,因为密钥是在devops用户下,所以连接是只有devops用户免密
简单的Ansible指令
Ansible提供了两种方式去完成任务,一是ad-hoc命令,二是playbook。
ad-hoc注重于用简单的指令完成简单的操作。
playbook则适合解决复杂或者需要固化的人物,类似于脚本。
Ansible-doc的说明工具:ansible-doc
ansible-doc -l
#显示所有可用模块
ansible-doc yum #获取yum模块的使用帮助
ansible-doc copy #获取copy模块的帮助
ansible test -m copy -a "src=/etc/passwd
dest=/tmp/passwd"
# 默认会对inventory文件中的第一个主机执行操作 |
ansible test
-m command -a "ls /tmp"
# 使用command模块,可以直接执行shell命令
ansible test -a "ls /tmp"
# 默认-a后接要执行的动作 |
!!!一定要注意权限问题,如果上面没有给devops这个普通用户sudo免密的话,在执行-b操作时,可能会出错。
细心的人一定注意到了,上面执行过程中出现了三种颜色,红色代表错误;绿色代表正常,没有改变;黄棕色代表正常,但是有变化。
以上就是Ansible简单使用的一些过程了。 |