剥鸡蛋和DevOps之间有什么共同点?

这是hackernoon.com上Patrick Patrick Scott文章的翻译。 作者提供了一些重要的原理,这些原理将帮助您提高DevOps的工作能力。

图片

几天前,我试图以一种愚蠢的方式去皮,而我的女友安吉丽问我为什么要这样做。

她拿起另一个煮熟的鸡蛋,在砧板上打了一下,然后按下,然后在桌上滚动。 清洁仅用了3秒钟。 我站了起来,一步一步地取下了贝壳。

我想这样说: 我们夸大了努力的重要性。

最佳解决方案既简单又有效。 很难清洁生锈的螺栓吗? 可能是。 但只有当您不知道可口可乐可以做到这一点时。 还复杂吗? 不行 您只需要将螺栓插入玻璃杯中,然后等待。

如果不了解简单的技术,就无法应用它们。 您进行实验而不是实施;而不是进行复制,而是进行研究。

如果在编程中一次又一次地使用某种方法,因为它可以简化要解决的问题,那么该方法将成为模板或所谓的最佳实践。

尽管诸如命令查询责任隔离(CQRS)或事件源(ES)这样复杂而令人生畏的名称,但这些做法有助于解决问题。 特别是在构建分布式系统时出现的那些。

如果从整体上看待开发,我们会发现还有更多通用的原则,例如“保持简单,愚蠢”(KISS)和“不要重复自己”(DRY)。 我想谈谈与DevOps相关的类似模式和原则。

DevOps通常表示为应许之地,在那儿鸟类会唱歌,阳光普照。 但是如果没有使用正确的方法,DevOps就会变成地狱,您将用贝壳(像我一样)刺破您的所有手指。

创建DevOps系统后,除了KISS和DRY等通用原理外,我还为自己找到了几种解决方案。 虽然它们不能称为模板,但是它们将帮助您快速清洁鸡蛋。 这些解决方案(以随机顺序):

  • 不要做别人在你面前所做的事情。
  • 让开发人员尽可能多地工作。
  • 生产是一个神话。
  • 将所有内容转移到群集中,然后进行整体备份。
  • VPN太复杂;解决方案更容易。
  • 组织,自动化和征服!

第1课。不要做别人做过的事


如果您有机会购买成品,或者在公共领域拥有必要且方便的工具,请使用此工具。

不要重新发明轮子-买它。

您是否知道可以使用Craigslist使用的同一邮件服务器? 什么是免费的? 需要一个邮件服务器-不要创建新的服务器,而要使用现有的服务器。

我想在自托管列表中寻找工具,或为此使用Helm Hub。

尽管Helm是用于查找软件的相当新的工具,但已经创建了该站点: https : //v3.helm.sh/

有了Helm,您可以轻松搜索完成的自行车。

让我们回到刚开始编程的时候。 九年级时,我学习了我的第一门“真实”语言-QBasic。 在此之前,我已经创建HTML和CSS网站已有两年了。 那时,互联网是一个新事物,尽管人们知道如何创建软件包,但他们并没有像我们现在那样共享它们。 通常,我使用软盘进行存储-最好与我在11年级用Java Swing编写的打砖块游戏一起找到它们。

那时,我只使用标准库,宝贝! 至少我13岁时才知道他们。 尽管我确定有些Java专家(您好,Vlad和Nick!)那时已经很酷了。 ;)

现在一切都错了。 今天,您可以找到整个UI库。 您可以找到一个库,用一个命令即可轻松优雅地处理日期。

如果有一个工具可以使用和安装功能齐全的子系统,那会很好,对吗? 需要数据库吗? 安装数据库

好消息:存在这样的工具! 使用Helm,您还可以安装已打包并可以使用的功能齐全的子系统。

其原理与NPM和Gradle相同,但是我们在Helm中管理的软件包称为图表。 图表标记了容器,以便它们以多种方式在Kubernetes上运行。

事实证明,这是一个交钥匙的解决方案,购买一辆自行车。 图表是轮子,在Kubernetes内部运行的带有描述的容器是轮子。

图表最酷的地方是能够打包服务并在任何Kubernetes集群中运行它们,甚至在需要时与其他人共享的能力。

这意味着您可以使用代码描述整个环境:

- name: backup repository: http://jenkins-x-chartmuseum:8080 version: 0.0.2 - name: monitor repository: http://jenkins-x-chartmuseum:8080 version: 0.0.3 - name: marketing-site repository: http://jenkins-x-chartmuseum:8080 version: 1.1.10 - name: denormalizer-service repository: http://jenkins-x-chartmuseum:8080 version: 1.0.0 - name: mongo repository: https://kubernetes-charts.storage.googleapis.com/ version: 1.0.0 

需要将您的营销站点升级到1.2.0吗? 只需进行更改并提交即可。

第2课。让开发人员尽可能多地工作。


我曾经坐在桌旁,看了一下我的代码,并试图跟踪该错误。 几个星期以来,用户一直在抱怨他,最后我有一点空闲时间闲逛。

多田啊 找到了! 固定!

我坐在阳光明媚的房间里工作场所的隔断后面,对其他人大喊:“我已修复了该虫!”

下周二,当用户看到该版本时,他们一定会感谢我的努力! 但是为此,我们将不得不打包并尝试将发行版本移到其他地方……如果什么都没有发生,我们可能会成功……

好吧,好的, 如果该发行版本在下周二仍然发布, 那么用户一定会喜欢的!

这就是我作为初级程序员在大学的第一份工作中进行部署的方式。

从那时起,情况发生了很大变化。

现在,我每天使用很多基于主干的开发和部署模块。 当我发送请求请求时,机器人将在测试通过并收集构建后,在收集的环境中发布带有评论代码的相应注释。

今天,您不必在办公室的分区中尖叫。

您给予程序员的自由度越高–可以自由控制他们所需的基础架构的各个部分–您越容易成为DevOps工程师。

在第一课中,我们看到了要在生产环境中进行更新,只需更改一位数字并提交即可。 在理想的情况下,我们将应用程序打包为图表,团队中的每个程序员都有机会影响工具在生产阶段的工作方式。 Kubernetes将图表理解为容器的描述,这就是为什么它们描述资源需求的原因。

逻辑是这样的:我无法猜测一项新服务将需要多少内存或需要什么CPU设置(而且我认为我并不是唯一的一个)。 因此,我还将根据规则部署监视和警报,根据这些规则,我和我的团队将在Slack中被告知需要调整这些设置。 也就是说,系统在部署时会通知您有关必要的设置。 我曾经坐了几个小时,通过Prometheus发送请求并调整设置,就像我以前挑选外壳一样。 现在,我学会了明智地做所有事情。

我已经听到您说:“听起来太复杂了!” 不行 只需设置图表即可。

如果您可以自动化或简化某些操作,请继续。 例如,如果您可以通过简单地部署带有标签“ expose:true”的服务来分配DNS路径,该怎么办? 这是操作员出现的地方。 这是一个更高级的Kubernetes工具,您应该了解它。 但是,我们不要太深入细节。

第3课。生产是神话


这对我来说真是一个启示。 我不得不从不同的角度看待事物,因此请仔细听。

十多年来,我认为世界上只有少数几种环境。 在最简单的情况下,存在环境的分段和生产。 首先部署到阶段,然后进行测试,再移至下一个阶段,进行部署,测试等等。 一旦一切都结合在一起-儿子被整合-您就可以投入生产。

我年复一年地遵循这种模式,从来没有怀疑过它。 一直都是这样。

这种方案是摆脱外壳的另一种无效的方法。

本质上,图表是依赖性图表。 它可以用来表示环境,然后生产中的部署过程归结为部署单个图表。

如果通过公共上下文连接的每个团队,项目或组都有自己的图表,则会出现多个环境,这些环境使您可以在单个事务中对所有服务进行分组和更新。

不要将生产视为一个巨大的无所不包的环境,实际上这是很多小的生产。

规模的重大变化令人恐惧。 而且,如果您有几个小型开发环境,则可以隔离更改并使系统更加灵活。

另外,如果所有内容都以图表的形式排列,则将以相同的方式列出变量并可以从外部进行更改。 例如,要将功能较弱的kafka集群连接到不需要进行生产的预生产阶段,只需更改配置即可。

第4课。将所有内容转移到集群并备份整个


因此,我们整理了产品。 如何处理数据库? 和卡夫卡在一起吗? 有安全性问题吗?

如果您仔细阅读,请记住:我写道数据库可以包含在图表包中。

Kubernetes有一个单独的API,用于以便捷的形式-StatefulSets运行数据库和其他有状态的应用程序

Kubernetes的本质是提高容器启动的可靠性。 使用它并使用Velero工具(通过Helm Chart安装),您可以创建整个Kubernetes集群的备份以及与其连接的磁盘(例如,由StatefulSet创建的磁盘),并使用一个命令还原所有内容。 另外,很容易按计划配置自动备份。

一个团队的备份,恢复和Kubernetes Manager将有助于部署一个全新的集群并仅由两个团队恢复其备份。 如果您首先要创建新的备份,则最多为三个。

无需考虑服务器,您可以在整个集群上运行。

制作前烦人吗? 视而不见-达到DNS的备份,恢复和更改的距离。

第5课。VPN太复杂了,有更简单的解决方案


您曾经愉快地使用过VPN吗?

不,真的。 可能吗

谷歌做了这样的尝试。 但是几年前,该公司宣布将不使用VPN。 我认为他们也不喜欢它。

Google切换到不信任的网络。 它们没有适合任何网络的主密钥,但是在每个服务的入口处都有一个SSO登录屏幕形式的密钥。 是否要登录监控服务? 使用您的公司用户名和密码登录。

只需要很小的变动即可:使用代理代替使用VPN进行授权。

VPN还在专用网络上托管Kubernetes管理链接,而SSO则不在。 但是它们有自己的授权机制。 对于Google Cloud和AWS,这是身份和访问管理(IAM)以及将IP地址列入白名单的功能。

如果可以使用体积较小的架构而不会造成太大损失,那为什么不呢? 像Google一样:从VPN转向“不信任”系统。

第6课:组织,自动化和征服


嗯,在您看来系统化时间很长? 废话! 将来,这将节省您数小时,数天甚至数周的时间。 上班!

系统化是不止一次重建基础架构的唯一现实方法。

如果可以通过更改和提交git中的某些内容来改善每个设置项,那么实质上您的整个技术组织都是声明性的。 任何有权使用git的开发人员都可以轻松地使任何系统保持工作状态。

为此,请使用几个小型存储库。 Monorepos使人们偷工减料,并依靠具有人为重要性的结构。 相反,最好使用许多以后可以链接的小型存储库。

我的朋友Matt和我正在创建一个名为meta的工具,以在开发阶段帮助完成此任务。 Helm在生产阶段就这样做了:对他而言,一切都是依赖表!

结论


不要逐块从鸡蛋中取出蛋壳。 打和滚。

Source: https://habr.com/ru/post/zh-CN457120/


All Articles