您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
Ansible:自动化运维必须技术之一
 
作者: 张小凡
   次浏览      
 2019-11-22
 
编辑推荐:
本文主要介绍了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权限

!!所有的主机上都要赋予,因为现在我们都是在普通用户下。这也是将所有用户建立成一样的用户名的好处,方便管理。

vim /etc/sudoers

可以在配置文件中提前做好权限工作,在主配置文件中写入-b参数的功能

vim ansible.cfg

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简单使用的一些过程了。

 
   
次浏览       
相关文章

DevOps转型融入到企业文化
DevOps 能力模型、演进及案例剖析
基于 DevOps 理念的私有 PaaS 平台实践
微软开发团队的DevOps实践启示
相关文档

DevOps驱动应用运维变革与创新
运维管理规划
如何实现企业应用部署自动化
运维自动化实践之路
相关课程

自动化运维工具(基于DevOps)
互联网运维与DevOps
MySQL性能优化及运维培训
IT系统运维管理