翻译自 Why Create a Developer-Focused Kubernetes Platform and How 。
让我们看看为什么创建一个有意义的,然后探索构建它所需的组件。
在不断增长的云原生开发领域中,Kubernetes 已经成为组织的事实标准。许多处于云原生开发前沿的公司领导人确认,目前 Kubernetes 主要是一个通用编排框架。换句话说,Kubernetes 并不是“难点”。相反,“所有其他东西都很难:将所有内容链接在一起并使其正常工作。”
在开发人员至上的 Kubernetes 作为标准的背景下,平台工程和开发人员平台概念已成为组织的一种圣杯,这些组织寻求一种方法,使各级体验的开发人员的云原生之旅更加顺畅。没有一个久经考验的以开发人员为中心的 Kubernetes 平台,这是整个想法的挑战和美妙之处。工具领域广阔,组织将自己的开发人员平台放在一起,以挑选最适合他们需求的工具。然而,这也可能导致选择瘫痪和错误的开始,减慢速度并抵消云原生本应引入的速度优势。
考虑到这一点,让我们看看为什么创建一个以开发人员为中心的 Kubernetes 平台是有意义的,然后探索构建它需要哪些组件。
没有人否认云原生范式给开发组合带来了新的复杂性。突然间,单体开发的孤岛被打破,更线性的开发工作流程——代码和交给其他人——转变为分散的微服务架构。现在有不同的依赖关系和新的需求,例如伴随云原生革命而来的“你构建它,你运行它”的左移思想。但是开发人员真正需要了解 Kubernetes 的深度到什么程度呢?开发人员是否需要对整个软件生命周期负责,或者只是了解它的关键方面以促进交付速度和更快的反馈循环?
这些问题是关于开发者平台的讨论的基础,这也是近几个月来争论的焦点。无论这些平台是消除挫败感、提高生产力还是帮助标准化工作流程,开发社区(以及他们在 DevOps 和平台工程领域的同事)的一个收获是,开发人员至上的平台应该通过标准化降低复杂性,但为例外留出空间。
没有一种通用的开发者平台,这为铺设实现组织所需的开发者平台之路留下了空间。开发人员需要知道什么才能安全地发布软件,平台又将如何帮助他们实现?
有效面向开发者的 Kubernetes 平台需要考虑以下关键因素:
- 支持开发人员自助服务和可见性。为完成工作所需的工具和可见性创建基线,并建立灵活性以确保没有人被锁定。自助服务基线允许每个人独立地根据同一组标准工作,并使新开发人员入职变得容易更快地促进可靠、高效的生产。
- 让它变得简单。是的,开发人员需要了解 Kubernetes,但前提是这种理解有助于交付软件和更快地获得关键反馈。通过为开发人员提供足够的能力来快速进行而不用担心重要的(但对他们来说是次要的)考虑因素,例如基础设施和安全性,从而调动简单性和清晰性。
- 释放 DevOps/PlatformOps 的力量。DevOps、PlatformOps 和站点可靠性工程团队不仅仅是消防队员和第一线支持。创建一个面向开发者自助服务平台可以使他们专注于战略项目并支持持续改进。
- 集中关键数据。团队需要实时数据来收集洞察力,以了解哪些有效,哪些无效。无论是衡量绩效还是跟踪合规性,集中式平台都可以收集运营和资源数据。
- 注重更快的反馈。当前宏观经济形势加强了以更快、更高效地完成任务的需求。一个好的开发者平台应该提供快速反馈,这样就不会有人坐在那里等待构建。
- 促进开发者体验。任何能减少认知负荷并使开发者专注于他们的核心任务(特别是在市场条件艰难时),都是一项不错的投资。
虽然所有这些为为何需要面向开发者的 Kubernetes 平台提供了背景和理由,但哪些组件将帮助他们实现呢?
尽管 Kubernetes 已经存在多年,但它仍然存在挑战,因此开发者平台已被打造出来以解决这些问题,并为运维团队提供一些帮助。这些平台旨在回答以下问题:如何在 Kubernetes 上构建高效的开发工作流程?如何创建开发环境,将您的源代码控制系统、开发环境和部署系统集成起来?如何有效地协作处理日益复杂的工作流?
每个平台看起来都有所不同,但最终你想选择帮助你编写、发布和运行服务的组件。
代码组件
首先,一个平台需要设置、配置(和维护)本地开发环境(和测试环境),尽可能模拟生产环境。同时应该建立源代码控制和持续集成/持续交付功能。理想情况下,您可以设置平台以使开发人员能够在本地编写代码,但对远程服务和数据存储进行测试(即远程到本地或“remocal”开发)。
在此步骤中创建的开发环境和工作流程有助于实现每个组织所追求的开发人员生产力提高目标,这就是为什么正确处理平台的这一部分至关重要。
搬运组件
云原生领域中关于让开发人员“左移”的讨论很大程度上涉及启用开发人员承担端到端的代码-交付-运行责任。这并非总是可行或理想的——它取决于组织和其云原生成熟度水平。但是,赋予开发人员更多洞察力和质量聚焦任务的责任意味着在软件生命周期进入交付阶段后,开发人员将更多地参与其中。许多组织已经投资于开发人员平台,为开发人员责任的这些新元素创建无摩擦路径,将其缩减为“需要知道”的基本要素,将其从开发人员不关心(或不需要关心)的复杂功能中抽象出来。
对 Kubernetes 开发者而言,可见性是必备条件之一。分布式服务面临的挑战之一就是了解部署和发布哪些版本以及使开发人员应用程序正常工作所需的所有依赖项。自然而然地,这很复杂,因此可见性可以消除障碍。同时,该平台还应提供易于测试新版本的方法,使用金丝雀发布等工具进行测试,在确保安全释放服务到最终用户时逐步释放服务,但如果出现问题,则可以快速回滚。
运行组件
在运行您的服务时,您的平台应包括流量管理功能,例如负载均衡和速率限制,以确保微服务的可用性和可扩展性。但是无论您创建什么流量管理策略,并且尽管进行了最佳测试努力并发布了许多金丝雀版本,可能会出现问题。您的平台应设计为处理这些小问题,并作为工作流程中生产事故快速缓解和响应的一部分。
当然,您将希望具有观测能力来监视和检测异常行为,以更轻松快速地识别问题。
开发者平台已成为塑造和简化开发者体验的核心途径。一个良好的开发者平台的基础,无论包含哪些工具和流程,都是指导组织中的开发人员了解、看到并定期执行成功所需知道的内容。