e-works数字化企业网  »  文章频道  »  基础信息化  »  云计算和虚拟化

一名运维者的思考:云计算时代的自动化运维走向

2017/7/12    来源:AIX专家俱乐部    作者:覃健祥      
关键字:运维者  云计算时代  
关于题目“云计算时代的自动化运维”,用通俗的话讲,就是应用的自动化部署。

    3.2.1 优点
 
    3.2.1.1 精确
 
    由于shell脚本是给机器执行的,shell脚本自身就是一份精确的可执行的文档,所以,不存在笔误、表达不精确、更新不及时的问题。
 
    3.2.1.2 效率高
 
    运维工程师只要把脚本启动起来就可以做别的工作了。
 
    3.2.2 bash的缺点
 
    Bash是几乎所有linux发行版内置的,环境兼容性好,简洁易学。但它却不是运维编程的终极之选。具体来说有两大缺点:
 
    3.2.2.1 缺少高级语言特性
 
    Bash不是一门高级编程语言,和Perl/Python/Ruby/PHP这些同样可以用作shell编程的语言相比,缺少很多高级语言特性,而这些特性在运维部署工作中会用到。
 
    3.2.2.1 工具链不丰富
 
    由于不支持OOP,因此没有完整的单元测试框架。
 
    开发框架、缺陷分析、性能分析工具也几乎是一片空白。IDE支持虽有(JetBrains公司IntelliJ就有bash shell插件),但功能不多。
 
    3.3 自动化部署:运维DSL
 
    得益于虚拟化和公有云的快速普及,高效高质量地完成应用部署不再是大公司专有的需求,也成了中小企业的刚需,前面分析过了,bash shell不能胜任大规模的、复杂的应用部署,自动化运维编程语言DSL(Domain Specific Language)被发明出来,puppet, chef,ansible, saltstack是其中杰出的代表。
 
    4 自动化运维技术发展趋势展望
 
    4.1 部署工作代码化
 
    无论是使用bash / python shell,还是使用puppet、chef等DSL,都可以完成代码化这个过程。把手工操作变成代码。
 
    使用代码自动化部署应用环境和应用,才能保证无论在办公室测试环境,还是在机房生产环境,每次运行这个部署代码,都能得到相同的结果。这是一切自动化部署的基础。
 
    4.2 运维代码版本化
 
    运维代码要和Java,PHP等应用代码一样,纳入SVN、GIT代码仓库,执行严格的开发-测试-上线-回滚流程。
 
    这样便可利用svn/git的成熟SCM功能,用于这样一些场景:
 
    4.2.1 新建分支
 
    运维代码由1.0升级到2.0,增加了缓存层。则可以从1.0复制出一个分支出来,命名为2.0,然后再在2.0的基础上修改。
 
    4.2.2 差异比较
 
    若要了解1.0和2.0的运维架构到底发生了什么变化,执行svn和git的diff即可查看每一行代码的变化。
 
    4.2.3 历史归档
 
    1.0版稳定运行了半年,升级到2.0版本,此时1.0版冻结写请求,归档留存。2.0上线运行一段时间,发现稳定性不够。可以从归档中找出1.0版本的部署代码,回滚到1.0版本。
 
    4.3 测试环境高保真
 
    很多公司的测试和生产环境存在操作系统不一致、软件版本不一致、配置项不一致的情况。这种不规范的运维有两大后果:一是bug在测试环境未能测出,导致线上故障;二是线上出现异常时,测试环境不能复现。
 
    一个应用至少有两种环境:测试环境、生产环境。大一点的公司还会分成:开发环境、功能测试环境、性能测试环境、预发环境、生产环境。这么多的环境的自动化部署代码,原则上应该是90%以上都相同,只有少数地方不一样。
 
    4.4 自动化测试
 
    使用代码自动化部署完之后,服务器是否立即可用,需要测试验证。自动化测试能让整个运维过程更加高效。
 
    在应用开发领域,自动化测试、单元测试已经非常普及了,运维开发也可以做一些类似的自动化验收测试工作:
 
    4.4.1 终端应用测试
 
    模拟一个客户端访问刚刚部署好的服务,例如:验证其RESTfulAPI是否得到预期的结果。
 
    优点是,最接近实际用户,若此测试通过,则说明装软件、改配置、启服务各项工作都正确。缺点是,若测试不通过,不能立即定位出哪里出错了。定位问题需借助下面更底层的测试。
 
    4.4.2 四层网络测试
 
    使用nmap之类的工具检测目标端口是否正常响应(包括防火墙是否放行)
 
    4.4.3 本机测试
 
    · 用yum,apt检测包是否安装
 
    · 用service status检测守护进程是否正常支持
 
    · 用ps检测进程是否正在运行
 
    · 用ls检测文件是否存在
 
    · 用grep检查配置荐是否设置成了指定的值
 
    自动化测试用例覆盖足够全面,我们便有可能实现一台机器从祼机到上线服务全部自动化完成,无人值守。若没有自动化测试,应用部署完成之后,仍然需要人工验证是否满足上线服务的要求。
 
    4.5 工作流
 
    运维代码从开发到上线发挥作用,也应该和应用代码一样遵循下面的工作流:
 
一名运维者的思考:云计算时代的自动化运维走向
 
    这个流程图只展示了最基本的要求:部署到生产环境前必须经过测试环境验证。更复杂的还有代码reivew、性能测试环境验证、漏洞扫描环境验证、预发环境验证,生产环境分批发布等环节。

责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐