没有合适的资源?快使用搜索试试~ 我知道了~
本文试图找到类似Puppet、Chef、Ansible这样自动化配置管理工具的共性,以不至于迷失在杂乱的尘世中。总会有各种人为各种目的造概念,来让世界更复杂。本文同样适用于没有运维经验的人。因为我就是一个没有运维经验的人。欢迎斧正。本人接触自动化运维的时间比较晚,也就一年前才知道Puppet及自动化运维(只限于知道),而Chef、Ansible就更晚了。然而在学习它们之前,我对运维要做哪些事情并没有概念。这就对我学习Puppet,Chef和Ansible造成的障碍。因为不知道这三个工具在运维领域的位置,解决运维过程中的哪些问题。我对这三个工具的最初印象就是有了它们,不用我手工的SSH上服务器,
资源推荐
资源详情
资源评论


格式:zip 资源大小:26.9KB

格式:zip 资源大小:17.5KB

























Puppet,,Chef,,Ansible的共性的共性
本文试图找到类似Puppet、Chef、Ansible这样自动化配置管理工具的共性,以不至于迷失在杂乱的尘世中。总会有各种人为
各种目的造概念,来让世界更复杂。
本文同样适用于没有运维经验的人。因为我就是一个没有运维经验的人。欢迎斧正。
与这仨之间的历史
本人接触自动化运维的时间比较晚,也就一年前才知道Puppet及自动化运维(只限于知道),而Chef、Ansible就更晚了。然
而在学习它们之前,我对运维要做哪些事情并没有概念。这就对我学习Puppet,Chef和Ansible造成的障碍。因为不知道这三
个工具在运维领域的位置,解决运维过程中的哪些问题。我对这三个工具的最初印象就是有了它们,不用我手工的SSH上服
务器,然后一条条命令去执行安装软件,不用SCP war包上服务器等,对服务器的操作都可以自动化了。
这个最初印象也就是我跟它们的历史。为什么要说这些呢?就是因为这个最初印象,让我觉得它们是有共性。所谓共性就是存
在一些共通的概念或原理之类的东西,掌握这些“东西”,我就可以站在一个更高的高度去思考。Puppet, Chef, Ansible都是工
具,对于工具来说,共性指的是它们共同要解决的问题。
但是当我翻了不少文章后依然没有结果。所以,我决定自己去找它们的共性,并记录下来。
自制一个自动化运维工具
但是要从多个相似的东西中找到共性,似乎需要同时很熟悉它们。但是我没有那么多时间。所以,我选择了另一种方法:在大
脑中预想自己去实现一套自动化运维工具。但问题是,我都不知道“自动化运维工具要实现哪些功能。
那我就先把目标降低一些,把问题简化一下:将我最初的“印象”实现自动化了。我能想到的就是写一个bash脚本:
ssh ....
apt-get install -y java
apt-get -y nginx
scp ..
好,现在将问题难度加大:对多台服务器进行同样的操作。我能到想就是将所有的服务器的IP放在一个数组里,然后用for循
环执行。问题来了,如果我对服务器已经执行了一次命令时可能会失败,我再想执行第二次怎么办呢?这时,我们可以在
bash脚本里加上if语句,如果安装了java就不安装第二次了。
显然现实中还会有很多问题,如:
反向配置问题,这时,我们应该另写一个bash脚本来解决这个反向的问题?如果采用这种方案,我们bash脚本数量上升到一
定程度,如何管理这些脚本及它们之间的关系,这个方案带来的新的复杂性将会成为我们的新问题;
服务器上操作系统的兼容性问题:不同的操作系统,我们的bash命令会不同;
软件的版本升级或降级问题等等。
面对这些问题,我们是可以每次都用bash解决,但是这样始终不是个办法。因为,bash对于建立一个自动化运维工具过于底
层。说到这句话,你应该很容易就想到设计一种DSL。到这个点,我觉得我们的方向已经明朗。Puppet, Chef和Ansible都分别
采用不同的DSL。而这种DSL是需要编译成服务器可执行的东西的。什么东西是可执行的?目前,我们假设这个东西是bash
脚本。
但是这个DSL是放在哪里编译呢?放在受控机器端,还是主控机器上?所以,我认为所有的自动化运维工具都会遇到这个问
题。什么是受控机器与主控机器?你就理解成一台机器只发命令,另一台机器只执行命令。
我们刚刚谈的是设计DSL。但是,要设计一个完整的自动化运维工具,我们最先应该考虑是主控机器如何与受控机器通信。这
个问题让我很长时间感到很无力,因为无从下手。后来醒悟,原来你不能单独考虑这个问题,通信方式还与你设计的DSL及编
译DSL的方式有关。同时,受控机器的执行结果这个问题,也影响着我们设计DSL。
上面我们似乎忘记了一个事实:自动化运维工具应对的往往不是一台机器,而是很多台机器。当面对多台机器时,就会产生一
个新的问题:如何组织它们?因为不同的机器的职责不同,所对应的配置也就不同。
我想我们已经知道自动化运维工具都要解决的问题了:
1. 如何与受控机器通信
2. 如何组织成百上千台机器
3. DSL的设计与编译

4. 如何得到执行结果
我不确定我们的思路与Puppet,Chef和Ansible的作者一样。也不一定完全正确。但是至少,我们大概知道自动化运维工具要
解决哪些问题了。而它们是不是自动化运维工具的共性?我不确定。
但是没有关系,我们假设它们就是所有配置管理工具都要解决的问题,它们的共性,接下来我们来看看它们分别是怎么解决这
些问题的。
这仨的背景
在进入学习之前,我们先看看它们的背景:
Puppet
如何与受控机器通信
Puppet的主控机器(Server)称为Puppet master,受控机器(client)称为Puppet agent。它们使用HTTPS进行通信。在安装
puppet之前,需要分别在主控机器和受控上设置的hostname。
因为是C/S架构的,意味着你需要在主控机器上安装Puppet master,(安装的过程或翻阅其它教程的时候,请注意教程所使
用的Puppet的版本,Puppet版本之间是有差异的)我们以Ubuntu为例:
sudo apt-get install -y puppetmaster
在受控机器上安装Puppet agent:
sudo apt-get install -y puppet
安装完成后,受控机器需要设置在/etc/puppet/puppet.conf文件的[main]节点下加入server=<master’s hostname>,同时运行
sudo puppet agent —test向主控机器申请认证。主控机器执行sudo puppet cert sign <agent’s hostname>认证。
在生产环境并不一定采取这样的手工认证。
DSL的设计与编译1
Puppet的DSL称为Manifest ,以.pp为文件扩展名。像其它编程语言一样,它也有一个程序的入口,它默认放
在:/etc/puppet/manifests/site.pp :
#vim /etc/puppet/manifests/site.pp
剩余10页未读,继续阅读
资源评论


weixin_38653385
- 粉丝: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 计算机二级习题-计算机二级资源
- 深度学习导论课手写数字识别作业的 MATLAB 卷积神经网络实现代码
- 智能电子产品设计与制作单片机技术应用项目教程.ppt
- 《移动电子商务》课程标准.doc
- matlab的滤波器的设计与仿真.doc
- WeBlog-毕业设计资源
- 基于PLC的电梯控制系统方案设计书71333.doc
- PLC自动化生产线毕业设计李辉煌.doc
- 初中英语教师课堂教学设计与学生深度学习结合分析.docx
- 大数据背景下计算机网络信息安全问题及措施.docx
- 奇妙的国际互联网.doc
- 联想ThinkCloud-Center云计算管理平台解决方案.pdf
- 软件工程课程设计基于UML医院患者监护系统的分析与设计.doc
- 项目管理办公室(PMO):企业与组织“做对的事”和“把事情做对”的关键.docx
- VB企业人事管理论文.doc
- 语音降噪LMS算法.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
