企业中管理环境的痛点
![](https://i-blog.csdnimg.cn/blog_migrate/68463af0e3bfc0d4c9833812a0aebd3d.jpeg)
痛点1:在企业内部,部署4台服务器,每台服务器包含 JDk,Tomcat,AngularJs 等等看起来不是大问题,可以人工部署。但是,当需要部署同样的配置到100台服务器上,运维的同学该怎么办?
![](https://i-blog.csdnimg.cn/blog_migrate/839b4fa46488e08fc5625ca821a21f11.jpeg)
痛点2:设想公司需要升级某一个软件,例如 MongoDb,当升级完成之后发现有问题,需要回滚。如何做回滚?只能依次卸载新版本,安装旧版本,费时费力,效率低下。
![](https://i-blog.csdnimg.cn/blog_migrate/7e2c406ef9699928bb09ab598920c77b.jpeg)
痛点3:开发和运维最常见的对话:
运维:”哥们,你写的代码有问题,我部署之后完全不能用!”
开发:”不可能!我在本地跑得好好的,你是不是有东西没配?”
解决方法
![](https://i-blog.csdnimg.cn/blog_migrate/37193bb78c49bdba921c0184dee96aea.png)
![](https://i-blog.csdnimg.cn/blog_migrate/36e226f544d1803e43b1d02fdd2b123b.jpeg)
基础设施即代码。用代码描述基础设施,包括机器 ip,操作系统,安装的软件,第三方依赖的路径,部署包的路径。
使用同一份代码,不同的配置文件在统一的虚拟化平台创建开发环境,测试环境,部署环境。这样能够屏蔽各种环境之间的差异,实现基础设施即代码。
2
目前的开源配置管理工具
![](https://i-blog.csdnimg.cn/blog_migrate/bcac3fa9184f55b474580a9a19499f59.jpeg)
配置管理工具有两种实现方式:推送或者拉取。
基于推送的工具是 Ansible 和 Salt。基于拉取的工具有 Puppet 和 Chef。
3
Puppet 的作用以及工作原理
Puppet 能干什么?
![](https://i-blog.csdnimg.cn/blog_migrate/37193bb78c49bdba921c0184dee96aea.png)
举个例子:我想在某个几个机器上快速部署 Mysql服务器,用 Puppet 怎么实现?
1. 在 Puppet 主节点机器上安装 Puppet Mysql模块。
![](https://i-blog.csdnimg.cn/blog_migrate/a6d10fd9f14b3f3bb8eb8d08876e3d80.jpeg)
2. 在 Puppet 主节点上写site.pp配置文件,描述需要部署的 Mysql。
![](https://i-blog.csdnimg.cn/blog_migrate/328b1bd13bca26a5e9a7d0a2887b556a.jpeg)
3. 在目标机上执行 puppet agent –t。
4. 完成!Mysql 已经在目标机上安装好。
![](https://i-blog.csdnimg.cn/blog_migrate/41b4b313f99a69df9d60a6c06a32b5f5.jpeg)
Puppet 工作原理是什么?
![](https://i-blog.csdnimg.cn/blog_migrate/37193bb78c49bdba921c0184dee96aea.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b80e22cd03d6a9c33222b06e7a941e78.jpeg)
Puppet 主要用于部署,配置管理,以及服务器管理。 Puppert 由Master 和 Agent组成,Master 负责管理所有的配置文件, Agent 节点向Master拉取配置文件。
Puppet 如何实现 Master 节点的高可用?
![](https://i-blog.csdnimg.cn/blog_migrate/37193bb78c49bdba921c0184dee96aea.png)
它使用了Multi-Master的模式来实现高可用,这也是精典的高可用实现方式:冗余+故障转移。
主从节点如何通信?
![](https://i-blog.csdnimg.cn/blog_migrate/37193bb78c49bdba921c0184dee96aea.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d149f826fc0c3a2a26bd1570f0f73401.jpeg)
主从节点通信是 基于SSL 的受信任通信,一旦主节点和从节点建立了 SSL 双向认证,之后发自从节点的请求都会经过 SSL 加密传输到主节点,主节点向从节点的数据传输也是加密的。
![](https://i-blog.csdnimg.cn/blog_migrate/4f5e4bccd70a96757202565b9a39b4da.png)
Puppet的组成部分
![](https://i-blog.csdnimg.cn/blog_migrate/6e113e3c7088e84c9f4e7512cf00cd4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2bd0805e5dee7e4b938bf1505dab261b.jpeg)
Puppet 由 Classes ,Resources,Manifests 和 Modules 组成。
1. Resource – 任何文件,配置可以做为一个 Resource。例如
![](https://i-blog.csdnimg.cn/blog_migrate/723dcefb223d6195a7762cec6a90a0df.jpeg)
它描述了文件的信息,以及文件在目标机上的将来时状态。
2. Classes – Classes 是一组 Resource 的集合,用来描述一组服务或应用。
3. Manifest – 由Class生成若干个 Manifest。在 Manifest 里可以使用某个模块,将这个模块部署到节点上。
![](https://i-blog.csdnimg.cn/blog_migrate/e79b2607d4696c25a5f710c14b0b7374.jpeg)
4. Module – 由若干个 Manifest 组合成一个 Module,用来高效的组织你的 Puppet 代码,以便将来重用。Puppet 社区已经有了非常丰富的 Module,你可以直接下载使用。
![](https://i-blog.csdnimg.cn/blog_migrate/c52a20c51f2cb6d66e3fd3ac4a6d4eb6.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/4f5e4bccd70a96757202565b9a39b4da.png)
Puppet 的工作流程
![](https://i-blog.csdnimg.cn/blog_migrate/6e113e3c7088e84c9f4e7512cf00cd4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ff579613e2d45f8b9640d15437028c9a.jpeg)
1. Facts – Node 节点向 Puppet 主节点报告自己的信息,使得自己处于一个被发现的状态。 Facts 是一组键值对,可以是 IP 地址,或者是操作系统 信息。
2. Catalog 是一组资源的关系集合,Puppet 使用 Catalog 来描述某一个节点应该被配置成什么样子。
3. 当 Node 节点完成的配置,它会向 Puppet 主节点报告任务完成。
如何管理开源社区的已有模块?
![](https://i-blog.csdnimg.cn/blog_migrate/37193bb78c49bdba921c0184dee96aea.png)
不重复造车轮,是软件开发中是很关键的理念。重复利用现有的模块,能够加速你的环境搭建的速度,而且更加的稳定,虽然开源社区已经有了非常丰富的共用 Module,但每次连接外网去下载 Module 又带来了网速慢,下载不稳定的问题。 Artifactory 5.1以上版本已经支持了 Puppet 仓库,以及Chef 仓库。将 Artifactory 设置为 Puppet 的 Module 源,即可实现远程Puppet Module仓库的私有化,让你的环境发布变得实时,可控。
![](https://i-blog.csdnimg.cn/blog_migrate/309e6ad52f5d574da0e42ea87de62ba1.jpeg)
4
总结
使用 Puppet可以帮助运维团队快速,可重复的发布一个计算环境,并且安装配置文件安装指定的软件,服务,实现基础设施即代码。
有了按需创建的运行环境,开发人员可以轻松的重现生产环境的 bug,运维人员可以轻松实现环境的回滚;开发,测试,部署的团队都能够使用相同的环境来协同工作,大大减少环境差异带来的反复沟通,排查环境问题的成本。
![](https://i-blog.csdnimg.cn/blog_migrate/7d231ddc0a6172f359b837e19ebf0bd6.jpeg)
关于JFrog
世界领先DevOps平台
公司成立于2008年,在美国、以色列、法国、西班牙,以及中国北京市拥有超过200名员工。JFrog 拥有3000多个付费客户,其中知名公司包括如腾讯、谷歌、思科、Netflix、亚马逊、苹果等。连续两年,JFrog 被德勤评选为50家发展最快的技术公司之一,并被评为硅谷增长最快的私营企业之一。