针对云本地应用程序的即时开发环境

2020-05-07 23:32:40

如果你开发软件,在你的生活中,它在我的机器上运行的单词至少从你的嘴里溜走过一次。如果你在谷歌上搜索,你可能会找到开玩笑的表情包、贴纸和T恤。几十年来,开发人员在不同的机器上运行代码时一直受到意外错误的困扰。在容器时代,您可能认为这不再是问题,但仍然存在需要解决的缺陷和挑战。

当我编写代码时,我只专注于一件事:尽可能快地向我的用户交付价值。在从事多年的开发工作后,我可以总结出实现该目标所需要的是:

在这篇博客中,我分析了当前开发云原生应用的替代方案,以及它们在可复制性、开发/生产平价和快速内循环开发周期方面的表现。然后,我将介绍我们如何在Okteto使用我们所称的云-本地开发方法来解决这些挑战。

去年,我们就如何构建软件采访了200多家不同的公司和软件团队。根据这些对话,我们发现当今最常见的开发工作流程是:

让我们更详细地解释这些解决方案中的每一个,以及它们在开发/生产平价、可复制性和快速内循环开发周期方面的表现。

作为开发人员,我们倾向于像我们的服务是在本地机器上运行的独立实体一样工作。我只需在热重载程序上运行编译器或中继,即可在我编写代码并立即在浏览器或本地命令行中测试结果时自动为我构建。

这个迭代过程可能是最快的,您可以从增量构建和调试器中获益。但这种方法在设计上被打破了:

您的应用程序及其依赖项在生产中运行的方式与此本地开发设置没有什么共同之处。您无处不在地嘲弄您的运行时依赖项。

此开发工作流与DevOps区域性不符。事情通常会在生产前环境中破裂。操作员认为开发人员不知道如何编码,而开发人员认为操作员不知道如何运行他们的代码。

使用容器使我离在本地环境中复制应用程序的复杂架构又近了一步。Docker极大地缓解了某些痛点:

流行的工具,如Docker Compose或Minikube,允许我通过一个命令启动并运行我的应用程序的本地版本。但它也有不利的一面:

丑陋的事实是,试图在本地运行整个堆栈,因为它将在生产中运行,这是很困难的。运行单一服务可能很容易,但大型基于微服务的应用程序、服务网格、网络配置、API网关、无服务器、遗留服务、繁重的数据库或CPU/内存密集型工作负载又如何呢?太疯狂了。

那么,我通常如何处理不能在本地运行的依赖项呢?您必须在不同的环境中测试您的更改。您合并您的更改,您的应用程序可能会在几分钟内通过持续集成作业在某种阶段性环境中进行更新。

但是,您有没有遇到过在本地设置中无法重现的CI、试运行甚至生产中出现的错误?由于我无法重现错误,我需要再次依靠持续集成来验证我的更改。起作用了吗?没有吗?再次启动此缓慢的进程…。😩.。

下表总结了这些解决方案相对于开发/生产平价、可复制性和快速内环开发周期的行为:

如您所见,对于我们正在寻找的开发环境,这些解决方案都不能令人满意。Devs Happy去👈,Ops Happy去👉。

这些解决方案要么减慢我的内部循环周期,要么将真正的端到端测试推迟到稍后的阶段。试图解决这个问题让我们开始了Okteto。我们在Okteto的使命是将开发人员的生产力提升到一个新的水平。我们的前三个产品,Okteto CLI、Okteto Cloud和Okteto Enterprise(Okteto Cloud的内部版本)是迈向现代开发工作流程愿景的第一步。让我解释一下Okteto是如何解决开发/生产奇偶校验、可复制性和快速内循环周期的问题的:

基于沙盒Kubernetes命名空间Okteto Cloud的生产型开发环境,开发者可以自助访问共享开发集群中的Kubernetes命名空间。每个命名空间都自动配置为与在同一集群上工作的其他开发人员隔离。虽然Ops希望开发人员在真实环境中进行开发,但开发人员不应该在本地安装Kubernetes,因为这需要硬件资源和对该技术更深入的了解。在四五个人以上和不同操作系统的团队中,这将成为一项非常繁琐的任务。

一键部署应用程序以实现纯粹的可复制性,Okteto Cloud使启动您的应用程序和开发环境变得像点击一个按钮一样简单。开发人员可以立即从运维团队(由Helm 3支持)方便地配置的应用程序目录中部署或升级他们的应用程序。由于应用程序在共享集群中运行,开发人员可以利用集群中运行的平台服务,如无服务器框架、日志和指标聚合器、运行时安全检查器(如Falco)等。

快速内循环:只需编码、构建和测试一旦应用程序启动并运行,Okteto CLI允许您在应用程序的一个或多个组件上启用开发模式,只需专注于开发。您可以使用您熟悉和喜爱的工具(包括调试器)在本地编写代码,Okteto会同步更改以即时更新您的应用程序。不需要提交、构建或推送。

Containers和Kubernetes将我们的部署技术带到了一个新的水平,但是开发实践并没有以同样的速度发展。作为开发周期的一部分,开发人员需要访问可复制的、类似生产的环境,但不必放弃对开发人员生产力至关重要的快速内部循环。

如果这个问题对您来说很熟悉,您应该检查一下我们在Okteto建造了什么。看看我们的入门指南,以云的速度开始开发。

您有什么想法、评论或反馈吗?加入我们在Kubernetes社区的#okteto频道Slake,并与社区分享您的想法!