现代软件开发对基础设施的管理提出了更苛刻的要求:
创新互联主营禹州网站建设的网络公司,主营网站建设方案,手机APP定制开发,禹州h5重庆小程序开发公司搭建,禹州网站营销推广欢迎禹州等地区企业咨询
产品要适应瞬息万变的市场,要求基础设施有更快的响应速度。持续交付和DevOps的推行要求产品团队对部署和运维要有更高的自主性。技术的快速进步和演化,也使得基础设施的配置不得不频繁变化。在这种快速变化的过程中,要求基础设施既要灵活,也要安全、可靠。
传统的基础设施运维管理具有以下几个问题:
产品团队是实施持续交付的过程中,必须考虑将基础设施的维护纳入进来,作为支持产品运行的一部分。以下是产品团队的持续交付流水线全景图。
从上图可以看出,产品团队除了管理项目本身代码外,还要管理环境定义脚本。环境定义脚本可以由基础设施自动化工具执行,动态创建、销毁和更新产品运行所需的环境(包括服务器、负载均衡器、防火墙配置、第三方依赖等)。
如果实现了这一点,就实现了基础设施即代码的雏形。Kief在《Infarftruce As Code》一书中对基础设施即代码定义如下:
“基础设施即代码是一种使用新的技术来构建和管理动态基础设施的方式。它把基础设施、工具和服务以及对基础设施的管理本身作为一个软件系统,采纳软件工程实践以结构化的安全的方式来管理对系统的变更。”
基础设施即代码有四项关键原则:
基础设施即代码的目标是:
基础设施即代码实践会产生高成熟度的持续交付和DevOps。
在实施基础设施即代码时,要遵守以下实践:
1. 使用DSL描述环境
Ansible、Chef、SaltStack、Terraform等基础设施自动化工具都有各自的描述性语言来实现对基础设施的定义。使用DSL更容易通过描述性的语言定义基础设施,也有助于代码重用。团队成员能建立起共同理解,从而维护脚本。
以下是Ansible的一个playbook示例。
- ---
- - hosts: local
- tasks:
- - name: Install Nginx
- apt: pkg=nginx state=installed update_cache=true
- notify:
- - Start Nginx
- handlers:
- - name: Start Nginx
- service: name=nginx state=started
2. 自测试系统
在编写环境代码的配置时,也要编写对环境的测试。确保所有服务器都进行了正确的配置,遵守了所有的安全规则,也对网络连通性等进行了验证。我们一般提倡将测试代码和配置代码放在一起维护。这样配置代码更新时,能保证测试代码也被及时更新。
一些典型的基础设施自动化测试工具有ServerSpec、Testinfra等。以下是一个ServerSpec的示例。
- require 'spec_helper'
- describe package('httpd'), :if => os[:family] == 'redhat' do
- it { should be_installed }
- end
- describe package('apache2'), :if => os[:family] == 'ubuntu' do
- it { should be_installed }
- end
- describe service('httpd'), :if => os[:family] == 'redhat' do
- it { should be_enabled }
- it { should be_running }
- end
- describe service('apache2'), :if => os[:family] == 'ubuntu' do
- it { should be_enabled }
- it { should be_running }
- end
- describe service('org.apache.httpd'), :if => os[:family] == 'darwin' do
- it { should be_enabled }
- it { should be_running }
- end
- describe port(80) do
- it { should be_listening }
- end
3. 一切进行版本化
一旦采用了环境定义脚本实现对环境的控制后,需要将环境定义脚本纳入到版本管理中。并且之后所有的环境变更都应该先修改环境定义脚本,由环境定义脚本触发对环境的变更。登录到服务器执行一些临时性命令是被坚决禁止的。因为这极有可能会破坏环境的一致性。重建服务器时,也不能保证能应用所有需要的变更。
下图是基础设施即代码的一个典型使用场景。
除此之外,如果想要在生产环境中创建可伸缩性的服务,也需要借助“基础设施即代码”这一实践。在高峰时期,系统可以根据定义的环境自动创建并加入新的节点来实现动态扩容,并在低峰时将其销毁。当监控发现某节点失败,系统可以根据定义的环境自动创建新的节点来替换失败节点,实现自动灾难恢复。
***是我们在某团队实施基础设施即代码的案例解析。这张图是某团队的基础设施架构图。
该团队使用AWS作为基础设施平台。我们选用ansible作为基础设施自动化工具,并结合AWS提供的cloudformation服务实现快速创建和销毁资源。所有网元都有清晰的角色划分,配套对应的配置脚本。从网络配置到网元配置以及应用配置都实现了全自动化。所有的配置脚本都和源代码一起托管在GitHub。团队所有成员都可以查看并修改。
【本文是专栏作者“ThoughtWorks”的原创稿件,微信公众号:思特沃克,转载请联系原作者】
文章题目:解读基础设施即代码
当前链接:http://www.csdahua.cn/qtweb/news41/298841.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网