热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在6个月或更短时间内成为DevOps工程师,第5部分:部署

【译文】原文地址 快速回顾 在第1部分中,我们讨论了DevOps文化和所需的基础。 在第2部分中,我们讨论了如何正确地为代码部署提供基础设施。 在第3部分中,我们讨论了如何保持代码

如何在6个月或更短时间内成为DevOps工程师,第5部分:部署

【译文】原文地址

快速回顾

在第1部分中,我们讨论了DevOps文化和所需的基础。
在第2部分中,我们讨论了如何正确地为代码部署提供基础设施。
在第3部分中,我们讨论了如何保持代码管理。
在第4部分中,我们讨论了如何进行软件打包。
根据计划我们今天要介绍的是部署:

如何在6个月或更短时间内成为DevOps工程师,第5部分:部署

因此,如果你在每个部分上花了一个月的时间,现在是第4个月了。

我们已经知道如何提供运行我们的软件的基础设施,我们知道如何对其进行适当的版本控制,我们知道如何将其打包以便部署。

最后,我们将讨论如何部署代码!

代码部署

你是否注意到我在上面并没有说“如何轻松地部署你的代码”?这是有原因的。

不幸的是,从开发环境到生产环境正确地部署代码仍然是一个痛苦的过程,错误和失败在所难免。

为什么呢?

原因有很多,当然,但在我看来,主要归结为差异。具体来说,就是代码创建环境和代码实际运行环境之间的差异。

事实上,我认为最小化这些差异是您所能做的最大的改进,不仅是在整体代码部署中,而且包括部署后运行时。

那么,我们如何减少或消除我们的生产环境和非生产环境之间的差异呢?

在自己的机器上正常工作

如果你的开发基础设施是下面的样子:

如何在6个月或更短时间内成为DevOps工程师,第5部分:部署

但你的生产环境看起来是下面的样子:

如何在6个月或更短时间内成为DevOps工程师,第5部分:部署

那你就有问题了。

如果您使用的是基础设施即代码,而不是手工配置,那么您已经完成了90%的工作。 如果是手工配置的话,也不要绝望——你并不孤单。花一个下午的时间,找出存在的差距(培训、文化、人员、流程等),然后一个一个地有条不紊地消除它们。

底线是,如果您仍然手工配置东西,那么您将无法成功管理现代技术栈。就这么简单。

所以,你第一件要做的事是确保所有要部署在生产环境服务器的代码都是版本控制的。

假设你就是按照这个要求来做的,我将讨论部署代码的最佳方法是根本不部署它(直接将代码和运行时搬运到需要执行的环境,容器和虚拟机镜像就是实现这个目的)。

如今的代码部署方式

没错,把代码部署到产品机器上是九十年代的事。

将代码部署到一组固定的生产机器上的最大问题是,您的生产服务器(运行代码的地方)与开发服务器(编写代码的地方)是不同的。

所以,部署后会立即出现大量以前从未见过的问题是很正常的——因为环境都不同了!

因此,您需要尽一切努力确保您的部署组件包括整个运行时,而不是一段代码。

换句话说,将代码一次性部署到开发环境中,克隆代码运行的整个机器,然后将其复制到需要的任何地方。

这就是所谓的“不可变部署”,它是一种非常强大的模式,可以为您节省部署后几个小时的麻烦。

当然,如果运行容器,同样的想法也适用:在所有地方部署相同的容器。

但你可能说我的开发环境还是和生产环境不同的。数据库用户名/密码、连接字符串、S3桶位置等,这些配置都不同。

是的,它们确实不同。

解决这个问题的方法是使用12因素应用配置原则。您的所有配置都需要外部化,并作为环境变量传递到您的机器。

例如,如果您使用AWS,则使用SSM作为外部参数存储——它与CloudFormation很好地集成。直接从aws ssm cli命令设置环境变量也非常简单。当然,其他云提供商也有类似的机制。

此外,当出现问题时,要抑制住“修理”你的生产机器的冲动。机器是不可变的,这意味着您所做的任何修复都必须来自开发环境。

实际上,你的目标是完全不允许对生产环境机器的访问。任何人不应该在生产环节中执行SSH、SCP。这样黑客也就不能访问。

但是如果我需要查日志来解决问题该怎么办呢?

你猜对了——你的日志也应该外部化,理想情况下,可以在其他地方使用ElasticSearch/Logstash/Kibana (ELK)堆栈,或者像SumoLogic或Datadog这样的商业软件收集日志。

代码部署机制

ok,现在你知道要做什么了,但是你知道怎么做了吗?

不幸的是,这正是Jenkins的用武之地。如果您不知道,Jenkins是最流行的开源自动部署化服务器软件之一。

我说不幸,是因为Jenkins已经存在十来年了。它的设置很复杂,维护起来更复杂。它附带了数百万质量可疑的插件。这些插件往往会在最不合适的时候崩溃,导致整个系统崩溃。

事实上,真正具有弹性的、多主的Jenkins设置非常罕见,通常只有在大厂才能看到。

那为什么我还建议你们从Jenkins开始呢?因为尽管它有这么多缺点,它仍然非常流行,在我们的行业中被大量使用。

了解Jenkins,特别是Jenkinsfile是如何构建的,对你的就业是一个巨大的好处,不能被忽视。

也就是说,当你学习Jenkins时,一定要遵循新的Pipeline BlueOcean路径,而不是旧的“Jenkins工作”路径。这非常重要,因为您希望您的CI/CD pipeline正好位于GitHub/GitLab仓库。这样,pipeline本身就是一段版本化的代码!

事实上,这一点非常重要,需要反复强调。

一切皆代码

你的应用程序,如何部署,如何监控,如何配置,等等-所有的代码,都存储在GitHub/GitLab/其他,版本控制系统中。

这里的目标是为核心开发人员(编写特性代码的软件工程师)创建一个真正无摩擦的环境。

例如,我应该能够编写我的微服务,添加任何我认为必要的测试,添加Jenkinsfile,添加监视配置,在“env.yaml文件中指定我的参数,所有这一切存储在一个仓库中,Jenkins自动发现仓库,构建它,测试它,部署它(作为淡黄色或蓝色/绿色),整个流程完成之后会邮件通知我!

这就是目标!事实上,这正是DevOps工程师的核心使命的本质。

除了Jenkins还有其他选择

就像我之前说的,Jenkins已经存在很久了,现在有其他的,在我看来更好,即使不那么受欢迎的替代品。

一个是AWS自己的CodeDeploy服务。它有局限性,但CodeDeploy背后的开发人员在过去一年中做出了显著的改进,如果你在AWS,我强烈建议你尝试一下。

另一个是GitLab CI。如果您的公司使用GitLab,您可能应该从它开始,因为它与GitLab的其他部分集成得很好。

最后,GitHub宣布了Actions,这应该是他们自己的自动化。

真的,我不认为工具在这里有那么重要。重要的是知道所有的东西,包括你的代码部署pipeline,都是版本控制的结果。

无论如何,如果您从Jenkins开始,请尝试将它设置为一个容器。这不是很困难,而且将是一个很棒的学习机会,来弄清楚如何使用弹性的、容器化的Jenkins工作节点部署一个容器化的Jenkins服务。

实际上,您可以简单地开始,不需要任何容器编排,这是下一篇文章的主题。请继续关注!


推荐阅读
  • ELK+filebeat安装部署监控springboot日志
    ELK服务器端部署1.安装dockercompose,略2.配置docker-compose.ymlcdrootelkvidocker-compose.ymlversion:&am ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 简短的问题是:是否可以从远程服务器中提取日志(在日志文件中)并将其提取到 ... [详细]
  • ELK stack 学习记录
    ELK日志分析平台学习记录首先ELK主要指elasticsearch、logstash和kibana,三个开源软件组合而成的一套日志平台解决方案。可以将平时收集到的日志,通过前台展 ... [详细]
  •                               前言日志,一直以来都是开发人员和运维人员最关心的问题。开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐 ... [详细]
  • 搞懂 ELK 并不是一件特别难的事
    点击下方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!本篇文章主要介绍ELK的一些框架组成,原理和实践&#x ... [详细]
  • 1.ELK系统是什么ELK是一套日志中心解决方案,其三个字母分别表示:Elasticsearch:负责日志存储及检索Logstash&#x ... [详细]
  • 用elastic stack来分析下你的redis slowlog
    redis是目前最流行的NoSQL内存数据库,然而如果在使用过程中出现滥用、乱用的情况,很容易发生性能问题,此时我们就要去关注慢查询日志& ... [详细]
  • E L K ⽇ 志 分 析系统
    ELK⽇志分析系统elk介绍1.应⽤需求前景(1)业务发展越来越庞⼤,服务器越来越多;(2)各种访问⽇志、应⽤⽇志、错误⽇志量越来越多,导致运维⼈员⽆法很好的去管理⽇志;(3)开 ... [详细]
  • db2怎么限定查询条数_ES的跨索引查询有多便利?对比下分库分表、分片更直观...
    作者介绍李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch ... [详细]
  • Nextcloudsnap一键安装包: https:github.comextcloudextcloud-snap建议安装Ubuntu系统,因为官方一键安装包用的是Snap,Cen ... [详细]
author-avatar
朵儿lp_685
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有